From 729ecc8a85de072b0d179a6adceaed73133b30e0 Mon Sep 17 00:00:00 2001 From: Yoav Shai Date: Fri, 20 Feb 2026 23:45:07 +0200 Subject: [PATCH] Add Openpad-based mobile app --- bun.lock | 1306 ++++++++++++++++- package.json | 7 +- .../src/context/global-sync/event-reducer.ts | 115 +- .../desktop/src-tauri/icons/prod/icon.png | Bin 190179 -> 11113 bytes packages/mobile/.gitignore | 41 + packages/mobile/README.md | 146 ++ packages/mobile/app.json | 45 + packages/mobile/app/(tabs)/_layout.tsx | 45 + .../mobile/app/(tabs)/projects/_layout.tsx | 5 + packages/mobile/app/(tabs)/projects/index.tsx | 34 + .../mobile/app/(tabs)/sessions/_layout.tsx | 9 + packages/mobile/app/(tabs)/sessions/index.tsx | 28 + packages/mobile/app/_layout.tsx | 73 + packages/mobile/app/chat/[id].tsx | 161 ++ packages/mobile/app/connect.tsx | 26 + packages/mobile/app/index.tsx | 12 + packages/mobile/app/new-project.tsx | 33 + packages/mobile/app/project/[id].tsx | 47 + packages/mobile/app/settings.tsx | 21 + packages/mobile/assets/adaptive-icon.png | Bin 0 -> 12561 bytes packages/mobile/assets/favicon.png | Bin 0 -> 1466 bytes packages/mobile/assets/icon.png | 1 + packages/mobile/assets/splash-icon.png | Bin 0 -> 17547 bytes packages/mobile/babel.config.js | 7 + packages/mobile/eas.json | 29 + packages/mobile/metro.config.js | 32 + packages/mobile/package.json | 48 + .../mobile/src/components/AnimatedFAB.tsx | 104 ++ packages/mobile/src/components/GlassCard.tsx | 63 + packages/mobile/src/components/Icon.tsx | 162 ++ packages/mobile/src/components/Markdown.tsx | 179 +++ .../src/components/chat/MessageBlock.tsx | 281 ++++ .../mobile/src/components/ui/EmptyState.tsx | 35 + .../mobile/src/components/ui/ScreenHeader.tsx | 36 + packages/mobile/src/global.css | 2 + packages/mobile/src/hooks/useOpenCode.ts | 14 + packages/mobile/src/hooks/useTheme.ts | 13 + .../mobile/src/providers/OpenCodeProvider.tsx | 523 +++++++ packages/mobile/src/screens/ChatScreen.tsx | 568 +++++++ packages/mobile/src/screens/ConnectScreen.tsx | 101 ++ .../mobile/src/screens/NewProjectScreen.tsx | 153 ++ .../src/screens/ProjectSessionsScreen.tsx | 188 +++ .../mobile/src/screens/ProjectsScreen.tsx | 126 ++ .../mobile/src/screens/SessionsScreen.tsx | 141 ++ .../mobile/src/screens/SettingsScreen.tsx | 159 ++ packages/mobile/src/theme/index.ts | 367 +++++ packages/mobile/src/utils/date.ts | 17 + packages/mobile/src/utils/path.ts | 25 + packages/mobile/tsconfig.json | 11 + packages/mobile/uniwind-types.d.ts | 10 + packages/opencode/.gitignore | 1 + packages/sdk/js/package.json | 7 +- packages/sdk/js/src/event-reducer.ts | 157 ++ 53 files changed, 5585 insertions(+), 129 deletions(-) create mode 100644 packages/mobile/.gitignore create mode 100644 packages/mobile/README.md create mode 100644 packages/mobile/app.json create mode 100644 packages/mobile/app/(tabs)/_layout.tsx create mode 100644 packages/mobile/app/(tabs)/projects/_layout.tsx create mode 100644 packages/mobile/app/(tabs)/projects/index.tsx create mode 100644 packages/mobile/app/(tabs)/sessions/_layout.tsx create mode 100644 packages/mobile/app/(tabs)/sessions/index.tsx create mode 100644 packages/mobile/app/_layout.tsx create mode 100644 packages/mobile/app/chat/[id].tsx create mode 100644 packages/mobile/app/connect.tsx create mode 100644 packages/mobile/app/index.tsx create mode 100644 packages/mobile/app/new-project.tsx create mode 100644 packages/mobile/app/project/[id].tsx create mode 100644 packages/mobile/app/settings.tsx create mode 100644 packages/mobile/assets/adaptive-icon.png create mode 100644 packages/mobile/assets/favicon.png create mode 120000 packages/mobile/assets/icon.png create mode 100644 packages/mobile/assets/splash-icon.png create mode 100644 packages/mobile/babel.config.js create mode 100644 packages/mobile/eas.json create mode 100644 packages/mobile/metro.config.js create mode 100644 packages/mobile/package.json create mode 100644 packages/mobile/src/components/AnimatedFAB.tsx create mode 100644 packages/mobile/src/components/GlassCard.tsx create mode 100644 packages/mobile/src/components/Icon.tsx create mode 100644 packages/mobile/src/components/Markdown.tsx create mode 100644 packages/mobile/src/components/chat/MessageBlock.tsx create mode 100644 packages/mobile/src/components/ui/EmptyState.tsx create mode 100644 packages/mobile/src/components/ui/ScreenHeader.tsx create mode 100644 packages/mobile/src/global.css create mode 100644 packages/mobile/src/hooks/useOpenCode.ts create mode 100644 packages/mobile/src/hooks/useTheme.ts create mode 100644 packages/mobile/src/providers/OpenCodeProvider.tsx create mode 100644 packages/mobile/src/screens/ChatScreen.tsx create mode 100644 packages/mobile/src/screens/ConnectScreen.tsx create mode 100644 packages/mobile/src/screens/NewProjectScreen.tsx create mode 100644 packages/mobile/src/screens/ProjectSessionsScreen.tsx create mode 100644 packages/mobile/src/screens/ProjectsScreen.tsx create mode 100644 packages/mobile/src/screens/SessionsScreen.tsx create mode 100644 packages/mobile/src/screens/SettingsScreen.tsx create mode 100644 packages/mobile/src/theme/index.ts create mode 100644 packages/mobile/src/utils/date.ts create mode 100644 packages/mobile/src/utils/path.ts create mode 100644 packages/mobile/tsconfig.json create mode 100644 packages/mobile/uniwind-types.d.ts create mode 100644 packages/sdk/js/src/event-reducer.ts diff --git a/bun.lock b/bun.lock index 88cf00f40db..4cc51325677 100644 --- a/bun.lock +++ b/bun.lock @@ -261,6 +261,41 @@ "typescript": "catalog:", }, }, + "packages/mobile": { + "name": "@opencode-ai/mobile", + "version": "1.0.0", + "dependencies": { + "@expo/vector-icons": "^15.0.3", + "@opencode-ai/sdk": "workspace:*", + "@react-native-async-storage/async-storage": "^2.2.0", + "babel-preset-expo": "54.0.9", + "expo": "~54.0.30", + "expo-blur": "^15.0.8", + "expo-file-system": "~19.0.21", + "expo-glass-effect": "^0.1.8", + "expo-image-picker": "17.0.10", + "expo-keep-awake": "15.0.8", + "expo-linear-gradient": "~15.0.8", + "expo-linking": "^8.0.11", + "expo-router": "~6.0.21", + "expo-status-bar": "~3.0.9", + "lucide-react-native": "^0.562.0", + "react": "19.1.0", + "react-native": "0.81.5", + "react-native-markdown-display": "^7.0.2", + "react-native-reanimated": "4.2.1", + "react-native-safe-area-context": "^5.6.2", + "react-native-screens": "~4.16.0", + "react-native-svg": "15.12.1", + "react-native-worklets": "0.7.1", + "uniwind": "1.3.2", + }, + "devDependencies": { + "@types/react": "~19.1.10", + "tailwindcss": "4.2.0", + "typescript": "~5.9.2", + }, + }, "packages/opencode": { "name": "opencode", "version": "1.2.10", @@ -402,6 +437,9 @@ "packages/sdk/js": { "name": "@opencode-ai/sdk", "version": "1.2.10", + "dependencies": { + "@opencode-ai/util": "workspace:*", + }, "devDependencies": { "@hey-api/openapi-ts": "0.90.10", "@tsconfig/node22": "catalog:", @@ -523,6 +561,8 @@ "overrides": { "@types/bun": "catalog:", "@types/node": "catalog:", + "@types/react": "~19.1.10", + "react-native": "0.81.5", }, "catalog": { "@cloudflare/workers-types": "4.20251008.0", @@ -568,6 +608,8 @@ "zod": "4.1.8", }, "packages": { + "@0no-co/graphql.web": ["@0no-co/graphql.web@1.2.0", "", { "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" }, "optionalPeers": ["graphql"] }, "sha512-/1iHy9TTr63gE1YcR5idjx8UREz1s0kFhydf3bBLCXyqjhkIc6igAzTOx3zPifCwFR87tsh/4Pa9cNts6d2otw=="], + "@actions/artifact": ["@actions/artifact@5.0.1", "", { "dependencies": { "@actions/core": "^2.0.0", "@actions/github": "^6.0.1", "@actions/http-client": "^3.0.0", "@azure/storage-blob": "^12.29.1", "@octokit/core": "^5.2.1", "@octokit/plugin-request-log": "^1.0.4", "@octokit/plugin-retry": "^3.0.9", "@octokit/request": "^8.4.1", "@octokit/request-error": "^5.1.1", "@protobuf-ts/plugin": "^2.2.3-alpha.1", "archiver": "^7.0.1", "jwt-decode": "^3.1.2", "unzip-stream": "^0.3.1" } }, "sha512-dHJ5rHduhCKUikKTT9eXeWoUvfKia3IjR1sO/VTAV3DVAL4yMTRnl2iO5mcfiBjySHLwPNezwENAVskKYU5ymw=="], "@actions/core": ["@actions/core@1.11.1", "", { "dependencies": { "@actions/exec": "^1.1.1", "@actions/http-client": "^2.0.1" } }, "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A=="], @@ -844,6 +886,8 @@ "@babel/helpers": ["@babel/helpers@7.28.6", "", { "dependencies": { "@babel/template": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw=="], + "@babel/highlight": ["@babel/highlight@7.25.9", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw=="], + "@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ["@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.28.5" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q=="], @@ -856,14 +900,54 @@ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ["@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g=="], + "@babel/plugin-proposal-decorators": ["@babel/plugin-proposal-decorators@7.29.0", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/plugin-syntax-decorators": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-CVBVv3VY/XRMxRYq5dwr2DS7/MvqPm23cOCjbwNnVrfOqcWlnefua1uUs0sjdKOGjvPUG633o07uWzJq4oI6dA=="], + + "@babel/plugin-proposal-export-default-from": ["@babel/plugin-proposal-export-default-from@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-hjlsMBl1aJc5lp8MoCDEZCiYzlgdRAShOjAfRw6X+GlpLpUPU7c3XNLsKFZbQk/1cRzBlJ7CXg3xJAJMrFa1Uw=="], + "@babel/plugin-proposal-private-property-in-object": ["@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w=="], + "@babel/plugin-syntax-async-generators": ["@babel/plugin-syntax-async-generators@7.8.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw=="], + + "@babel/plugin-syntax-bigint": ["@babel/plugin-syntax-bigint@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg=="], + + "@babel/plugin-syntax-class-properties": ["@babel/plugin-syntax-class-properties@7.12.13", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA=="], + + "@babel/plugin-syntax-class-static-block": ["@babel/plugin-syntax-class-static-block@7.14.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw=="], + + "@babel/plugin-syntax-decorators": ["@babel/plugin-syntax-decorators@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-71EYI0ONURHJBL4rSFXnITXqXrrY8q4P0q006DPfN+Rk+ASM+++IBXem/ruokgBZR8YNEWZ8R6B+rCb8VcUTqA=="], + + "@babel/plugin-syntax-dynamic-import": ["@babel/plugin-syntax-dynamic-import@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ=="], + + "@babel/plugin-syntax-export-default-from": ["@babel/plugin-syntax-export-default-from@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Svlx1fjJFnNz0LZeUaybRukSxZI3KkpApUmIRzEdXC5k8ErTOz0OD0kNrICi5Vc3GlpP5ZCeRyRO+mfWTSz+iQ=="], + + "@babel/plugin-syntax-flow": ["@babel/plugin-syntax-flow@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-D+OrJumc9McXNEBI/JmFnc/0uCM2/Y3PEBG3gfV3QIYkKv5pvnpzFrl1kYCrcHJP8nOeFB/SHi1IHz29pNGuew=="], + "@babel/plugin-syntax-import-assertions": ["@babel/plugin-syntax-import-assertions@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw=="], "@babel/plugin-syntax-import-attributes": ["@babel/plugin-syntax-import-attributes@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw=="], + "@babel/plugin-syntax-import-meta": ["@babel/plugin-syntax-import-meta@7.10.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g=="], + + "@babel/plugin-syntax-json-strings": ["@babel/plugin-syntax-json-strings@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA=="], + "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w=="], + "@babel/plugin-syntax-logical-assignment-operators": ["@babel/plugin-syntax-logical-assignment-operators@7.10.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig=="], + + "@babel/plugin-syntax-nullish-coalescing-operator": ["@babel/plugin-syntax-nullish-coalescing-operator@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ=="], + + "@babel/plugin-syntax-numeric-separator": ["@babel/plugin-syntax-numeric-separator@7.10.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug=="], + + "@babel/plugin-syntax-object-rest-spread": ["@babel/plugin-syntax-object-rest-spread@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA=="], + + "@babel/plugin-syntax-optional-catch-binding": ["@babel/plugin-syntax-optional-catch-binding@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q=="], + + "@babel/plugin-syntax-optional-chaining": ["@babel/plugin-syntax-optional-chaining@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg=="], + + "@babel/plugin-syntax-private-property-in-object": ["@babel/plugin-syntax-private-property-in-object@7.14.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg=="], + + "@babel/plugin-syntax-top-level-await": ["@babel/plugin-syntax-top-level-await@7.14.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw=="], + "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A=="], "@babel/plugin-syntax-unicode-sets-regex": ["@babel/plugin-syntax-unicode-sets-regex@7.18.6", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg=="], @@ -878,11 +962,11 @@ "@babel/plugin-transform-block-scoping": ["@babel/plugin-transform-block-scoping@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw=="], - "@babel/plugin-transform-class-properties": ["@babel/plugin-transform-class-properties@7.28.6", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw=="], + "@babel/plugin-transform-class-properties": ["@babel/plugin-transform-class-properties@7.27.1", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA=="], "@babel/plugin-transform-class-static-block": ["@babel/plugin-transform-class-static-block@7.28.6", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.12.0" } }, "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ=="], - "@babel/plugin-transform-classes": ["@babel/plugin-transform-classes@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-globals": "^7.28.0", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-replace-supers": "^7.28.6", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q=="], + "@babel/plugin-transform-classes": ["@babel/plugin-transform-classes@7.28.4", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-globals": "^7.28.0", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", "@babel/traverse": "^7.28.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA=="], "@babel/plugin-transform-computed-properties": ["@babel/plugin-transform-computed-properties@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/template": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ=="], @@ -902,6 +986,8 @@ "@babel/plugin-transform-export-namespace-from": ["@babel/plugin-transform-export-namespace-from@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ=="], + "@babel/plugin-transform-flow-strip-types": ["@babel/plugin-transform-flow-strip-types@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/plugin-syntax-flow": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg=="], + "@babel/plugin-transform-for-of": ["@babel/plugin-transform-for-of@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw=="], "@babel/plugin-transform-function-name": ["@babel/plugin-transform-function-name@7.27.1", "", { "dependencies": { "@babel/helper-compilation-targets": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ=="], @@ -926,7 +1012,7 @@ "@babel/plugin-transform-new-target": ["@babel/plugin-transform-new-target@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ=="], - "@babel/plugin-transform-nullish-coalescing-operator": ["@babel/plugin-transform-nullish-coalescing-operator@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg=="], + "@babel/plugin-transform-nullish-coalescing-operator": ["@babel/plugin-transform-nullish-coalescing-operator@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA=="], "@babel/plugin-transform-numeric-separator": ["@babel/plugin-transform-numeric-separator@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w=="], @@ -936,7 +1022,7 @@ "@babel/plugin-transform-optional-catch-binding": ["@babel/plugin-transform-optional-catch-binding@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ=="], - "@babel/plugin-transform-optional-chaining": ["@babel/plugin-transform-optional-chaining@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w=="], + "@babel/plugin-transform-optional-chaining": ["@babel/plugin-transform-optional-chaining@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg=="], "@babel/plugin-transform-parameters": ["@babel/plugin-transform-parameters@7.27.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg=="], @@ -946,16 +1032,26 @@ "@babel/plugin-transform-property-literals": ["@babel/plugin-transform-property-literals@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ=="], + "@babel/plugin-transform-react-display-name": ["@babel/plugin-transform-react-display-name@7.28.0", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA=="], + + "@babel/plugin-transform-react-jsx": ["@babel/plugin-transform-react-jsx@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-module-imports": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/plugin-syntax-jsx": "^7.28.6", "@babel/types": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow=="], + + "@babel/plugin-transform-react-jsx-development": ["@babel/plugin-transform-react-jsx-development@7.27.1", "", { "dependencies": { "@babel/plugin-transform-react-jsx": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q=="], + "@babel/plugin-transform-react-jsx-self": ["@babel/plugin-transform-react-jsx-self@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw=="], "@babel/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw=="], + "@babel/plugin-transform-react-pure-annotations": ["@babel/plugin-transform-react-pure-annotations@7.27.1", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA=="], + "@babel/plugin-transform-regenerator": ["@babel/plugin-transform-regenerator@7.29.0", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog=="], "@babel/plugin-transform-regexp-modifiers": ["@babel/plugin-transform-regexp-modifiers@7.28.6", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg=="], "@babel/plugin-transform-reserved-words": ["@babel/plugin-transform-reserved-words@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw=="], + "@babel/plugin-transform-runtime": ["@babel/plugin-transform-runtime@7.29.0", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "babel-plugin-polyfill-corejs2": "^0.4.14", "babel-plugin-polyfill-corejs3": "^0.13.0", "babel-plugin-polyfill-regenerator": "^0.6.5", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w=="], + "@babel/plugin-transform-shorthand-properties": ["@babel/plugin-transform-shorthand-properties@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ=="], "@babel/plugin-transform-spread": ["@babel/plugin-transform-spread@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA=="], @@ -980,6 +1076,8 @@ "@babel/preset-modules": ["@babel/preset-modules@0.1.6-no-external-plugins", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA=="], + "@babel/preset-react": ["@babel/preset-react@7.28.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-transform-react-display-name": "^7.28.0", "@babel/plugin-transform-react-jsx": "^7.27.1", "@babel/plugin-transform-react-jsx-development": "^7.27.1", "@babel/plugin-transform-react-pure-annotations": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ=="], + "@babel/preset-typescript": ["@babel/preset-typescript@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.27.1", "@babel/plugin-transform-typescript": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ=="], "@babel/runtime": ["@babel/runtime@7.28.6", "", {}, "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA=="], @@ -988,6 +1086,8 @@ "@babel/traverse": ["@babel/traverse@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/types": "^7.29.0", "debug": "^4.3.1" } }, "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA=="], + "@babel/traverse--for-generate-function-map": ["@babel/traverse@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/types": "^7.29.0", "debug": "^4.3.1" } }, "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA=="], + "@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], "@bufbuild/protobuf": ["@bufbuild/protobuf@2.11.0", "", {}, "sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ=="], @@ -1106,6 +1206,56 @@ "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], + "@expo/cli": ["@expo/cli@54.0.23", "", { "dependencies": { "@0no-co/graphql.web": "^1.0.8", "@expo/code-signing-certificates": "^0.0.6", "@expo/config": "~12.0.13", "@expo/config-plugins": "~54.0.4", "@expo/devcert": "^1.2.1", "@expo/env": "~2.0.8", "@expo/image-utils": "^0.8.8", "@expo/json-file": "^10.0.8", "@expo/metro": "~54.2.0", "@expo/metro-config": "~54.0.14", "@expo/osascript": "^2.3.8", "@expo/package-manager": "^1.9.10", "@expo/plist": "^0.4.8", "@expo/prebuild-config": "^54.0.8", "@expo/schema-utils": "^0.1.8", "@expo/spawn-async": "^1.7.2", "@expo/ws-tunnel": "^1.0.1", "@expo/xcpretty": "^4.3.0", "@react-native/dev-middleware": "0.81.5", "@urql/core": "^5.0.6", "@urql/exchange-retry": "^1.3.0", "accepts": "^1.3.8", "arg": "^5.0.2", "better-opn": "~3.0.2", "bplist-creator": "0.1.0", "bplist-parser": "^0.3.1", "chalk": "^4.0.0", "ci-info": "^3.3.0", "compression": "^1.7.4", "connect": "^3.7.0", "debug": "^4.3.4", "env-editor": "^0.4.1", "expo-server": "^1.0.5", "freeport-async": "^2.0.0", "getenv": "^2.0.0", "glob": "^13.0.0", "lan-network": "^0.1.6", "minimatch": "^9.0.0", "node-forge": "^1.3.3", "npm-package-arg": "^11.0.0", "ora": "^3.4.0", "picomatch": "^3.0.1", "pretty-bytes": "^5.6.0", "pretty-format": "^29.7.0", "progress": "^2.0.3", "prompts": "^2.3.2", "qrcode-terminal": "0.11.0", "require-from-string": "^2.0.2", "requireg": "^0.2.2", "resolve": "^1.22.2", "resolve-from": "^5.0.0", "resolve.exports": "^2.0.3", "semver": "^7.6.0", "send": "^0.19.0", "slugify": "^1.3.4", "source-map-support": "~0.5.21", "stacktrace-parser": "^0.1.10", "structured-headers": "^0.4.1", "tar": "^7.5.2", "terminal-link": "^2.1.1", "undici": "^6.18.2", "wrap-ansi": "^7.0.0", "ws": "^8.12.1" }, "peerDependencies": { "expo": "*", "expo-router": "*", "react-native": "*" }, "optionalPeers": ["expo-router", "react-native"], "bin": { "expo-internal": "build/bin/cli" } }, "sha512-km0h72SFfQCmVycH/JtPFTVy69w6Lx1cHNDmfLfQqgKFYeeHTjx7LVDP4POHCtNxFP2UeRazrygJhlh4zz498g=="], + + "@expo/code-signing-certificates": ["@expo/code-signing-certificates@0.0.6", "", { "dependencies": { "node-forge": "^1.3.3" } }, "sha512-iNe0puxwBNEcuua9gmTGzq+SuMDa0iATai1FlFTMHJ/vUmKvN/V//drXoLJkVb5i5H3iE/n/qIJxyoBnXouD0w=="], + + "@expo/config": ["@expo/config@12.0.13", "", { "dependencies": { "@babel/code-frame": "~7.10.4", "@expo/config-plugins": "~54.0.4", "@expo/config-types": "^54.0.10", "@expo/json-file": "^10.0.8", "deepmerge": "^4.3.1", "getenv": "^2.0.0", "glob": "^13.0.0", "require-from-string": "^2.0.2", "resolve-from": "^5.0.0", "resolve-workspace-root": "^2.0.0", "semver": "^7.6.0", "slugify": "^1.3.4", "sucrase": "~3.35.1" } }, "sha512-Cu52arBa4vSaupIWsF0h7F/Cg//N374nYb7HAxV0I4KceKA7x2UXpYaHOL7EEYYvp7tZdThBjvGpVmr8ScIvaQ=="], + + "@expo/config-plugins": ["@expo/config-plugins@54.0.4", "", { "dependencies": { "@expo/config-types": "^54.0.10", "@expo/json-file": "~10.0.8", "@expo/plist": "^0.4.8", "@expo/sdk-runtime-versions": "^1.0.0", "chalk": "^4.1.2", "debug": "^4.3.5", "getenv": "^2.0.0", "glob": "^13.0.0", "resolve-from": "^5.0.0", "semver": "^7.5.4", "slash": "^3.0.0", "slugify": "^1.6.6", "xcode": "^3.0.1", "xml2js": "0.6.0" } }, "sha512-g2yXGICdoOw5i3LkQSDxl2Q5AlQCrG7oniu0pCPPO+UxGb7He4AFqSvPSy8HpRUj55io17hT62FTjYRD+d6j3Q=="], + + "@expo/config-types": ["@expo/config-types@54.0.10", "", {}, "sha512-/J16SC2an1LdtCZ67xhSkGXpALYUVUNyZws7v+PVsFZxClYehDSoKLqyRaGkpHlYrCc08bS0RF5E0JV6g50psA=="], + + "@expo/devcert": ["@expo/devcert@1.2.1", "", { "dependencies": { "@expo/sudo-prompt": "^9.3.1", "debug": "^3.1.0" } }, "sha512-qC4eaxmKMTmJC2ahwyui6ud8f3W60Ss7pMkpBq40Hu3zyiAaugPXnZ24145U7K36qO9UHdZUVxsCvIpz2RYYCA=="], + + "@expo/devtools": ["@expo/devtools@0.1.8", "", { "dependencies": { "chalk": "^4.1.2" }, "peerDependencies": { "react": "*", "react-native": "*" }, "optionalPeers": ["react", "react-native"] }, "sha512-SVLxbuanDjJPgc0sy3EfXUMLb/tXzp6XIHkhtPVmTWJAp+FOr6+5SeiCfJrCzZFet0Ifyke2vX3sFcKwEvCXwQ=="], + + "@expo/env": ["@expo/env@2.0.8", "", { "dependencies": { "chalk": "^4.0.0", "debug": "^4.3.4", "dotenv": "~16.4.5", "dotenv-expand": "~11.0.6", "getenv": "^2.0.0" } }, "sha512-5VQD6GT8HIMRaSaB5JFtOXuvfDVU80YtZIuUT/GDhUF782usIXY13Tn3IdDz1Tm/lqA9qnRZQ1BF4t7LlvdJPA=="], + + "@expo/fingerprint": ["@expo/fingerprint@0.15.4", "", { "dependencies": { "@expo/spawn-async": "^1.7.2", "arg": "^5.0.2", "chalk": "^4.1.2", "debug": "^4.3.4", "getenv": "^2.0.0", "glob": "^13.0.0", "ignore": "^5.3.1", "minimatch": "^9.0.0", "p-limit": "^3.1.0", "resolve-from": "^5.0.0", "semver": "^7.6.0" }, "bin": { "fingerprint": "bin/cli.js" } }, "sha512-eYlxcrGdR2/j2M6pEDXo9zU9KXXF1vhP+V+Tl+lyY+bU8lnzrN6c637mz6Ye3em2ANy8hhUR03Raf8VsT9Ogng=="], + + "@expo/image-utils": ["@expo/image-utils@0.8.8", "", { "dependencies": { "@expo/spawn-async": "^1.7.2", "chalk": "^4.0.0", "getenv": "^2.0.0", "jimp-compact": "0.16.1", "parse-png": "^2.1.0", "resolve-from": "^5.0.0", "resolve-global": "^1.0.0", "semver": "^7.6.0", "temp-dir": "~2.0.0", "unique-string": "~2.0.0" } }, "sha512-HHHaG4J4nKjTtVa1GG9PCh763xlETScfEyNxxOvfTRr8IKPJckjTyqSLEtdJoFNJ1vqiABEjW7tqGhqGibZLeA=="], + + "@expo/json-file": ["@expo/json-file@10.0.8", "", { "dependencies": { "@babel/code-frame": "~7.10.4", "json5": "^2.2.3" } }, "sha512-9LOTh1PgKizD1VXfGQ88LtDH0lRwq9lsTb4aichWTWSWqy3Ugfkhfm3BhzBIkJJfQQ5iJu3m/BoRlEIjoCGcnQ=="], + + "@expo/metro": ["@expo/metro@54.2.0", "", { "dependencies": { "metro": "0.83.3", "metro-babel-transformer": "0.83.3", "metro-cache": "0.83.3", "metro-cache-key": "0.83.3", "metro-config": "0.83.3", "metro-core": "0.83.3", "metro-file-map": "0.83.3", "metro-minify-terser": "0.83.3", "metro-resolver": "0.83.3", "metro-runtime": "0.83.3", "metro-source-map": "0.83.3", "metro-symbolicate": "0.83.3", "metro-transform-plugins": "0.83.3", "metro-transform-worker": "0.83.3" } }, "sha512-h68TNZPGsk6swMmLm9nRSnE2UXm48rWwgcbtAHVMikXvbxdS41NDHHeqg1rcQ9AbznDRp6SQVC2MVpDnsRKU1w=="], + + "@expo/metro-config": ["@expo/metro-config@54.0.14", "", { "dependencies": { "@babel/code-frame": "^7.20.0", "@babel/core": "^7.20.0", "@babel/generator": "^7.20.5", "@expo/config": "~12.0.13", "@expo/env": "~2.0.8", "@expo/json-file": "~10.0.8", "@expo/metro": "~54.2.0", "@expo/spawn-async": "^1.7.2", "browserslist": "^4.25.0", "chalk": "^4.1.0", "debug": "^4.3.2", "dotenv": "~16.4.5", "dotenv-expand": "~11.0.6", "getenv": "^2.0.0", "glob": "^13.0.0", "hermes-parser": "^0.29.1", "jsc-safe-url": "^0.2.4", "lightningcss": "^1.30.1", "minimatch": "^9.0.0", "postcss": "~8.4.32", "resolve-from": "^5.0.0" }, "peerDependencies": { "expo": "*" }, "optionalPeers": ["expo"] }, "sha512-hxpLyDfOR4L23tJ9W1IbJJsG7k4lv2sotohBm/kTYyiG+pe1SYCAWsRmgk+H42o/wWf/HQjE5k45S5TomGLxNA=="], + + "@expo/metro-runtime": ["@expo/metro-runtime@6.1.2", "", { "dependencies": { "anser": "^1.4.9", "pretty-format": "^29.7.0", "stacktrace-parser": "^0.1.10", "whatwg-fetch": "^3.0.0" }, "peerDependencies": { "expo": "*", "react": "*", "react-dom": "*", "react-native": "*" }, "optionalPeers": ["react-dom"] }, "sha512-nvM+Qv45QH7pmYvP8JB1G8JpScrWND3KrMA6ZKe62cwwNiX/BjHU28Ear0v/4bQWXlOY0mv6B8CDIm8JxXde9g=="], + + "@expo/osascript": ["@expo/osascript@2.3.8", "", { "dependencies": { "@expo/spawn-async": "^1.7.2", "exec-async": "^2.2.0" } }, "sha512-/TuOZvSG7Nn0I8c+FcEaoHeBO07yu6vwDgk7rZVvAXoeAK5rkA09jRyjYsZo+0tMEFaToBeywA6pj50Mb3ny9w=="], + + "@expo/package-manager": ["@expo/package-manager@1.9.10", "", { "dependencies": { "@expo/json-file": "^10.0.8", "@expo/spawn-async": "^1.7.2", "chalk": "^4.0.0", "npm-package-arg": "^11.0.0", "ora": "^3.4.0", "resolve-workspace-root": "^2.0.0" } }, "sha512-axJm+NOj3jVxep49va/+L3KkF3YW/dkV+RwzqUJedZrv4LeTqOG4rhrCaCPXHTvLqCTDKu6j0Xyd28N7mnxsGA=="], + + "@expo/plist": ["@expo/plist@0.4.8", "", { "dependencies": { "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.2.3", "xmlbuilder": "^15.1.1" } }, "sha512-pfNtErGGzzRwHP+5+RqswzPDKkZrx+Cli0mzjQaus1ZWFsog5ibL+nVT3NcporW51o8ggnt7x813vtRbPiyOrQ=="], + + "@expo/prebuild-config": ["@expo/prebuild-config@54.0.8", "", { "dependencies": { "@expo/config": "~12.0.13", "@expo/config-plugins": "~54.0.4", "@expo/config-types": "^54.0.10", "@expo/image-utils": "^0.8.8", "@expo/json-file": "^10.0.8", "@react-native/normalize-colors": "0.81.5", "debug": "^4.3.1", "resolve-from": "^5.0.0", "semver": "^7.6.0", "xml2js": "0.6.0" }, "peerDependencies": { "expo": "*" } }, "sha512-EA7N4dloty2t5Rde+HP0IEE+nkAQiu4A/+QGZGT9mFnZ5KKjPPkqSyYcRvP5bhQE10D+tvz6X0ngZpulbMdbsg=="], + + "@expo/schema-utils": ["@expo/schema-utils@0.1.8", "", {}, "sha512-9I6ZqvnAvKKDiO+ZF8BpQQFYWXOJvTAL5L/227RUbWG1OVZDInFifzCBiqAZ3b67NRfeAgpgvbA7rejsqhY62A=="], + + "@expo/sdk-runtime-versions": ["@expo/sdk-runtime-versions@1.0.0", "", {}, "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ=="], + + "@expo/spawn-async": ["@expo/spawn-async@1.7.2", "", { "dependencies": { "cross-spawn": "^7.0.3" } }, "sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew=="], + + "@expo/sudo-prompt": ["@expo/sudo-prompt@9.3.2", "", {}, "sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw=="], + + "@expo/vector-icons": ["@expo/vector-icons@15.0.3", "", { "peerDependencies": { "expo-font": ">=14.0.4", "react": "*", "react-native": "*" } }, "sha512-SBUyYKphmlfUBqxSfDdJ3jAdEVSALS2VUPOUyqn48oZmb2TL/O7t7/PQm5v4NQujYEPLPMTLn9KVw6H7twwbTA=="], + + "@expo/ws-tunnel": ["@expo/ws-tunnel@1.0.6", "", {}, "sha512-nDRbLmSrJar7abvUjp3smDwH8HcbZcoOEa5jVPUv9/9CajgmWw20JNRwTuBRzWIWIkEJDkz20GoNA+tSwUqk0Q=="], + + "@expo/xcpretty": ["@expo/xcpretty@4.4.0", "", { "dependencies": { "@babel/code-frame": "^7.20.0", "chalk": "^4.1.0", "js-yaml": "^4.1.0" }, "bin": { "excpretty": "build/cli.js" } }, "sha512-o2qDlTqJ606h4xR36H2zWTywmZ3v3842K6TU8Ik2n1mfW0S580VHlt3eItVYdLYz+klaPp7CXqanja8eASZjRw=="], + "@expressive-code/core": ["@expressive-code/core@0.41.6", "", { "dependencies": { "@ctrl/tinycolor": "^4.0.4", "hast-util-select": "^6.0.2", "hast-util-to-html": "^9.0.1", "hast-util-to-text": "^4.0.1", "hastscript": "^9.0.0", "postcss": "^8.4.38", "postcss-nested": "^6.0.1", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.1" } }, "sha512-FvJQP+hG0jWi/FLBSmvHInDqWR7jNANp9PUDjdMqSshHb0y7sxx3vHuoOr6SgXjWw+MGLqorZyPQ0aAlHEok6g=="], "@expressive-code/plugin-frames": ["@expressive-code/plugin-frames@0.41.6", "", { "dependencies": { "@expressive-code/core": "^0.41.6" } }, "sha512-d+hkSYXIQot6fmYnOmWAM+7TNWRv/dhfjMsNq+mIZz8Tb4mPHOcgcfZeEM5dV9TDL0ioQNvtcqQNuzA1sRPjxg=="], @@ -1218,6 +1368,24 @@ "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], + "@isaacs/ttlcache": ["@isaacs/ttlcache@1.4.1", "", {}, "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA=="], + + "@istanbuljs/load-nyc-config": ["@istanbuljs/load-nyc-config@1.1.0", "", { "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", "get-package-type": "^0.1.0", "js-yaml": "^3.13.1", "resolve-from": "^5.0.0" } }, "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ=="], + + "@istanbuljs/schema": ["@istanbuljs/schema@0.1.3", "", {}, "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA=="], + + "@jest/create-cache-key-function": ["@jest/create-cache-key-function@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3" } }, "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA=="], + + "@jest/environment": ["@jest/environment@29.7.0", "", { "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "jest-mock": "^29.7.0" } }, "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw=="], + + "@jest/fake-timers": ["@jest/fake-timers@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", "jest-message-util": "^29.7.0", "jest-mock": "^29.7.0", "jest-util": "^29.7.0" } }, "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ=="], + + "@jest/schemas": ["@jest/schemas@29.6.3", "", { "dependencies": { "@sinclair/typebox": "^0.27.8" } }, "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA=="], + + "@jest/transform": ["@jest/transform@29.7.0", "", { "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", "@jridgewell/trace-mapping": "^0.3.18", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", "jest-haste-map": "^29.7.0", "jest-regex-util": "^29.6.3", "jest-util": "^29.7.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", "write-file-atomic": "^4.0.2" } }, "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw=="], + + "@jest/types": ["@jest/types@29.6.3", "", { "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw=="], + "@jimp/core": ["@jimp/core@1.6.0", "", { "dependencies": { "@jimp/file-ops": "1.6.0", "@jimp/types": "1.6.0", "@jimp/utils": "1.6.0", "await-to-js": "^3.0.0", "exif-parser": "^0.1.12", "file-type": "^16.0.0", "mime": "3" } }, "sha512-EQQlKU3s9QfdJqiSrZWNTxBs3rKXgO2W+GxNXDtwchF3a4IqxDheFX1ti+Env9hdJXDiYLp2jTRjlxhPthsk8w=="], "@jimp/diff": ["@jimp/diff@1.6.0", "", { "dependencies": { "@jimp/plugin-resize": "1.6.0", "@jimp/types": "1.6.0", "@jimp/utils": "1.6.0", "pixelmatch": "^5.3.0" } }, "sha512-+yUAQ5gvRC5D1WHYxjBHZI7JBRusGGSLf8AmPRPCenTzh4PA+wZ1xv2+cYqQwTfQHU5tXYOhA0xDytfHUf1Zyw=="], @@ -1432,6 +1600,8 @@ "@opencode-ai/function": ["@opencode-ai/function@workspace:packages/function"], + "@opencode-ai/mobile": ["@opencode-ai/mobile@workspace:packages/mobile"], + "@opencode-ai/plugin": ["@opencode-ai/plugin@workspace:packages/plugin"], "@opencode-ai/script": ["@opencode-ai/script@workspace:packages/script"], @@ -1618,6 +1788,8 @@ "@radix-ui/react-context": ["@radix-ui/react-context@1.0.1", "", { "dependencies": { "@babel/runtime": "^7.13.10" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0" }, "optionalPeers": ["@types/react"] }, "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg=="], + "@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw=="], + "@radix-ui/react-direction": ["@radix-ui/react-direction@1.0.1", "", { "dependencies": { "@babel/runtime": "^7.13.10" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0" }, "optionalPeers": ["@types/react"] }, "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA=="], "@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.0.4", "", { "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/primitive": "1.0.1", "@radix-ui/react-compose-refs": "1.0.1", "@radix-ui/react-primitive": "1.0.3", "@radix-ui/react-use-callback-ref": "1.0.1", "@radix-ui/react-use-escape-keydown": "1.0.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0", "react-dom": "^16.8 || ^17.0 || ^18.0" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg=="], @@ -1642,6 +1814,8 @@ "@radix-ui/react-slot": ["@radix-ui/react-slot@1.0.2", "", { "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/react-compose-refs": "1.0.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0" }, "optionalPeers": ["@types/react"] }, "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg=="], + "@radix-ui/react-tabs": ["@radix-ui/react-tabs@1.1.13", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A=="], + "@radix-ui/react-toggle": ["@radix-ui/react-toggle@1.0.3", "", { "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/primitive": "1.0.1", "@radix-ui/react-primitive": "1.0.3", "@radix-ui/react-use-controllable-state": "1.0.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0", "react-dom": "^16.8 || ^17.0 || ^18.0" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg=="], "@radix-ui/react-toggle-group": ["@radix-ui/react-toggle-group@1.0.4", "", { "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/primitive": "1.0.1", "@radix-ui/react-context": "1.0.1", "@radix-ui/react-direction": "1.0.1", "@radix-ui/react-primitive": "1.0.3", "@radix-ui/react-roving-focus": "1.0.4", "@radix-ui/react-toggle": "1.0.3", "@radix-ui/react-use-controllable-state": "1.0.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0", "react-dom": "^16.8 || ^17.0 || ^18.0" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A=="], @@ -1652,6 +1826,8 @@ "@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.0.1", "", { "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/react-use-callback-ref": "1.0.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0" }, "optionalPeers": ["@types/react"] }, "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA=="], + "@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA=="], + "@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.0.3", "", { "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/react-use-callback-ref": "1.0.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0" }, "optionalPeers": ["@types/react"] }, "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg=="], "@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.0.1", "", { "dependencies": { "@babel/runtime": "^7.13.10" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0" }, "optionalPeers": ["@types/react"] }, "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ=="], @@ -1664,6 +1840,42 @@ "@radix-ui/rect": ["@radix-ui/rect@1.0.1", "", { "dependencies": { "@babel/runtime": "^7.13.10" } }, "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ=="], + "@react-native-async-storage/async-storage": ["@react-native-async-storage/async-storage@2.2.0", "", { "dependencies": { "merge-options": "^3.0.4" }, "peerDependencies": { "react-native": "^0.0.0-0 || >=0.65 <1.0" } }, "sha512-gvRvjR5JAaUZF8tv2Kcq/Gbt3JHwbKFYfmb445rhOj6NUMx3qPLixmDx5pZAyb9at1bYvJ4/eTUipU5aki45xw=="], + + "@react-native/assets-registry": ["@react-native/assets-registry@0.81.5", "", {}, "sha512-705B6x/5Kxm1RKRvSv0ADYWm5JOnoiQ1ufW7h8uu2E6G9Of/eE6hP/Ivw3U5jI16ERqZxiKQwk34VJbB0niX9w=="], + + "@react-native/babel-plugin-codegen": ["@react-native/babel-plugin-codegen@0.81.5", "", { "dependencies": { "@babel/traverse": "^7.25.3", "@react-native/codegen": "0.81.5" } }, "sha512-oF71cIH6je3fSLi6VPjjC3Sgyyn57JLHXs+mHWc9MoCiJJcM4nqsS5J38zv1XQ8d3zOW2JtHro+LF0tagj2bfQ=="], + + "@react-native/babel-preset": ["@react-native/babel-preset@0.81.5", "", { "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-arrow-functions": "^7.24.7", "@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-computed-properties": "^7.24.7", "@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-function-name": "^7.25.1", "@babel/plugin-transform-literals": "^7.25.2", "@babel/plugin-transform-logical-assignment-operators": "^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-numeric-separator": "^7.24.7", "@babel/plugin-transform-object-rest-spread": "^7.24.7", "@babel/plugin-transform-optional-catch-binding": "^7.24.7", "@babel/plugin-transform-optional-chaining": "^7.24.8", "@babel/plugin-transform-parameters": "^7.24.7", "@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-shorthand-properties": "^7.24.7", "@babel/plugin-transform-spread": "^7.24.7", "@babel/plugin-transform-sticky-regex": "^7.24.7", "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", "@react-native/babel-plugin-codegen": "0.81.5", "babel-plugin-syntax-hermes-parser": "0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" } }, "sha512-UoI/x/5tCmi+pZ3c1+Ypr1DaRMDLI3y+Q70pVLLVgrnC3DHsHRIbHcCHIeG/IJvoeFqFM2sTdhSOLJrf8lOPrA=="], + + "@react-native/codegen": ["@react-native/codegen@0.81.5", "", { "dependencies": { "@babel/core": "^7.25.2", "@babel/parser": "^7.25.3", "glob": "^7.1.1", "hermes-parser": "0.29.1", "invariant": "^2.2.4", "nullthrows": "^1.1.1", "yargs": "^17.6.2" } }, "sha512-a2TDA03Up8lpSa9sh5VRGCQDXgCTOyDOFH+aqyinxp1HChG8uk89/G+nkJ9FPd0rqgi25eCTR16TWdS3b+fA6g=="], + + "@react-native/community-cli-plugin": ["@react-native/community-cli-plugin@0.81.5", "", { "dependencies": { "@react-native/dev-middleware": "0.81.5", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.83.1", "metro-config": "^0.83.1", "metro-core": "^0.83.1", "semver": "^7.1.3" }, "peerDependencies": { "@react-native-community/cli": "*", "@react-native/metro-config": "*" }, "optionalPeers": ["@react-native-community/cli", "@react-native/metro-config"] }, "sha512-yWRlmEOtcyvSZ4+OvqPabt+NS36vg0K/WADTQLhrYrm9qdZSuXmq8PmdJWz/68wAqKQ+4KTILiq2kjRQwnyhQw=="], + + "@react-native/debugger-frontend": ["@react-native/debugger-frontend@0.81.5", "", {}, "sha512-bnd9FSdWKx2ncklOetCgrlwqSGhMHP2zOxObJbOWXoj7GHEmih4MKarBo5/a8gX8EfA1EwRATdfNBQ81DY+h+w=="], + + "@react-native/dev-middleware": ["@react-native/dev-middleware@0.81.5", "", { "dependencies": { "@isaacs/ttlcache": "^1.4.1", "@react-native/debugger-frontend": "0.81.5", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", "debug": "^4.4.0", "invariant": "^2.2.4", "nullthrows": "^1.1.1", "open": "^7.0.3", "serve-static": "^1.16.2", "ws": "^6.2.3" } }, "sha512-WfPfZzboYgo/TUtysuD5xyANzzfka8Ebni6RIb2wDxhb56ERi7qDrE4xGhtPsjCL4pQBXSVxyIlCy0d8I6EgGA=="], + + "@react-native/gradle-plugin": ["@react-native/gradle-plugin@0.81.5", "", {}, "sha512-hORRlNBj+ReNMLo9jme3yQ6JQf4GZpVEBLxmTXGGlIL78MAezDZr5/uq9dwElSbcGmLEgeiax6e174Fie6qPLg=="], + + "@react-native/js-polyfills": ["@react-native/js-polyfills@0.81.5", "", {}, "sha512-fB7M1CMOCIUudTRuj7kzxIBTVw2KXnsgbQ6+4cbqSxo8NmRRhA0Ul4ZUzZj3rFd3VznTL4Brmocv1oiN0bWZ8w=="], + + "@react-native/normalize-colors": ["@react-native/normalize-colors@0.81.5", "", {}, "sha512-0HuJ8YtqlTVRXGZuGeBejLE04wSQsibpTI+RGOyVqxZvgtlLLC/Ssw0UmbHhT4lYMp2fhdtvKZSs5emWB1zR/g=="], + + "@react-native/virtualized-lists": ["@react-native/virtualized-lists@0.81.5", "", { "dependencies": { "invariant": "^2.2.4", "nullthrows": "^1.1.1" }, "peerDependencies": { "@types/react": "^19.1.0", "react": "*", "react-native": "*" }, "optionalPeers": ["@types/react"] }, "sha512-UVXgV/db25OPIvwZySeToXD/9sKKhOdkcWmmf4Jh8iBZuyfML+/5CasaZ1E7Lqg6g3uqVQq75NqIwkYmORJMPw=="], + + "@react-navigation/bottom-tabs": ["@react-navigation/bottom-tabs@7.14.0", "", { "dependencies": { "@react-navigation/elements": "^2.9.5", "color": "^4.2.3", "sf-symbols-typescript": "^2.1.0" }, "peerDependencies": { "@react-navigation/native": "^7.1.28", "react": ">= 18.2.0", "react-native": "*", "react-native-safe-area-context": ">= 4.0.0", "react-native-screens": ">= 4.0.0" } }, "sha512-oG2VdoInuIyK0o9o90Yo47hTCS+sPyVE7k8eSB37vt3pq3uQxjh8V3xJpsQfOfNlRUXOPB/ejH93nSBlP7ZHmQ=="], + + "@react-navigation/core": ["@react-navigation/core@7.14.0", "", { "dependencies": { "@react-navigation/routers": "^7.5.3", "escape-string-regexp": "^4.0.0", "fast-deep-equal": "^3.1.3", "nanoid": "^3.3.11", "query-string": "^7.1.3", "react-is": "^19.1.0", "use-latest-callback": "^0.2.4", "use-sync-external-store": "^1.5.0" }, "peerDependencies": { "react": ">= 18.2.0" } }, "sha512-tMpzskBzVp0E7CRNdNtJIdXjk54Kwe/TF9ViXAef+YFM1kSfGv4e/B2ozfXE+YyYgmh4WavTv8fkdJz1CNyu+g=="], + + "@react-navigation/elements": ["@react-navigation/elements@2.9.5", "", { "dependencies": { "color": "^4.2.3", "use-latest-callback": "^0.2.4", "use-sync-external-store": "^1.5.0" }, "peerDependencies": { "@react-native-masked-view/masked-view": ">= 0.2.0", "@react-navigation/native": "^7.1.28", "react": ">= 18.2.0", "react-native": "*", "react-native-safe-area-context": ">= 4.0.0" }, "optionalPeers": ["@react-native-masked-view/masked-view"] }, "sha512-iHZU8rRN1014Upz73AqNVXDvSMZDh5/ktQ1CMe21rdgnOY79RWtHHBp9qOS3VtqlUVYGkuX5GEw5mDt4tKdl0g=="], + + "@react-navigation/native": ["@react-navigation/native@7.1.28", "", { "dependencies": { "@react-navigation/core": "^7.14.0", "escape-string-regexp": "^4.0.0", "fast-deep-equal": "^3.1.3", "nanoid": "^3.3.11", "use-latest-callback": "^0.2.4" }, "peerDependencies": { "react": ">= 18.2.0", "react-native": "*" } }, "sha512-d1QDn+KNHfHGt3UIwOZvupvdsDdiHYZBEj7+wL2yDVo3tMezamYy60H9s3EnNVE1Ae1ty0trc7F2OKqo/RmsdQ=="], + + "@react-navigation/native-stack": ["@react-navigation/native-stack@7.13.0", "", { "dependencies": { "@react-navigation/elements": "^2.9.5", "color": "^4.2.3", "sf-symbols-typescript": "^2.1.0", "warn-once": "^0.1.1" }, "peerDependencies": { "@react-navigation/native": "^7.1.28", "react": ">= 18.2.0", "react-native": "*", "react-native-safe-area-context": ">= 4.0.0", "react-native-screens": ">= 4.0.0" } }, "sha512-5OOp1IKEd5woHl9hGBU0qCAfrQ4+7Tqej0HzDzGQeXzS8tg9gq84x1qUdRvFk5BXbhuAyvJliY9F1/I07d2X0A=="], + + "@react-navigation/routers": ["@react-navigation/routers@7.5.3", "", { "dependencies": { "nanoid": "^3.3.11" } }, "sha512-1tJHg4KKRJuQ1/EvJxatrMef3NZXEPzwUIUZ3n1yJ2t7Q97siwRtbynRpQG9/69ebbtiZ8W3ScOZF/OmhvM4Rg=="], + "@remix-run/node-fetch-server": ["@remix-run/node-fetch-server@0.8.1", "", {}, "sha512-J1dev372wtJqmqn9U/qbpbZxbJSQrogNN2+Qv1lKlpATpe/WQ9aCZfl/xSb9d2Rgh1IyLSvNxZAXPZxruO6Xig=="], "@remix-run/router": ["@remix-run/router@1.9.0", "", {}, "sha512-bV63itrKBC0zdT27qYm6SDZHlkXwFL1xMBuhkn+X7l0+IIhNaH5wuuvZKp6eKhCD4KFhujhfhCT1YxXW6esUIA=="], @@ -1748,8 +1960,14 @@ "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], + "@sinclair/typebox": ["@sinclair/typebox@0.27.10", "", {}, "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA=="], + "@sindresorhus/is": ["@sindresorhus/is@7.2.0", "", {}, "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw=="], + "@sinonjs/commons": ["@sinonjs/commons@3.0.1", "", { "dependencies": { "type-detect": "4.0.8" } }, "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ=="], + + "@sinonjs/fake-timers": ["@sinonjs/fake-timers@10.3.0", "", { "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA=="], + "@slack/bolt": ["@slack/bolt@3.22.0", "", { "dependencies": { "@slack/logger": "^4.0.0", "@slack/oauth": "^2.6.3", "@slack/socket-mode": "^1.3.6", "@slack/types": "^2.13.0", "@slack/web-api": "^6.13.0", "@types/express": "^4.16.1", "@types/promise.allsettled": "^1.0.3", "@types/tsscmp": "^1.0.0", "axios": "^1.7.4", "express": "^4.21.0", "path-to-regexp": "^8.1.0", "promise.allsettled": "^1.0.2", "raw-body": "^2.3.3", "tsscmp": "^1.0.6" } }, "sha512-iKDqGPEJDnrVwxSVlFW6OKTkijd7s4qLBeSufoBsTM0reTyfdp/5izIQVkxNfzjHi3o6qjdYbRXkYad5HBsBog=="], "@slack/logger": ["@slack/logger@4.0.0", "", { "dependencies": { "@types/node": ">=18.0.0" } }, "sha512-Wz7QYfPAlG/DR+DfABddUZeNgoeY7d1J39OCR2jR+v7VBsB8ezulDK5szTnDDPDwLH5IWhLvXIHlCFZV7MSKgA=="], @@ -2056,12 +2274,20 @@ "@types/fontkit": ["@types/fontkit@2.0.8", "", { "dependencies": { "@types/node": "*" } }, "sha512-wN+8bYxIpJf+5oZdrdtaX04qUuWHcKxcDEgRS9Qm9ZClSHjzEn13SxUC+5eRM+4yXIeTYk8mTzLAWGF64847ew=="], + "@types/graceful-fs": ["@types/graceful-fs@4.1.9", "", { "dependencies": { "@types/node": "*" } }, "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ=="], + "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], "@types/http-errors": ["@types/http-errors@2.0.5", "", {}, "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg=="], "@types/is-stream": ["@types/is-stream@1.1.0", "", { "dependencies": { "@types/node": "*" } }, "sha512-jkZatu4QVbR60mpIzjINmtS1ZF4a/FqdTUTBeQDVOQ2PYyidtwFKr0B5G6ERukKwliq+7mIXvxyppwzG5EgRYg=="], + "@types/istanbul-lib-coverage": ["@types/istanbul-lib-coverage@2.0.6", "", {}, "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w=="], + + "@types/istanbul-lib-report": ["@types/istanbul-lib-report@3.0.3", "", { "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA=="], + + "@types/istanbul-reports": ["@types/istanbul-reports@3.0.4", "", { "dependencies": { "@types/istanbul-lib-report": "*" } }, "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ=="], + "@types/js-yaml": ["@types/js-yaml@4.0.9", "", {}, "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg=="], "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], @@ -2094,13 +2320,11 @@ "@types/promise.allsettled": ["@types/promise.allsettled@1.0.6", "", {}, "sha512-wA0UT0HeT2fGHzIFV9kWpYz5mdoyLxKrTgMdZQM++5h6pYAFH73HXcQhefg24nD1yivUFEn5KU+EF4b+CXJ4Wg=="], - "@types/prop-types": ["@types/prop-types@15.7.15", "", {}, "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw=="], - "@types/qs": ["@types/qs@6.14.0", "", {}, "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ=="], "@types/range-parser": ["@types/range-parser@1.2.7", "", {}, "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ=="], - "@types/react": ["@types/react@18.0.25", "", { "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g=="], + "@types/react": ["@types/react@19.1.17", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-Qec1E3mhALmaspIrhWt9jkQMNdw6bReVu64mjvhbhq2NFPftLPVr+l1SZgmw/66WwBNpDh7ao5AT6gF5v41PFA=="], "@types/readable-stream": ["@types/readable-stream@4.0.23", "", { "dependencies": { "@types/node": "*" } }, "sha512-wwXrtQvbMHxCbBgjHaMGEmImFTQxxpfMOR/ZoQnXxB1woqkUbdLGFDgauo00Py9IudiaqSeiBiulSV9i6XIPig=="], @@ -2110,12 +2334,12 @@ "@types/sax": ["@types/sax@1.2.7", "", { "dependencies": { "@types/node": "*" } }, "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A=="], - "@types/scheduler": ["@types/scheduler@0.26.0", "", {}, "sha512-WFHp9YUJQ6CKshqoC37iOlHnQSmxNc795UhB26CyBBttrN9svdIrUjl/NjnNmfcwtncN0h/0PPAFWv9ovP8mLA=="], - "@types/send": ["@types/send@1.2.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ=="], "@types/serve-static": ["@types/serve-static@1.15.10", "", { "dependencies": { "@types/http-errors": "*", "@types/node": "*", "@types/send": "<1" } }, "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw=="], + "@types/stack-utils": ["@types/stack-utils@2.0.3", "", {}, "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw=="], + "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="], "@types/tsscmp": ["@types/tsscmp@1.0.2", "", {}, "sha512-cy7BRSU8GYYgxjcx0Py+8lo5MthuDhlyu076KUcYzVNXL23luYgRHkMG2fIFEc6neckeh/ntP82mw+U4QjZq+g=="], @@ -2156,6 +2380,10 @@ "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], + "@urql/core": ["@urql/core@5.2.0", "", { "dependencies": { "@0no-co/graphql.web": "^1.0.13", "wonka": "^6.3.2" } }, "sha512-/n0ieD0mvvDnVAXEQgX/7qJiVcvYvNkOHeBvkwtylfjydar123caCXcl58PXFY11oU1oquJocVXHxLAbtv4x1A=="], + + "@urql/exchange-retry": ["@urql/exchange-retry@1.3.2", "", { "dependencies": { "@urql/core": "^5.1.2", "wonka": "^6.3.2" } }, "sha512-TQMCz2pFJMfpNxmSfX1VSfTjwUIFx/mL+p1bnfM1xjjdla7Z+KnGMW/EhFbpckp3LyWAH4PgOsMwOMnIN+MBFg=="], + "@vercel/oidc": ["@vercel/oidc@3.1.0", "", {}, "sha512-Fw28YZpRnA3cAHHDlkt7xQHiJ0fcL+NRcIqsocZQUSmbzeIKRpwttJjik5ZGanXP+vlA4SbTg+AbA3bP363l+w=="], "@vitejs/plugin-react": ["@vitejs/plugin-react@4.7.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="], @@ -2192,6 +2420,8 @@ "@webgpu/types": ["@webgpu/types@0.1.54", "", {}, "sha512-81oaalC8LFrXjhsczomEQ0u3jG+TqE6V9QHLA8GNZq/Rnot0KDugu3LhSYSlie8tSdooAN1Hov05asrUUp9qgg=="], + "@xmldom/xmldom": ["@xmldom/xmldom@0.8.11", "", {}, "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw=="], + "@zip.js/zip.js": ["@zip.js/zip.js@2.7.62", "", {}, "sha512-OaLvZ8j4gCkLn048ypkZu29KX30r8/OfFF2w4Jo5WXFr+J04J+lzJ5TKZBVgFXhlvSkqNFQdfnY1Q8TMTCyBVA=="], "abbrev": ["abbrev@2.0.0", "", {}, "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ=="], @@ -2222,11 +2452,15 @@ "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="], + "anser": ["anser@1.4.10", "", {}, "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww=="], + "ansi-align": ["ansi-align@3.0.1", "", { "dependencies": { "string-width": "^4.1.0" } }, "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w=="], "ansi-colors": ["ansi-colors@4.1.3", "", {}, "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="], - "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + "ansi-escapes": ["ansi-escapes@4.3.2", "", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="], + + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], @@ -2246,7 +2480,7 @@ "arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="], - "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + "argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], @@ -2264,6 +2498,8 @@ "arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.4", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "is-array-buffer": "^3.0.4" } }, "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ=="], + "asap": ["asap@2.0.6", "", {}, "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="], + "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], "astring": ["astring@1.9.0", "", { "bin": { "astring": "bin/astring" } }, "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg=="], @@ -2276,6 +2512,8 @@ "async-function": ["async-function@1.0.0", "", {}, "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA=="], + "async-limiter": ["async-limiter@1.0.1", "", {}, "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="], + "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], "at-least-node": ["at-least-node@1.0.0", "", {}, "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="], @@ -2304,16 +2542,36 @@ "babel-dead-code-elimination": ["babel-dead-code-elimination@1.0.12", "", { "dependencies": { "@babel/core": "^7.23.7", "@babel/parser": "^7.23.6", "@babel/traverse": "^7.23.7", "@babel/types": "^7.23.6" } }, "sha512-GERT7L2TiYcYDtYk1IpD+ASAYXjKbLTDPhBtYj7X1NuRMDTMtAx9kyBenub1Ev41lo91OHCKdmP+egTDmfQ7Ig=="], + "babel-jest": ["babel-jest@29.7.0", "", { "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", "babel-preset-jest": "^29.6.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" }, "peerDependencies": { "@babel/core": "^7.8.0" } }, "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg=="], + + "babel-plugin-istanbul": ["babel-plugin-istanbul@6.1.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-instrument": "^5.0.4", "test-exclude": "^6.0.0" } }, "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA=="], + + "babel-plugin-jest-hoist": ["babel-plugin-jest-hoist@29.6.3", "", { "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" } }, "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg=="], + "babel-plugin-jsx-dom-expressions": ["babel-plugin-jsx-dom-expressions@0.40.5", "", { "dependencies": { "@babel/helper-module-imports": "7.18.6", "@babel/plugin-syntax-jsx": "^7.18.6", "@babel/types": "^7.20.7", "html-entities": "2.3.3", "parse5": "^7.1.2" }, "peerDependencies": { "@babel/core": "^7.20.12" } }, "sha512-8TFKemVLDYezqqv4mWz+PhRrkryTzivTGu0twyLrOkVZ0P63COx2Y04eVsUjFlwSOXui1z3P3Pn209dokWnirg=="], "babel-plugin-module-resolver": ["babel-plugin-module-resolver@5.0.2", "", { "dependencies": { "find-babel-config": "^2.1.1", "glob": "^9.3.3", "pkg-up": "^3.1.0", "reselect": "^4.1.7", "resolve": "^1.22.8" } }, "sha512-9KtaCazHee2xc0ibfqsDeamwDps6FZNo5S0Q81dUqEuFzVwPhcT4J5jOqIVvgCA3Q/wO9hKYxN/Ds3tIsp5ygg=="], "babel-plugin-polyfill-corejs2": ["babel-plugin-polyfill-corejs2@0.4.15", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-define-polyfill-provider": "^0.6.6", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw=="], - "babel-plugin-polyfill-corejs3": ["babel-plugin-polyfill-corejs3@0.14.0", "", { "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.6", "core-js-compat": "^3.48.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ=="], + "babel-plugin-polyfill-corejs3": ["babel-plugin-polyfill-corejs3@0.13.0", "", { "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.5", "core-js-compat": "^3.43.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A=="], "babel-plugin-polyfill-regenerator": ["babel-plugin-polyfill-regenerator@0.6.6", "", { "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.6" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A=="], + "babel-plugin-react-compiler": ["babel-plugin-react-compiler@1.0.0", "", { "dependencies": { "@babel/types": "^7.26.0" } }, "sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw=="], + + "babel-plugin-react-native-web": ["babel-plugin-react-native-web@0.21.2", "", {}, "sha512-SPD0J6qjJn8231i0HZhlAGH6NORe+QvRSQM2mwQEzJ2Fb3E4ruWTiiicPlHjmeWShDXLcvoorOCXjeR7k/lyWA=="], + + "babel-plugin-syntax-hermes-parser": ["babel-plugin-syntax-hermes-parser@0.29.1", "", { "dependencies": { "hermes-parser": "0.29.1" } }, "sha512-2WFYnoWGdmih1I1J5eIqxATOeycOqRwYxAQBu3cUu/rhwInwHUg7k60AFNbuGjSDL8tje5GDrAnxzRLcu2pYcA=="], + + "babel-plugin-transform-flow-enums": ["babel-plugin-transform-flow-enums@0.0.2", "", { "dependencies": { "@babel/plugin-syntax-flow": "^7.12.1" } }, "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ=="], + + "babel-preset-current-node-syntax": ["babel-preset-current-node-syntax@1.2.0", "", { "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-import-attributes": "^7.24.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg=="], + + "babel-preset-expo": ["babel-preset-expo@54.0.9", "", { "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/plugin-proposal-decorators": "^7.12.9", "@babel/plugin-proposal-export-default-from": "^7.24.7", "@babel/plugin-syntax-export-default-from": "^7.24.7", "@babel/plugin-transform-class-static-block": "^7.27.1", "@babel/plugin-transform-export-namespace-from": "^7.25.9", "@babel/plugin-transform-flow-strip-types": "^7.25.2", "@babel/plugin-transform-modules-commonjs": "^7.24.8", "@babel/plugin-transform-object-rest-spread": "^7.24.7", "@babel/plugin-transform-parameters": "^7.24.7", "@babel/plugin-transform-private-methods": "^7.24.7", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-runtime": "^7.24.7", "@babel/preset-react": "^7.22.15", "@babel/preset-typescript": "^7.23.0", "@react-native/babel-preset": "0.81.5", "babel-plugin-react-compiler": "^1.0.0", "babel-plugin-react-native-web": "~0.21.0", "babel-plugin-syntax-hermes-parser": "^0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "debug": "^4.3.4", "resolve-from": "^5.0.0" }, "peerDependencies": { "@babel/runtime": "^7.20.0", "expo": "*", "react-refresh": ">=0.14.0 <1.0.0" }, "optionalPeers": ["@babel/runtime", "expo"] }, "sha512-8J6hRdgEC2eJobjoft6mKJ294cLxmi3khCUy2JJQp4htOYYkllSLUq6vudWJkTJiIuGdVR4bR6xuz2EvJLWHNg=="], + + "babel-preset-jest": ["babel-preset-jest@29.6.3", "", { "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA=="], + "babel-preset-solid": ["babel-preset-solid@1.9.10", "", { "dependencies": { "babel-plugin-jsx-dom-expressions": "^0.40.3" }, "peerDependencies": { "@babel/core": "^7.0.0", "solid-js": "^1.9.10" }, "optionalPeers": ["solid-js"] }, "sha512-HCelrgua/Y+kqO8RyL04JBWS/cVdrtUv/h45GntgQY+cJl4eBcKkCDV3TdMjtKx1nXwRaR9QXslM/Npm1dxdZQ=="], "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], @@ -2334,6 +2592,10 @@ "before-after-hook": ["before-after-hook@2.2.3", "", {}, "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ=="], + "better-opn": ["better-opn@3.0.2", "", { "dependencies": { "open": "^8.0.4" } }, "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ=="], + + "big-integer": ["big-integer@1.6.52", "", {}, "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg=="], + "bignumber.js": ["bignumber.js@9.3.1", "", {}, "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ=="], "binary": ["binary@0.3.0", "", { "dependencies": { "buffers": "~0.1.1", "chainsaw": "~0.1.0" } }, "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg=="], @@ -2360,6 +2622,10 @@ "boxen": ["boxen@8.0.1", "", { "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^8.0.0", "chalk": "^5.3.0", "cli-boxes": "^3.0.0", "string-width": "^7.2.0", "type-fest": "^4.21.0", "widest-line": "^5.0.0", "wrap-ansi": "^9.0.0" } }, "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw=="], + "bplist-creator": ["bplist-creator@0.1.0", "", { "dependencies": { "stream-buffers": "2.2.x" } }, "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg=="], + + "bplist-parser": ["bplist-parser@0.3.2", "", { "dependencies": { "big-integer": "1.6.x" } }, "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ=="], + "brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="], "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], @@ -2368,6 +2634,8 @@ "browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], + "bser": ["bser@2.1.1", "", { "dependencies": { "node-int64": "^0.4.0" } }, "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ=="], + "buffer": ["buffer@4.9.2", "", { "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", "isarray": "^1.0.0" } }, "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg=="], "buffer-crc32": ["buffer-crc32@1.0.0", "", {}, "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w=="], @@ -2412,6 +2680,8 @@ "camelcase-css": ["camelcase-css@2.0.1", "", {}, "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="], + "camelize": ["camelize@1.0.1", "", {}, "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ=="], + "caniuse-lite": ["caniuse-lite@1.0.30001770", "", {}, "sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw=="], "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], @@ -2440,6 +2710,10 @@ "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], + "chrome-launcher": ["chrome-launcher@0.15.2", "", { "dependencies": { "@types/node": "*", "escape-string-regexp": "^4.0.0", "is-wsl": "^2.2.0", "lighthouse-logger": "^1.0.0" }, "bin": { "print-chrome-path": "bin/print-chrome-path.js" } }, "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ=="], + + "chromium-edge-launcher": ["chromium-edge-launcher@0.2.0", "", { "dependencies": { "@types/node": "*", "escape-string-regexp": "^4.0.0", "is-wsl": "^2.2.0", "lighthouse-logger": "^1.0.0", "mkdirp": "^1.0.4", "rimraf": "^3.0.2" } }, "sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg=="], + "ci-info": ["ci-info@4.4.0", "", {}, "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg=="], "citty": ["citty@0.1.6", "", { "dependencies": { "consola": "^3.2.3" } }, "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ=="], @@ -2450,8 +2724,12 @@ "cli-boxes": ["cli-boxes@3.0.0", "", {}, "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g=="], + "cli-cursor": ["cli-cursor@2.1.0", "", { "dependencies": { "restore-cursor": "^2.0.0" } }, "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw=="], + "cli-spinners": ["cli-spinners@3.4.0", "", {}, "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw=="], + "client-only": ["client-only@0.0.1", "", {}, "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="], + "clipboardy": ["clipboardy@4.0.0", "", { "dependencies": { "execa": "^8.0.1", "is-wsl": "^3.1.0", "is64bit": "^2.0.0" } }, "sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w=="], "cliui": ["cliui@9.0.1", "", { "dependencies": { "string-width": "^7.2.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w=="], @@ -2478,7 +2756,7 @@ "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], - "commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + "commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], "common-ancestor-path": ["common-ancestor-path@1.0.1", "", {}, "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w=="], @@ -2486,12 +2764,20 @@ "compress-commons": ["compress-commons@6.0.2", "", { "dependencies": { "crc-32": "^1.2.0", "crc32-stream": "^6.0.0", "is-stream": "^2.0.1", "normalize-path": "^3.0.0", "readable-stream": "^4.0.0" } }, "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg=="], + "compressible": ["compressible@2.0.18", "", { "dependencies": { "mime-db": ">= 1.43.0 < 2" } }, "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg=="], + + "compression": ["compression@1.8.1", "", { "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", "debug": "2.6.9", "negotiator": "~0.6.4", "on-headers": "~1.1.0", "safe-buffer": "5.2.1", "vary": "~1.1.2" } }, "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + "condense-newlines": ["condense-newlines@0.2.1", "", { "dependencies": { "extend-shallow": "^2.0.1", "is-whitespace": "^0.3.0", "kind-of": "^3.0.2" } }, "sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg=="], "confbox": ["confbox@0.2.4", "", {}, "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ=="], "config-chain": ["config-chain@1.1.13", "", { "dependencies": { "ini": "^1.3.4", "proto-list": "~1.2.1" } }, "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ=="], + "connect": ["connect@3.7.0", "", { "dependencies": { "debug": "2.6.9", "finalhandler": "1.1.2", "parseurl": "~1.3.3", "utils-merge": "1.0.1" } }, "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ=="], + "consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], "content-disposition": ["content-disposition@0.5.4", "", { "dependencies": { "safe-buffer": "5.2.1" } }, "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ=="], @@ -2524,11 +2810,15 @@ "crypto-random-string": ["crypto-random-string@2.0.0", "", {}, "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA=="], + "css-color-keywords": ["css-color-keywords@1.0.0", "", {}, "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg=="], + "css-select": ["css-select@5.2.2", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw=="], "css-selector-parser": ["css-selector-parser@3.3.0", "", {}, "sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g=="], - "css-tree": ["css-tree@3.1.0", "", { "dependencies": { "mdn-data": "2.12.2", "source-map-js": "^1.0.1" } }, "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w=="], + "css-to-react-native": ["css-to-react-native@3.2.0", "", { "dependencies": { "camelize": "^1.0.0", "css-color-keywords": "^1.0.0", "postcss-value-parser": "^4.0.2" } }, "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ=="], + + "css-tree": ["css-tree@1.1.3", "", { "dependencies": { "mdn-data": "2.0.14", "source-map": "^0.6.1" } }, "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q=="], "css-what": ["css-what@6.2.2", "", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="], @@ -2536,6 +2826,8 @@ "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], + "culori": ["culori@4.0.2", "", {}, "sha512-1+BhOB8ahCn4O0cep0Sh2l9KCOfOdY+BXJnKMHFFzDEouSr/el18QwXEMRlOj9UY5nCeA8UN3a/82rUWRBeyBw=="], + "data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="], "data-view-buffer": ["data-view-buffer@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ=="], @@ -2552,12 +2844,18 @@ "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="], + "decode-uri-component": ["decode-uri-component@0.2.2", "", {}, "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ=="], + + "deep-extend": ["deep-extend@0.6.0", "", {}, "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="], + "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], "default-browser": ["default-browser@5.5.0", "", { "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" } }, "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw=="], "default-browser-id": ["default-browser-id@5.0.1", "", {}, "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q=="], + "defaults": ["defaults@1.0.4", "", { "dependencies": { "clone": "^1.0.2" } }, "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A=="], + "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], "define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="], @@ -2618,7 +2916,9 @@ "dot-prop": ["dot-prop@8.0.2", "", { "dependencies": { "type-fest": "^3.8.0" } }, "sha512-xaBe6ZT4DHPkg0k4Ytbvn5xoxgpG0jOS1dYxSOwAHPuNLjP3/OzN0gH55SrLqpx8cBfSaVt91lXYkApjb+nYdQ=="], - "dotenv": ["dotenv@17.3.1", "", {}, "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA=="], + "dotenv": ["dotenv@16.4.7", "", {}, "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ=="], + + "dotenv-expand": ["dotenv-expand@11.0.7", "", { "dependencies": { "dotenv": "^16.4.5" } }, "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA=="], "drizzle-kit": ["drizzle-kit@1.0.0-beta.12-a5629fb", "", { "dependencies": { "@drizzle-team/brocli": "^0.11.0", "@js-temporal/polyfill": "^0.5.1", "esbuild": "^0.25.10", "tsx": "^4.20.6" }, "bin": { "drizzle-kit": "bin.cjs" } }, "sha512-l+p4QOMvPGYBYEE9NBlU7diu+NSlxuOUwi0I7i01Uj1PpfU0NxhPzaks/9q1MDw4FAPP8vdD0dOhoqosKtRWWQ=="], @@ -2656,6 +2956,8 @@ "entities": ["entities@7.0.1", "", {}, "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA=="], + "env-editor": ["env-editor@0.4.2", "", {}, "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA=="], + "error-stack-parser": ["error-stack-parser@2.1.4", "", { "dependencies": { "stackframe": "^1.3.4" } }, "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ=="], "error-stack-parser-es": ["error-stack-parser-es@1.0.5", "", {}, "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA=="], @@ -2690,7 +2992,7 @@ "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], - "escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], @@ -2724,6 +3026,8 @@ "eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="], + "exec-async": ["exec-async@2.2.0", "", {}, "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw=="], + "execa": ["execa@8.0.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", "human-signals": "^5.0.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^5.1.0", "onetime": "^6.0.0", "signal-exit": "^4.1.0", "strip-final-newline": "^3.0.0" } }, "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg=="], "exif-parser": ["exif-parser@0.1.12", "", {}, "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw=="], @@ -2732,6 +3036,42 @@ "expect-type": ["expect-type@1.3.0", "", {}, "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA=="], + "expo": ["expo@54.0.33", "", { "dependencies": { "@babel/runtime": "^7.20.0", "@expo/cli": "54.0.23", "@expo/config": "~12.0.13", "@expo/config-plugins": "~54.0.4", "@expo/devtools": "0.1.8", "@expo/fingerprint": "0.15.4", "@expo/metro": "~54.2.0", "@expo/metro-config": "54.0.14", "@expo/vector-icons": "^15.0.3", "@ungap/structured-clone": "^1.3.0", "babel-preset-expo": "~54.0.10", "expo-asset": "~12.0.12", "expo-constants": "~18.0.13", "expo-file-system": "~19.0.21", "expo-font": "~14.0.11", "expo-keep-awake": "~15.0.8", "expo-modules-autolinking": "3.0.24", "expo-modules-core": "3.0.29", "pretty-format": "^29.7.0", "react-refresh": "^0.14.2", "whatwg-url-without-unicode": "8.0.0-3" }, "peerDependencies": { "@expo/dom-webview": "*", "@expo/metro-runtime": "*", "react": "*", "react-native": "*", "react-native-webview": "*" }, "optionalPeers": ["@expo/dom-webview", "@expo/metro-runtime", "react-native-webview"], "bin": { "expo": "bin/cli", "fingerprint": "bin/fingerprint", "expo-modules-autolinking": "bin/autolinking" } }, "sha512-3yOEfAKqo+gqHcV8vKcnq0uA5zxlohnhA3fu4G43likN8ct5ZZ3LjAh9wDdKteEkoad3tFPvwxmXW711S5OHUw=="], + + "expo-asset": ["expo-asset@12.0.12", "", { "dependencies": { "@expo/image-utils": "^0.8.8", "expo-constants": "~18.0.12" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-CsXFCQbx2fElSMn0lyTdRIyKlSXOal6ilLJd+yeZ6xaC7I9AICQgscY5nj0QcwgA+KYYCCEQEBndMsmj7drOWQ=="], + + "expo-blur": ["expo-blur@15.0.8", "", { "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-rWyE1NBRZEu9WD+X+5l7gyPRszw7n12cW3IRNAb5i6KFzaBp8cxqT5oeaphJapqURvcqhkOZn2k5EtBSbsuU7w=="], + + "expo-constants": ["expo-constants@18.0.13", "", { "dependencies": { "@expo/config": "~12.0.13", "@expo/env": "~2.0.8" }, "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-FnZn12E1dRYKDHlAdIyNFhBurKTS3F9CrfrBDJI5m3D7U17KBHMQ6JEfYlSj7LG7t+Ulr+IKaj58L1k5gBwTcQ=="], + + "expo-file-system": ["expo-file-system@19.0.21", "", { "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-s3DlrDdiscBHtab/6W1osrjGL+C2bvoInPJD7sOwmxfJ5Woynv2oc+Fz1/xVXaE/V7HE/+xrHC/H45tu6lZzzg=="], + + "expo-font": ["expo-font@14.0.11", "", { "dependencies": { "fontfaceobserver": "^2.1.0" }, "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-ga0q61ny4s/kr4k8JX9hVH69exVSIfcIc19+qZ7gt71Mqtm7xy2c6kwsPTCyhBW2Ro5yXTT8EaZOpuRi35rHbg=="], + + "expo-glass-effect": ["expo-glass-effect@0.1.9", "", { "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-mDnoQKrvdkKEk1kUDgCKRdw1fHsouG25BclBico9lZSrLb7HpfGla3jnlz9rYGqXIiO8i9BTxpsmFhDnc1/4hg=="], + + "expo-image-loader": ["expo-image-loader@6.0.0", "", { "peerDependencies": { "expo": "*" } }, "sha512-nKs/xnOGw6ACb4g26xceBD57FKLFkSwEUTDXEDF3Gtcu3MqF3ZIYd3YM+sSb1/z9AKV1dYT7rMSGVNgsveXLIQ=="], + + "expo-image-picker": ["expo-image-picker@17.0.10", "", { "dependencies": { "expo-image-loader": "~6.0.0" }, "peerDependencies": { "expo": "*" } }, "sha512-a2xrowp2trmvXyUWgX3O6Q2rZaa2C59AqivKI7+bm+wLvMfTEbZgldLX4rEJJhM8xtmEDTNU+lzjtObwzBRGaw=="], + + "expo-keep-awake": ["expo-keep-awake@15.0.8", "", { "peerDependencies": { "expo": "*", "react": "*" } }, "sha512-YK9M1VrnoH1vLJiQzChZgzDvVimVoriibiDIFLbQMpjYBnvyfUeHJcin/Gx1a+XgupNXy92EQJLgI/9ZuXajYQ=="], + + "expo-linear-gradient": ["expo-linear-gradient@15.0.8", "", { "peerDependencies": { "expo": "*", "react": "*", "react-native": "*" } }, "sha512-V2d8Wjn0VzhPHO+rrSBtcl+Fo+jUUccdlmQ6OoL9/XQB7Qk3d9lYrqKDJyccwDxmQT10JdST3Tmf2K52NLc3kw=="], + + "expo-linking": ["expo-linking@8.0.11", "", { "dependencies": { "expo-constants": "~18.0.12", "invariant": "^2.2.4" }, "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-+VSaNL5om3kOp/SSKO5qe6cFgfSIWnnQDSbA7XLs3ECkYzXRquk5unxNS3pg7eK5kNUmQ4kgLI7MhTggAEUBLA=="], + + "expo-modules-autolinking": ["expo-modules-autolinking@3.0.24", "", { "dependencies": { "@expo/spawn-async": "^1.7.2", "chalk": "^4.1.0", "commander": "^7.2.0", "require-from-string": "^2.0.2", "resolve-from": "^5.0.0" }, "bin": { "expo-modules-autolinking": "bin/expo-modules-autolinking.js" } }, "sha512-TP+6HTwhL7orDvsz2VzauyQlXJcAWyU3ANsZ7JGL4DQu8XaZv/A41ZchbtAYLfozNA2Ya1Hzmhx65hXryBMjaQ=="], + + "expo-modules-core": ["expo-modules-core@3.0.29", "", { "dependencies": { "invariant": "^2.2.4" }, "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-LzipcjGqk8gvkrOUf7O2mejNWugPkf3lmd9GkqL9WuNyeN2fRwU0Dn77e3ZUKI3k6sI+DNwjkq4Nu9fNN9WS7Q=="], + + "expo-router": ["expo-router@6.0.23", "", { "dependencies": { "@expo/metro-runtime": "^6.1.2", "@expo/schema-utils": "^0.1.8", "@radix-ui/react-slot": "1.2.0", "@radix-ui/react-tabs": "^1.1.12", "@react-navigation/bottom-tabs": "^7.4.0", "@react-navigation/native": "^7.1.8", "@react-navigation/native-stack": "^7.3.16", "client-only": "^0.0.1", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "expo-server": "^1.0.5", "fast-deep-equal": "^3.1.3", "invariant": "^2.2.4", "nanoid": "^3.3.8", "query-string": "^7.1.3", "react-fast-compare": "^3.2.2", "react-native-is-edge-to-edge": "^1.1.6", "semver": "~7.6.3", "server-only": "^0.0.1", "sf-symbols-typescript": "^2.1.0", "shallowequal": "^1.1.0", "use-latest-callback": "^0.2.1", "vaul": "^1.1.2" }, "peerDependencies": { "@react-navigation/drawer": "^7.5.0", "@testing-library/react-native": ">= 12.0.0", "expo": "*", "expo-constants": "^18.0.13", "expo-linking": "^8.0.11", "react": "*", "react-dom": "*", "react-native": "*", "react-native-gesture-handler": "*", "react-native-reanimated": "*", "react-native-safe-area-context": ">= 5.4.0", "react-native-screens": "*", "react-native-web": "*", "react-server-dom-webpack": "~19.0.4 || ~19.1.5 || ~19.2.4" }, "optionalPeers": ["@react-navigation/drawer", "@testing-library/react-native", "react-dom", "react-native-gesture-handler", "react-native-reanimated", "react-native-web", "react-server-dom-webpack"] }, "sha512-qCxVAiCrCyu0npky6azEZ6dJDMt77OmCzEbpF6RbUTlfkaCA417LvY14SBkk0xyGruSxy/7pvJOI6tuThaUVCA=="], + + "expo-server": ["expo-server@1.0.5", "", {}, "sha512-IGR++flYH70rhLyeXF0Phle56/k4cee87WeQ4mamS+MkVAVP+dDlOHf2nN06Z9Y2KhU0Gp1k+y61KkghF7HdhA=="], + + "expo-status-bar": ["expo-status-bar@3.0.9", "", { "dependencies": { "react-native-is-edge-to-edge": "^1.2.1" }, "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-xyYyVg6V1/SSOZWh4Ni3U129XHCnFHBTcUo0dhWtFDrZbNp/duw5AGsQfb2sVeU0gxWHXSY1+5F0jnKYC7WuOw=="], + + "exponential-backoff": ["exponential-backoff@3.1.3", "", {}, "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA=="], + "express": ["express@4.22.1", "", { "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "~1.20.3", "content-disposition": "~0.5.4", "content-type": "~1.0.4", "cookie": "~0.7.1", "cookie-signature": "~1.0.6", "debug": "2.6.9", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", "finalhandler": "~1.3.1", "fresh": "~0.5.2", "http-errors": "~2.0.0", "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "~2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "~0.1.12", "proxy-addr": "~2.0.7", "qs": "~6.14.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "~0.19.0", "serve-static": "~1.16.2", "setprototypeof": "1.2.0", "statuses": "~2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" } }, "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g=="], "express-rate-limit": ["express-rate-limit@7.5.1", "", { "peerDependencies": { "express": ">= 4.11" } }, "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw=="], @@ -2770,6 +3110,8 @@ "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], + "fb-watchman": ["fb-watchman@2.0.2", "", { "dependencies": { "bser": "2.1.1" } }, "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA=="], + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], "fetch-blob": ["fetch-blob@3.2.0", "", { "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" } }, "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ=="], @@ -2780,6 +3122,8 @@ "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + "filter-obj": ["filter-obj@1.1.0", "", {}, "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ=="], + "finalhandler": ["finalhandler@1.3.2", "", { "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "~2.4.1", "parseurl": "~1.3.3", "statuses": "~2.0.2", "unpipe": "~1.0.0" } }, "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg=="], "find-babel-config": ["find-babel-config@2.1.2", "", { "dependencies": { "json5": "^2.2.3" } }, "sha512-ZfZp1rQyp4gyuxqt1ZqjFGVeVBvmpURMqdIWXbPRfB97Bf6BzdK/xSIbylEINzQ0kB5tlDQfn9HkNXXWsqTqLg=="], @@ -2792,10 +3136,14 @@ "flattie": ["flattie@1.1.1", "", {}, "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ=="], + "flow-enums-runtime": ["flow-enums-runtime@0.0.6", "", {}, "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw=="], + "follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], "fontace": ["fontace@0.3.1", "", { "dependencies": { "@types/fontkit": "^2.0.8", "fontkit": "^2.0.4" } }, "sha512-9f5g4feWT1jWT8+SbL85aLIRLIXUaDygaM2xPXRmzPYxrOMNok79Lr3FGJoKVNKibE0WCunNiEVG2mwuE+2qEg=="], + "fontfaceobserver": ["fontfaceobserver@2.3.0", "", {}, "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg=="], + "fontkit": ["fontkit@2.0.4", "", { "dependencies": { "@swc/helpers": "^0.5.12", "brotli": "^1.3.2", "clone": "^2.1.2", "dfa": "^1.2.0", "fast-deep-equal": "^3.1.3", "restructure": "^3.0.0", "tiny-inflate": "^1.0.3", "unicode-properties": "^1.4.0", "unicode-trie": "^2.0.0" } }, "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g=="], "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], @@ -2816,6 +3164,8 @@ "framer-motion": ["framer-motion@8.5.5", "", { "dependencies": { "@motionone/dom": "^10.15.3", "hey-listen": "^1.0.8", "tslib": "^2.4.0" }, "optionalDependencies": { "@emotion/is-prop-valid": "^0.8.2" }, "peerDependencies": { "react": "^18.0.0", "react-dom": "^18.0.0" } }, "sha512-5IDx5bxkjWHWUF3CVJoSyUVOtrbAxtzYBBowRE2uYI/6VYhkEBD+rbTHEGuUmbGHRj6YqqSfoG7Aa1cLyWCrBA=="], + "freeport-async": ["freeport-async@2.0.0", "", {}, "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ=="], + "fresh": ["fresh@0.5.2", "", {}, "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="], "fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], @@ -2852,6 +3202,8 @@ "get-own-enumerable-property-symbols": ["get-own-enumerable-property-symbols@3.0.2", "", {}, "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g=="], + "get-package-type": ["get-package-type@0.1.0", "", {}, "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q=="], + "get-port": ["get-port@7.1.0", "", {}, "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw=="], "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], @@ -2862,6 +3214,8 @@ "get-tsconfig": ["get-tsconfig@4.13.6", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw=="], + "getenv": ["getenv@2.0.0", "", {}, "sha512-VilgtJj/ALgGY77fiLam5iD336eSWi96Q15JSAG1zi8NRBysm3LXKdGnHb4m5cuyxvOLQQKWpBZAT6ni4FI2iQ=="], + "ghostty-opentui": ["ghostty-opentui@1.3.7", "", { "dependencies": { "strip-ansi": "^7.1.2" }, "peerDependencies": { "@opentui/core": "*" }, "optionalPeers": ["@opentui/core"] }, "sha512-tXlVrFKMiS+VNm48OwQtCefP7i85o04wv2S/NPR5bIzv4yAl2//q7CBa8JEv9bL+5jpZsfMm6z8VJGrTq6Xjvg=="], "ghostty-web": ["ghostty-web@0.4.0", "", {}, "sha512-0puDBik2qapbD/QQBW9o5ZHfXnZBqZWx/ctBiVtKZ6ZLds4NYb+wZuw1cRLXZk9zYovIQ908z3rvFhexAvc5Hg=="], @@ -2878,6 +3232,8 @@ "glob-to-regexp": ["glob-to-regexp@0.4.1", "", {}, "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="], + "global-dirs": ["global-dirs@0.1.1", "", { "dependencies": { "ini": "^1.3.4" } }, "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg=="], + "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], "globby": ["globby@11.0.4", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.1.1", "ignore": "^5.1.4", "merge2": "^1.3.0", "slash": "^3.0.0" } }, "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg=="], @@ -2960,12 +3316,18 @@ "he": ["he@1.2.0", "", { "bin": { "he": "bin/he" } }, "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="], + "hermes-estree": ["hermes-estree@0.29.1", "", {}, "sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ=="], + + "hermes-parser": ["hermes-parser@0.29.1", "", { "dependencies": { "hermes-estree": "0.29.1" } }, "sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA=="], + "hey-listen": ["hey-listen@1.0.8", "", {}, "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q=="], "hono": ["hono@4.10.7", "", {}, "sha512-icXIITfw/07Q88nLSkB9aiUrd8rYzSweK681Kjo/TSggaGbOX4RRyxxm71v+3PC8C/j+4rlxGeoTRxQDkaJkUw=="], "hono-openapi": ["hono-openapi@1.1.2", "", { "peerDependencies": { "@hono/standard-validator": "^0.2.0", "@standard-community/standard-json": "^0.3.5", "@standard-community/standard-openapi": "^0.2.9", "@types/json-schema": "^7.0.15", "hono": "^4.8.3", "openapi-types": "^12.1.3" }, "optionalPeers": ["@hono/standard-validator", "hono"] }, "sha512-toUcO60MftRBxqcVyxsHNYs2m4vf4xkQaiARAucQx3TiBPDtMNNkoh+C4I1vAretQZiGyaLOZNWn1YxfSyUA5g=="], + "hosted-git-info": ["hosted-git-info@7.0.2", "", { "dependencies": { "lru-cache": "^10.0.1" } }, "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w=="], + "html-entities": ["html-entities@2.3.3", "", {}, "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA=="], "html-escaper": ["html-escaper@3.0.3", "", {}, "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ=="], @@ -3008,10 +3370,16 @@ "image-q": ["image-q@4.0.0", "", { "dependencies": { "@types/node": "16.9.1" } }, "sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw=="], + "image-size": ["image-size@1.2.1", "", { "dependencies": { "queue": "6.0.2" }, "bin": { "image-size": "bin/image-size.js" } }, "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw=="], + "import-local": ["import-local@3.2.0", "", { "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" }, "bin": { "import-local-fixture": "fixtures/cli.js" } }, "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA=="], "import-meta-resolve": ["import-meta-resolve@4.2.0", "", {}, "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg=="], + "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], + + "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], "ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], @@ -3020,6 +3388,8 @@ "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], + "invariant": ["invariant@2.2.4", "", { "dependencies": { "loose-envify": "^1.0.0" } }, "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA=="], + "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], "iron-webcrypto": ["iron-webcrypto@1.2.1", "", {}, "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg=="], @@ -3088,7 +3458,7 @@ "is-obj": ["is-obj@1.0.1", "", {}, "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg=="], - "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], + "is-plain-obj": ["is-plain-obj@2.1.0", "", {}, "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="], "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="], @@ -3130,6 +3500,10 @@ "isomorphic-ws": ["isomorphic-ws@5.0.0", "", { "peerDependencies": { "ws": "*" } }, "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw=="], + "istanbul-lib-coverage": ["istanbul-lib-coverage@3.2.2", "", {}, "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg=="], + + "istanbul-lib-instrument": ["istanbul-lib-instrument@5.2.1", "", { "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" } }, "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg=="], + "iterate-iterator": ["iterate-iterator@1.0.2", "", {}, "sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw=="], "iterate-value": ["iterate-value@1.0.2", "", { "dependencies": { "es-get-iterator": "^1.0.2", "iterate-iterator": "^1.0.1" } }, "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ=="], @@ -3138,8 +3512,28 @@ "jake": ["jake@10.9.4", "", { "dependencies": { "async": "^3.2.6", "filelist": "^1.0.4", "picocolors": "^1.1.1" }, "bin": { "jake": "bin/cli.js" } }, "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA=="], + "jest-environment-node": ["jest-environment-node@29.7.0", "", { "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "jest-mock": "^29.7.0", "jest-util": "^29.7.0" } }, "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw=="], + + "jest-get-type": ["jest-get-type@29.6.3", "", {}, "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw=="], + + "jest-haste-map": ["jest-haste-map@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", "jest-regex-util": "^29.6.3", "jest-util": "^29.7.0", "jest-worker": "^29.7.0", "micromatch": "^4.0.4", "walker": "^1.0.8" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA=="], + + "jest-message-util": ["jest-message-util@29.7.0", "", { "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w=="], + + "jest-mock": ["jest-mock@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "jest-util": "^29.7.0" } }, "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw=="], + + "jest-regex-util": ["jest-regex-util@29.6.3", "", {}, "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg=="], + + "jest-util": ["jest-util@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } }, "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA=="], + + "jest-validate": ["jest-validate@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", "jest-get-type": "^29.6.3", "leven": "^3.1.0", "pretty-format": "^29.7.0" } }, "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw=="], + + "jest-worker": ["jest-worker@29.7.0", "", { "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw=="], + "jimp": ["jimp@1.6.0", "", { "dependencies": { "@jimp/core": "1.6.0", "@jimp/diff": "1.6.0", "@jimp/js-bmp": "1.6.0", "@jimp/js-gif": "1.6.0", "@jimp/js-jpeg": "1.6.0", "@jimp/js-png": "1.6.0", "@jimp/js-tiff": "1.6.0", "@jimp/plugin-blit": "1.6.0", "@jimp/plugin-blur": "1.6.0", "@jimp/plugin-circle": "1.6.0", "@jimp/plugin-color": "1.6.0", "@jimp/plugin-contain": "1.6.0", "@jimp/plugin-cover": "1.6.0", "@jimp/plugin-crop": "1.6.0", "@jimp/plugin-displace": "1.6.0", "@jimp/plugin-dither": "1.6.0", "@jimp/plugin-fisheye": "1.6.0", "@jimp/plugin-flip": "1.6.0", "@jimp/plugin-hash": "1.6.0", "@jimp/plugin-mask": "1.6.0", "@jimp/plugin-print": "1.6.0", "@jimp/plugin-quantize": "1.6.0", "@jimp/plugin-resize": "1.6.0", "@jimp/plugin-rotate": "1.6.0", "@jimp/plugin-threshold": "1.6.0", "@jimp/types": "1.6.0", "@jimp/utils": "1.6.0" } }, "sha512-YcwCHw1kiqEeI5xRpDlPPBGL2EOpBKLwO4yIBJcXWHPj5PnA5urGq0jbyhM5KoNpypQ6VboSoxc9D8HyfvngSg=="], + "jimp-compact": ["jimp-compact@0.16.1", "", {}, "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww=="], + "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], "jmespath": ["jmespath@0.16.0", "", {}, "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw=="], @@ -3162,6 +3556,8 @@ "jsbi": ["jsbi@4.3.2", "", {}, "sha512-9fqMSQbhJykSeii05nxKl4m6Eqn2P6rOlYiS+C5Dr/HPIU/7yZxu5qzbs40tgaFORiw2Amd0mirjxatXYMkIew=="], + "jsc-safe-url": ["jsc-safe-url@0.2.4", "", {}, "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q=="], + "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], "json-bigint": ["json-bigint@1.0.0", "", { "dependencies": { "bignumber.js": "^9.0.0" } }, "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ=="], @@ -3200,6 +3596,8 @@ "klona": ["klona@2.0.6", "", {}, "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA=="], + "lan-network": ["lan-network@0.1.7", "", { "bin": { "lan-network": "dist/lan-network-cli.js" } }, "sha512-mnIlAEMu4OyEvUNdzco9xpuB9YVcPkQec+QsgycBCtPZvEqWPCDPfbAE4OJMdBBWpZWtpCn1xw9jJYlwjWI5zQ=="], + "lang-map": ["lang-map@0.4.0", "", { "dependencies": { "language-map": "^1.1.0" } }, "sha512-oiSqZIEUnWdFeDNsp4HId4tAxdFbx5iMBOwA3666Fn2L8Khj8NiD9xRvMsGmKXopPVkaDFtSv3CJOmXFUB0Hcg=="], "language-map": ["language-map@1.5.0", "", {}, "sha512-n7gFZpe+DwEAX9cXVTw43i3wiudWDDtSn28RmdnS/HCPr284dQI/SztsamWanRr75oSlKSaGbV2nmWCTzGCoVg=="], @@ -3212,8 +3610,12 @@ "light-my-request": ["light-my-request@6.6.0", "", { "dependencies": { "cookie": "^1.0.1", "process-warning": "^4.0.0", "set-cookie-parser": "^2.6.0" } }, "sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A=="], + "lighthouse-logger": ["lighthouse-logger@1.4.2", "", { "dependencies": { "debug": "^2.6.9", "marky": "^1.2.2" } }, "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g=="], + "lightningcss": ["lightningcss@1.30.1", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.30.1", "lightningcss-darwin-x64": "1.30.1", "lightningcss-freebsd-x64": "1.30.1", "lightningcss-linux-arm-gnueabihf": "1.30.1", "lightningcss-linux-arm64-gnu": "1.30.1", "lightningcss-linux-arm64-musl": "1.30.1", "lightningcss-linux-x64-gnu": "1.30.1", "lightningcss-linux-x64-musl": "1.30.1", "lightningcss-win32-arm64-msvc": "1.30.1", "lightningcss-win32-x64-msvc": "1.30.1" } }, "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg=="], + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.30.2", "", { "os": "android", "cpu": "arm64" }, "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A=="], + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.30.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ=="], "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.30.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA=="], @@ -3238,6 +3640,8 @@ "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + "linkify-it": ["linkify-it@2.2.0", "", { "dependencies": { "uc.micro": "^1.0.1" } }, "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw=="], + "locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], "lodash": ["lodash@4.17.23", "", {}, "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="], @@ -3260,6 +3664,10 @@ "lodash.sortby": ["lodash.sortby@4.7.0", "", {}, "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA=="], + "lodash.throttle": ["lodash.throttle@4.1.1", "", {}, "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ=="], + + "log-symbols": ["log-symbols@2.2.0", "", { "dependencies": { "chalk": "^2.0.1" } }, "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg=="], + "loglevelnext": ["loglevelnext@6.0.0", "", {}, "sha512-FDl1AI2sJGjHHG3XKJd6sG3/6ncgiGCQ0YkW46nxe7SfqQq6hujd9CvFXIXtkGBUN83KPZ2KSOJK8q5P0bSSRQ=="], "long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="], @@ -3276,14 +3684,20 @@ "lru_map": ["lru_map@0.4.1", "", {}, "sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg=="], + "lucide-react-native": ["lucide-react-native@0.562.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-native": "*", "react-native-svg": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0" } }, "sha512-ZF2ok8SzyUaiCIrLGqYh/6SPs+huVzbZOCv0i411L4+oP3tJgQvvKePiVgWCioa7HsT2xaJZSrdd92cuB2/+ew=="], + "luxon": ["luxon@3.6.1", "", {}, "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ=="], "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], "magicast": ["magicast@0.3.5", "", { "dependencies": { "@babel/parser": "^7.25.4", "@babel/types": "^7.25.4", "source-map-js": "^1.2.0" } }, "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ=="], + "makeerror": ["makeerror@1.0.12", "", { "dependencies": { "tmpl": "1.0.5" } }, "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg=="], + "markdown-extensions": ["markdown-extensions@2.0.0", "", {}, "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q=="], + "markdown-it": ["markdown-it@10.0.0", "", { "dependencies": { "argparse": "^1.0.7", "entities": "~2.0.0", "linkify-it": "^2.0.0", "mdurl": "^1.0.1", "uc.micro": "^1.0.5" }, "bin": { "markdown-it": "bin/markdown-it.js" } }, "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg=="], + "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], "marked": ["marked@17.0.1", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-boeBdiS0ghpWcSwoNm/jJBwdpFaMnZWRzjA6SkUMYb40SVaN1x7mmfGKp0jvexGcx+7y2La5zRZsYFZI6Qpypg=="], @@ -3292,6 +3706,8 @@ "marked-shiki": ["marked-shiki@1.2.1", "", { "peerDependencies": { "marked": ">=7.0.0", "shiki": ">=1.0.0" } }, "sha512-yHxYQhPY5oYaIRnROn98foKhuClark7M373/VpLxiy5TrDu9Jd/LsMwo8w+U91Up4oDb9IXFrP0N1MFRz8W/DQ=="], + "marky": ["marky@1.3.0", "", {}, "sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ=="], + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], "md-to-react-email": ["md-to-react-email@5.0.0", "", { "dependencies": { "marked": "7.0.4" }, "peerDependencies": { "react": "18.x" } }, "sha512-GdBrBUbAAJHypnuyofYGfVos8oUslxHx69hs3CW9P0L8mS1sT6GnJuMBTlz/Fw+2widiwdavcu9UwyLF/BzZ4w=="], @@ -3332,20 +3748,54 @@ "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="], - "mdn-data": ["mdn-data@2.12.2", "", {}, "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA=="], + "mdn-data": ["mdn-data@2.0.14", "", {}, "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow=="], + + "mdurl": ["mdurl@1.0.1", "", {}, "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g=="], "media-typer": ["media-typer@0.3.0", "", {}, "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="], + "memoize-one": ["memoize-one@5.2.1", "", {}, "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q=="], + "merge-anything": ["merge-anything@5.1.7", "", { "dependencies": { "is-what": "^4.1.8" } }, "sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ=="], "merge-descriptors": ["merge-descriptors@1.0.3", "", {}, "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ=="], + "merge-options": ["merge-options@3.0.4", "", { "dependencies": { "is-plain-obj": "^2.1.0" } }, "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ=="], + "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], "methods": ["methods@1.1.2", "", {}, "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="], + "metro": ["metro@0.83.3", "", { "dependencies": { "@babel/code-frame": "^7.24.7", "@babel/core": "^7.25.2", "@babel/generator": "^7.25.0", "@babel/parser": "^7.25.3", "@babel/template": "^7.25.0", "@babel/traverse": "^7.25.3", "@babel/types": "^7.25.2", "accepts": "^1.3.7", "chalk": "^4.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.32.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.83.3", "metro-cache": "0.83.3", "metro-cache-key": "0.83.3", "metro-config": "0.83.3", "metro-core": "0.83.3", "metro-file-map": "0.83.3", "metro-resolver": "0.83.3", "metro-runtime": "0.83.3", "metro-source-map": "0.83.3", "metro-symbolicate": "0.83.3", "metro-transform-plugins": "0.83.3", "metro-transform-worker": "0.83.3", "mime-types": "^2.1.27", "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" } }, "sha512-+rP+/GieOzkt97hSJ0MrPOuAH/jpaS21ZDvL9DJ35QYRDlQcwzcvUlGUf79AnQxq/2NPiS/AULhhM4TKutIt8Q=="], + + "metro-babel-transformer": ["metro-babel-transformer@0.83.3", "", { "dependencies": { "@babel/core": "^7.25.2", "flow-enums-runtime": "^0.0.6", "hermes-parser": "0.32.0", "nullthrows": "^1.1.1" } }, "sha512-1vxlvj2yY24ES1O5RsSIvg4a4WeL7PFXgKOHvXTXiW0deLvQr28ExXj6LjwCCDZ4YZLhq6HddLpZnX4dEdSq5g=="], + + "metro-cache": ["metro-cache@0.83.3", "", { "dependencies": { "exponential-backoff": "^3.1.1", "flow-enums-runtime": "^0.0.6", "https-proxy-agent": "^7.0.5", "metro-core": "0.83.3" } }, "sha512-3jo65X515mQJvKqK3vWRblxDEcgY55Sk3w4xa6LlfEXgQ9g1WgMh9m4qVZVwgcHoLy0a2HENTPCCX4Pk6s8c8Q=="], + + "metro-cache-key": ["metro-cache-key@0.83.3", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-59ZO049jKzSmvBmG/B5bZ6/dztP0ilp0o988nc6dpaDsU05Cl1c/lRf+yx8m9WW/JVgbmfO5MziBU559XjI5Zw=="], + + "metro-config": ["metro-config@0.83.3", "", { "dependencies": { "connect": "^3.6.5", "flow-enums-runtime": "^0.0.6", "jest-validate": "^29.7.0", "metro": "0.83.3", "metro-cache": "0.83.3", "metro-core": "0.83.3", "metro-runtime": "0.83.3", "yaml": "^2.6.1" } }, "sha512-mTel7ipT0yNjKILIan04bkJkuCzUUkm2SeEaTads8VfEecCh+ltXchdq6DovXJqzQAXuR2P9cxZB47Lg4klriA=="], + + "metro-core": ["metro-core@0.83.3", "", { "dependencies": { "flow-enums-runtime": "^0.0.6", "lodash.throttle": "^4.1.1", "metro-resolver": "0.83.3" } }, "sha512-M+X59lm7oBmJZamc96usuF1kusd5YimqG/q97g4Ac7slnJ3YiGglW5CsOlicTR5EWf8MQFxxjDoB6ytTqRe8Hw=="], + + "metro-file-map": ["metro-file-map@0.83.3", "", { "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" } }, "sha512-jg5AcyE0Q9Xbbu/4NAwwZkmQn7doJCKGW0SLeSJmzNB9Z24jBe0AL2PHNMy4eu0JiKtNWHz9IiONGZWq7hjVTA=="], + + "metro-minify-terser": ["metro-minify-terser@0.83.3", "", { "dependencies": { "flow-enums-runtime": "^0.0.6", "terser": "^5.15.0" } }, "sha512-O2BmfWj6FSfzBLrNCXt/rr2VYZdX5i6444QJU0fFoc7Ljg+Q+iqebwE3K0eTvkI6TRjELsXk1cjU+fXwAR4OjQ=="], + + "metro-resolver": ["metro-resolver@0.83.3", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-0js+zwI5flFxb1ktmR///bxHYg7OLpRpWZlBBruYG8OKYxeMP7SV0xQ/o/hUelrEMdK4LJzqVtHAhBm25LVfAQ=="], + + "metro-runtime": ["metro-runtime@0.83.4", "", { "dependencies": { "@babel/runtime": "^7.25.0", "flow-enums-runtime": "^0.0.6" } }, "sha512-sWj9KN311yG22Zv0kVbAp9dorB9HtTThvQKsAn6PLxrVrz+1UBsLrQSxjE/s4PtzDi1HABC648jo4K9Euz/5jw=="], + + "metro-source-map": ["metro-source-map@0.83.4", "", { "dependencies": { "@babel/traverse": "^7.29.0", "@babel/types": "^7.29.0", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "metro-symbolicate": "0.83.4", "nullthrows": "^1.1.1", "ob1": "0.83.4", "source-map": "^0.5.6", "vlq": "^1.0.0" } }, "sha512-pPbmQwS0zgU+/0u5KPkuvlsQP0V+WYQ9qNshqupIL720QRH0vS3QR25IVVtbunofEDJchI11Q4QtIbmUyhpOBw=="], + + "metro-symbolicate": ["metro-symbolicate@0.83.3", "", { "dependencies": { "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "metro-source-map": "0.83.3", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "vlq": "^1.0.0" }, "bin": { "metro-symbolicate": "src/index.js" } }, "sha512-F/YChgKd6KbFK3eUR5HdUsfBqVsanf5lNTwFd4Ca7uuxnHgBC3kR/Hba/RGkenR3pZaGNp5Bu9ZqqP52Wyhomw=="], + + "metro-transform-plugins": ["metro-transform-plugins@0.83.3", "", { "dependencies": { "@babel/core": "^7.25.2", "@babel/generator": "^7.25.0", "@babel/template": "^7.25.0", "@babel/traverse": "^7.25.3", "flow-enums-runtime": "^0.0.6", "nullthrows": "^1.1.1" } }, "sha512-eRGoKJU6jmqOakBMH5kUB7VitEWiNrDzBHpYbkBXW7C5fUGeOd2CyqrosEzbMK5VMiZYyOcNFEphvxk3OXey2A=="], + + "metro-transform-worker": ["metro-transform-worker@0.83.3", "", { "dependencies": { "@babel/core": "^7.25.2", "@babel/generator": "^7.25.0", "@babel/parser": "^7.25.3", "@babel/types": "^7.25.2", "flow-enums-runtime": "^0.0.6", "metro": "0.83.3", "metro-babel-transformer": "0.83.3", "metro-cache": "0.83.3", "metro-cache-key": "0.83.3", "metro-minify-terser": "0.83.3", "metro-source-map": "0.83.3", "metro-transform-plugins": "0.83.3", "nullthrows": "^1.1.1" } }, "sha512-Ztekew9t/gOIMZX1tvJOgX7KlSLL5kWykl0Iwu2cL2vKMKVALRl1hysyhUw0vjpAvLFx+Kfq9VLjnHIkW32fPA=="], + "micromark": ["micromark@4.0.2", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA=="], "micromark-core-commonmark": ["micromark-core-commonmark@2.0.3", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-destination": "^2.0.0", "micromark-factory-label": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-title": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg=="], @@ -3470,6 +3920,8 @@ "neotraverse": ["neotraverse@0.6.18", "", {}, "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA=="], + "nested-error-stacks": ["nested-error-stacks@2.0.1", "", {}, "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A=="], + "nf3": ["nf3@0.1.12", "", {}, "sha512-qbMXT7RTGh74MYWPeqTIED8nDW70NXOULVHpdWcdZ7IVHVnAsMV9fNugSNnvooipDc1FMOzpis7T9nXJEbJhvQ=="], "nitro": ["nitro@3.0.1-alpha.1", "", { "dependencies": { "consola": "^3.4.2", "crossws": "^0.4.1", "db0": "^0.3.4", "h3": "2.0.1-rc.5", "jiti": "^2.6.1", "nf3": "^0.1.10", "ofetch": "^2.0.0-alpha.3", "ohash": "^2.0.11", "oxc-minify": "^0.96.0", "oxc-transform": "^0.96.0", "srvx": "^0.9.5", "undici": "^7.16.0", "unenv": "^2.0.0-rc.24", "unstorage": "^2.0.0-alpha.4" }, "peerDependencies": { "rolldown": "*", "rollup": "^4", "vite": "^7", "xml2js": "^0.6.2" }, "optionalPeers": ["rolldown", "rollup", "vite", "xml2js"], "bin": { "nitro": "dist/cli/index.mjs" } }, "sha512-U4AxIsXxdkxzkFrK0XAw0e5Qbojk8jQ50MjjRBtBakC4HurTtQoiZvF+lSe382jhuQZCfAyywGWOFa9QzXLFaw=="], @@ -3486,10 +3938,14 @@ "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], + "node-forge": ["node-forge@1.3.3", "", {}, "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg=="], + "node-gyp-build": ["node-gyp-build@4.8.4", "", { "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ=="], "node-html-parser": ["node-html-parser@7.0.2", "", { "dependencies": { "css-select": "^5.1.0", "he": "1.2.0" } }, "sha512-DxodLVh7a6JMkYzWyc8nBX9MaF4M0lLFYkJHlWOiu7+9/I6mwNK9u5TbAMC7qfqDJEPX9OIoWA2A9t4C2l1mUQ=="], + "node-int64": ["node-int64@0.4.0", "", {}, "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw=="], + "node-mock-http": ["node-mock-http@1.0.4", "", {}, "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ=="], "node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], @@ -3498,12 +3954,18 @@ "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + "npm-package-arg": ["npm-package-arg@11.0.3", "", { "dependencies": { "hosted-git-info": "^7.0.0", "proc-log": "^4.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" } }, "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw=="], + "npm-run-path": ["npm-run-path@5.3.0", "", { "dependencies": { "path-key": "^4.0.0" } }, "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ=="], "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], + "nullthrows": ["nullthrows@1.1.1", "", {}, "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw=="], + "nypm": ["nypm@0.6.5", "", { "dependencies": { "citty": "^0.2.0", "pathe": "^2.0.3", "tinyexec": "^1.0.2" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ=="], + "ob1": ["ob1@0.83.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-9JiflaRKCkxKzH8uuZlax72cHzZ8iFLsNIORFOAKDgZUOfvfwYWOVS0ezGLzPp/yEhVktD+PTTImC0AAehSOBw=="], + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], "object-hash": ["object-hash@2.2.0", "", {}, "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="], @@ -3528,6 +3990,8 @@ "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], + "on-headers": ["on-headers@1.1.0", "", {}, "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A=="], + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], "onetime": ["onetime@6.0.0", "", { "dependencies": { "mimic-fn": "^4.0.0" } }, "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ=="], @@ -3550,6 +4014,8 @@ "opentui-spinner": ["opentui-spinner@0.0.6", "", { "dependencies": { "cli-spinners": "^3.3.0" }, "peerDependencies": { "@opentui/core": "^0.1.49", "@opentui/react": "^0.1.49", "@opentui/solid": "^0.1.49", "typescript": "^5" }, "optionalPeers": ["@opentui/react", "@opentui/solid"] }, "sha512-xupLOeVQEAXEvVJCvHkfX6fChDWmJIPHe5jyUrVb8+n4XVTX8mBNhitFfB9v2ZbkC1H2UwPab/ElePHoW37NcA=="], + "ora": ["ora@3.4.0", "", { "dependencies": { "chalk": "^2.4.2", "cli-cursor": "^2.1.0", "cli-spinners": "^2.0.0", "log-symbols": "^2.2.0", "strip-ansi": "^5.2.0", "wcwidth": "^1.0.1" } }, "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg=="], + "own-keys": ["own-keys@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="], "oxc-minify": ["oxc-minify@0.96.0", "", { "optionalDependencies": { "@oxc-minify/binding-android-arm64": "0.96.0", "@oxc-minify/binding-darwin-arm64": "0.96.0", "@oxc-minify/binding-darwin-x64": "0.96.0", "@oxc-minify/binding-freebsd-x64": "0.96.0", "@oxc-minify/binding-linux-arm-gnueabihf": "0.96.0", "@oxc-minify/binding-linux-arm-musleabihf": "0.96.0", "@oxc-minify/binding-linux-arm64-gnu": "0.96.0", "@oxc-minify/binding-linux-arm64-musl": "0.96.0", "@oxc-minify/binding-linux-riscv64-gnu": "0.96.0", "@oxc-minify/binding-linux-s390x-gnu": "0.96.0", "@oxc-minify/binding-linux-x64-gnu": "0.96.0", "@oxc-minify/binding-linux-x64-musl": "0.96.0", "@oxc-minify/binding-wasm32-wasi": "0.96.0", "@oxc-minify/binding-win32-arm64-msvc": "0.96.0", "@oxc-minify/binding-win32-x64-msvc": "0.96.0" } }, "sha512-dXeeGrfPJJ4rMdw+NrqiCRtbzVX2ogq//R0Xns08zql2HjV3Zi2SBJ65saqfDaJzd2bcHqvGWH+M44EQCHPAcA=="], @@ -3592,6 +4058,8 @@ "parse-latin": ["parse-latin@7.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "@types/unist": "^3.0.0", "nlcst-to-string": "^4.0.0", "unist-util-modify-children": "^4.0.0", "unist-util-visit-children": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ=="], + "parse-png": ["parse-png@2.1.0", "", { "dependencies": { "pngjs": "^3.3.0" } }, "sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ=="], + "parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], "parse5-htmlparser2-tree-adapter": ["parse5-htmlparser2-tree-adapter@7.1.0", "", { "dependencies": { "domhandler": "^5.0.3", "parse5": "^7.0.0" } }, "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g=="], @@ -3608,6 +4076,8 @@ "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], + "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], @@ -3658,6 +4128,8 @@ "playwright-core": ["playwright-core@1.57.0", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ=="], + "plist": ["plist@3.1.0", "", { "dependencies": { "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.5.1", "xmlbuilder": "^15.1.1" } }, "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ=="], + "pngjs": ["pngjs@7.0.0", "", {}, "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow=="], "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], @@ -3688,18 +4160,28 @@ "pretty-bytes": ["pretty-bytes@6.1.1", "", {}, "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ=="], + "pretty-format": ["pretty-format@29.7.0", "", { "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } }, "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ=="], + "prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], + "proc-log": ["proc-log@4.2.0", "", {}, "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA=="], + "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], "process-warning": ["process-warning@5.0.0", "", {}, "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA=="], + "progress": ["progress@2.0.3", "", {}, "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="], + + "promise": ["promise@8.3.0", "", { "dependencies": { "asap": "~2.0.6" } }, "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg=="], + "promise.allsettled": ["promise.allsettled@1.0.7", "", { "dependencies": { "array.prototype.map": "^1.0.5", "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "iterate-value": "^1.0.2" } }, "sha512-hezvKvQQmsFkOdrZfYxUxkyxl8mgFQeT259Ajj9PXdbg9VzBCWrItOev72JyWxkCD5VSSqAeHmlN3tWx4DlmsA=="], "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], + "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="], + "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], "proto-list": ["proto-list@1.2.4", "", {}, "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA=="], @@ -3708,14 +4190,20 @@ "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], - "punycode": ["punycode@1.3.2", "", {}, "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw=="], + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + + "qrcode-terminal": ["qrcode-terminal@0.11.0", "", { "bin": { "qrcode-terminal": "./bin/qrcode-terminal.js" } }, "sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ=="], "qs": ["qs@6.15.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ=="], "quansync": ["quansync@0.2.11", "", {}, "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA=="], + "query-string": ["query-string@7.1.3", "", { "dependencies": { "decode-uri-component": "^0.2.2", "filter-obj": "^1.1.0", "split-on-first": "^1.0.0", "strict-uri-encode": "^2.0.0" } }, "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg=="], + "querystring": ["querystring@0.2.0", "", {}, "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g=="], + "queue": ["queue@6.0.2", "", { "dependencies": { "inherits": "~2.0.3" } }, "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA=="], + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], "quick-format-unescaped": ["quick-format-unescaped@4.0.4", "", {}, "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="], @@ -3728,12 +4216,40 @@ "raw-body": ["raw-body@2.5.3", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.4.24", "unpipe": "~1.0.0" } }, "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA=="], + "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], + "rc9": ["rc9@2.1.2", "", { "dependencies": { "defu": "^6.1.4", "destr": "^2.0.3" } }, "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg=="], "react": ["react@18.2.0", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ=="], + "react-devtools-core": ["react-devtools-core@6.1.5", "", { "dependencies": { "shell-quote": "^1.6.1", "ws": "^7" } }, "sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA=="], + "react-dom": ["react-dom@18.2.0", "", { "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" }, "peerDependencies": { "react": "^18.2.0" } }, "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g=="], + "react-fast-compare": ["react-fast-compare@3.2.2", "", {}, "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="], + + "react-freeze": ["react-freeze@1.0.4", "", { "peerDependencies": { "react": ">=17.0.0" } }, "sha512-r4F0Sec0BLxWicc7HEyo2x3/2icUTrRmDjaaRyzzn+7aDyFZliszMDOgLVwSnQnYENOlL1o569Ze2HZefk8clA=="], + + "react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], + + "react-native": ["react-native@0.81.5", "", { "dependencies": { "@jest/create-cache-key-function": "^29.7.0", "@react-native/assets-registry": "0.81.5", "@react-native/codegen": "0.81.5", "@react-native/community-cli-plugin": "0.81.5", "@react-native/gradle-plugin": "0.81.5", "@react-native/js-polyfills": "0.81.5", "@react-native/normalize-colors": "0.81.5", "@react-native/virtualized-lists": "0.81.5", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", "babel-jest": "^29.7.0", "babel-plugin-syntax-hermes-parser": "0.29.1", "base64-js": "^1.5.1", "commander": "^12.0.0", "flow-enums-runtime": "^0.0.6", "glob": "^7.1.1", "invariant": "^2.2.4", "jest-environment-node": "^29.7.0", "memoize-one": "^5.0.0", "metro-runtime": "^0.83.1", "metro-source-map": "^0.83.1", "nullthrows": "^1.1.1", "pretty-format": "^29.7.0", "promise": "^8.3.0", "react-devtools-core": "^6.1.5", "react-refresh": "^0.14.0", "regenerator-runtime": "^0.13.2", "scheduler": "0.26.0", "semver": "^7.1.3", "stacktrace-parser": "^0.1.10", "whatwg-fetch": "^3.0.0", "ws": "^6.2.3", "yargs": "^17.6.2" }, "peerDependencies": { "@types/react": "^19.1.0", "react": "^19.1.0" }, "optionalPeers": ["@types/react"], "bin": { "react-native": "cli.js" } }, "sha512-1w+/oSjEXZjMqsIvmkCRsOc8UBYv163bTWKTI8+1mxztvQPhCRYGTvZ/PL1w16xXHneIj/SLGfxWg2GWN2uexw=="], + + "react-native-fit-image": ["react-native-fit-image@1.5.5", "", { "dependencies": { "prop-types": "^15.5.10" } }, "sha512-Wl3Vq2DQzxgsWKuW4USfck9zS7YzhvLNPpkwUUCF90bL32e1a0zOVQ3WsJILJOwzmPdHfzZmWasiiAUNBkhNkg=="], + + "react-native-is-edge-to-edge": ["react-native-is-edge-to-edge@1.2.1", "", { "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-FLbPWl/MyYQWz+KwqOZsSyj2JmLKglHatd3xLZWskXOpRaio4LfEDEz8E/A6uD8QoTHW6Aobw1jbEwK7KMgR7Q=="], + + "react-native-markdown-display": ["react-native-markdown-display@7.0.2", "", { "dependencies": { "css-to-react-native": "^3.0.0", "markdown-it": "^10.0.0", "prop-types": "^15.7.2", "react-native-fit-image": "^1.5.5" }, "peerDependencies": { "react": ">=16.2.0", "react-native": ">=0.50.4" } }, "sha512-Mn4wotMvMfLAwbX/huMLt202W5DsdpMO/kblk+6eUs55S57VVNni1gzZCh5qpznYLjIQELNh50VIozEfY6fvaQ=="], + + "react-native-reanimated": ["react-native-reanimated@4.2.1", "", { "dependencies": { "react-native-is-edge-to-edge": "1.2.1", "semver": "7.7.3" }, "peerDependencies": { "react": "*", "react-native": "*", "react-native-worklets": ">=0.7.0" } }, "sha512-/NcHnZMyOvsD/wYXug/YqSKw90P9edN0kEPL5lP4PFf1aQ4F1V7MKe/E0tvfkXKIajy3Qocp5EiEnlcrK/+BZg=="], + + "react-native-safe-area-context": ["react-native-safe-area-context@5.6.2", "", { "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-4XGqMNj5qjUTYywJqpdWZ9IG8jgkS3h06sfVjfw5yZQZfWnRFXczi0GnYyFyCc2EBps/qFmoCH8fez//WumdVg=="], + + "react-native-screens": ["react-native-screens@4.16.0", "", { "dependencies": { "react-freeze": "^1.0.0", "react-native-is-edge-to-edge": "^1.2.1", "warn-once": "^0.1.0" }, "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-yIAyh7F/9uWkOzCi1/2FqvNvK6Wb9Y1+Kzn16SuGfN9YFJDTbwlzGRvePCNTOX0recpLQF3kc2FmvMUhyTCH1Q=="], + + "react-native-svg": ["react-native-svg@15.12.1", "", { "dependencies": { "css-select": "^5.1.0", "css-tree": "^1.1.3", "warn-once": "0.1.1" }, "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-vCuZJDf8a5aNC2dlMovEv4Z0jjEUET53lm/iILFnFewa15b4atjVxU6Wirm6O9y6dEsdjDZVD7Q3QM4T1wlI8g=="], + + "react-native-worklets": ["react-native-worklets@0.7.1", "", { "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", "convert-source-map": "2.0.0", "semver": "7.7.3" }, "peerDependencies": { "@babel/core": "*", "react": "*", "react-native": "*" } }, "sha512-KNsvR48ULg73QhTlmwPbdJLPsWcyBotrGPsrDRDswb5FYpQaJEThUKc2ncXE4UM5dn/ewLoQHjSjLaKUVPxPhA=="], + "react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], "react-remove-scroll": ["react-remove-scroll@2.5.5", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.3", "react-style-singleton": "^2.2.1", "tslib": "^2.1.0", "use-callback-ref": "^1.3.0", "use-sidecar": "^1.1.2" }, "peerDependencies": { "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw=="], @@ -3772,6 +4288,8 @@ "regenerate-unicode-properties": ["regenerate-unicode-properties@10.2.2", "", { "dependencies": { "regenerate": "^1.4.2" } }, "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g=="], + "regenerator-runtime": ["regenerator-runtime@0.13.11", "", {}, "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="], + "regex": ["regex@6.1.0", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg=="], "regex-recursion": ["regex-recursion@6.0.2", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg=="], @@ -3826,6 +4344,8 @@ "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], + "requireg": ["requireg@0.2.2", "", { "dependencies": { "nested-error-stacks": "~2.0.1", "rc": "~1.2.7", "resolve": "~1.7.1" } }, "sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg=="], + "reselect": ["reselect@4.1.8", "", {}, "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ=="], "resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], @@ -3834,11 +4354,19 @@ "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], + "resolve-global": ["resolve-global@1.0.0", "", { "dependencies": { "global-dirs": "^0.1.1" } }, "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw=="], + "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], - "restructure": ["restructure@3.0.2", "", {}, "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw=="], + "resolve-workspace-root": ["resolve-workspace-root@2.0.1", "", {}, "sha512-nR23LHAvaI6aHtMg6RWoaHpdR4D881Nydkzi2CixINyg9T00KgaJdJI6Vwty+Ps8WLxZHuxsS0BseWjxSA4C+w=="], - "ret": ["ret@0.5.0", "", {}, "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw=="], + "resolve.exports": ["resolve.exports@2.0.3", "", {}, "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A=="], + + "restore-cursor": ["restore-cursor@2.0.0", "", { "dependencies": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" } }, "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q=="], + + "restructure": ["restructure@3.0.2", "", {}, "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw=="], + + "ret": ["ret@0.5.0", "", {}, "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw=="], "retext": ["retext@9.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "retext-latin": "^4.0.0", "retext-stringify": "^4.0.0", "unified": "^11.0.0" } }, "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA=="], @@ -3884,7 +4412,7 @@ "sax": ["sax@1.2.1", "", {}, "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA=="], - "scheduler": ["scheduler@0.23.2", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ=="], + "scheduler": ["scheduler@0.26.0", "", {}, "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="], "section-matter": ["section-matter@1.0.0", "", { "dependencies": { "extend-shallow": "^2.0.1", "kind-of": "^6.0.0" } }, "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA=="], @@ -3898,6 +4426,8 @@ "seq-queue": ["seq-queue@0.0.5", "", {}, "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="], + "serialize-error": ["serialize-error@2.1.0", "", {}, "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw=="], + "serialize-javascript": ["serialize-javascript@6.0.2", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g=="], "seroval": ["seroval@1.3.2", "", {}, "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ=="], @@ -3906,6 +4436,8 @@ "serve-static": ["serve-static@1.16.3", "", { "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "~0.19.1" } }, "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA=="], + "server-only": ["server-only@0.0.1", "", {}, "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA=="], + "set-cookie-parser": ["set-cookie-parser@2.7.2", "", {}, "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw=="], "set-function-length": ["set-function-length@1.2.2", "", { "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" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], @@ -3916,12 +4448,18 @@ "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], + "sf-symbols-typescript": ["sf-symbols-typescript@2.2.0", "", {}, "sha512-TPbeg0b7ylrswdGCji8FRGFAKuqbpQlLbL8SOle3j1iHSs5Ob5mhvMAxWN2UItOjgALAB5Zp3fmMfj8mbWvXKw=="], + + "shallowequal": ["shallowequal@1.1.0", "", {}, "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="], + "sharp": ["sharp@0.33.5", "", { "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.3", "semver": "^7.6.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.33.5", "@img/sharp-darwin-x64": "0.33.5", "@img/sharp-libvips-darwin-arm64": "1.0.4", "@img/sharp-libvips-darwin-x64": "1.0.4", "@img/sharp-libvips-linux-arm": "1.0.5", "@img/sharp-libvips-linux-arm64": "1.0.4", "@img/sharp-libvips-linux-s390x": "1.0.4", "@img/sharp-libvips-linux-x64": "1.0.4", "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", "@img/sharp-libvips-linuxmusl-x64": "1.0.4", "@img/sharp-linux-arm": "0.33.5", "@img/sharp-linux-arm64": "0.33.5", "@img/sharp-linux-s390x": "0.33.5", "@img/sharp-linux-x64": "0.33.5", "@img/sharp-linuxmusl-arm64": "0.33.5", "@img/sharp-linuxmusl-x64": "0.33.5", "@img/sharp-wasm32": "0.33.5", "@img/sharp-win32-ia32": "0.33.5", "@img/sharp-win32-x64": "0.33.5" } }, "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw=="], "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + "shell-quote": ["shell-quote@1.8.3", "", {}, "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw=="], + "shiki": ["shiki@3.20.0", "", { "dependencies": { "@shikijs/core": "3.20.0", "@shikijs/engine-javascript": "3.20.0", "@shikijs/engine-oniguruma": "3.20.0", "@shikijs/langs": "3.20.0", "@shikijs/themes": "3.20.0", "@shikijs/types": "3.20.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-kgCOlsnyWb+p0WU+01RjkCH+eBVsjL1jOwUYWv0YDWkM2/A46+LDKVs5yZCUXjJG6bj4ndFoAg5iLIIue6dulg=="], "shikiji": ["shikiji@0.6.13", "", { "dependencies": { "hast-util-to-html": "^9.0.0" } }, "sha512-4T7X39csvhT0p7GDnq9vysWddf2b6BeioiN3Ymhnt3xcy9tXmDcnsEFVxX18Z4YcQgEE/w48dLJ4pPPUcG9KkA=="], @@ -3938,6 +4476,8 @@ "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + "simple-plist": ["simple-plist@1.3.1", "", { "dependencies": { "bplist-creator": "0.1.0", "bplist-parser": "0.3.1", "plist": "^3.0.5" } }, "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw=="], + "simple-swizzle": ["simple-swizzle@0.2.4", "", { "dependencies": { "is-arrayish": "^0.3.1" } }, "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw=="], "simple-xml-to-json": ["simple-xml-to-json@1.2.3", "", {}, "sha512-kWJDCr9EWtZ+/EYYM5MareWj2cRnZGF93YDNpH4jQiHB+hBIZnfPFSQiVMzZOdk+zXWqTZ/9fTeQNu2DqeiudA=="], @@ -3948,6 +4488,8 @@ "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], + "slugify": ["slugify@1.6.6", "", {}, "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw=="], + "smob": ["smob@1.6.1", "", {}, "sha512-KAkBqZl3c2GvNgNhcoyJae1aKldDW0LO279wF9bk1PnluRTETKBq0WyzRXxEhoQLk56yHaOY4JCBEKDuJIET5g=="], "smol-toml": ["smol-toml@1.6.0", "", {}, "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw=="], @@ -3982,6 +4524,8 @@ "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], + "split-on-first": ["split-on-first@1.1.0", "", {}, "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw=="], + "split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], "sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="], @@ -4008,10 +4552,14 @@ "sst-win32-x86": ["sst-win32-x86@3.18.10", "", { "os": "win32", "cpu": "none" }, "sha512-pq8SmV0pIjBFMY6DraUZ4akyTxHnfjIKCRbBLdMxFUZK8TzA1NK2YdjRt1AwrgXRYGRyctrz/mt4WyO0SMOVQQ=="], + "stack-utils": ["stack-utils@2.0.6", "", { "dependencies": { "escape-string-regexp": "^2.0.0" } }, "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ=="], + "stackback": ["stackback@0.0.2", "", {}, "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="], "stackframe": ["stackframe@1.3.4", "", {}, "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw=="], + "stacktrace-parser": ["stacktrace-parser@0.1.11", "", { "dependencies": { "type-fest": "^0.7.1" } }, "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg=="], + "stage-js": ["stage-js@1.0.1", "", {}, "sha512-cz14aPp/wY0s3bkb/B93BPP5ZAEhgBbRmAT3CCDqert8eCAqIpQ0RB2zpK8Ksxf+Pisl5oTzvPHtL4CVzzeHcw=="], "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], @@ -4022,10 +4570,14 @@ "stoppable": ["stoppable@1.1.0", "", {}, "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw=="], + "stream-buffers": ["stream-buffers@2.2.0", "", {}, "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg=="], + "stream-replace-string": ["stream-replace-string@2.0.0", "", {}, "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w=="], "streamx": ["streamx@2.23.0", "", { "dependencies": { "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" } }, "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg=="], + "strict-uri-encode": ["strict-uri-encode@2.0.0", "", {}, "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ=="], + "string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], @@ -4054,12 +4606,16 @@ "strip-final-newline": ["strip-final-newline@3.0.0", "", {}, "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw=="], + "strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], + "stripe": ["stripe@18.0.0", "", { "dependencies": { "@types/node": ">=8.1.0", "qs": "^6.11.0" } }, "sha512-3Fs33IzKUby//9kCkCa1uRpinAoTvj6rJgQ2jrBEysoxEvfsclvXdna1amyEYbA2EKkjynuB4+L/kleCCaWTpA=="], "strnum": ["strnum@1.1.2", "", {}, "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA=="], "strtok3": ["strtok3@6.3.0", "", { "dependencies": { "@tokenizer/token": "^0.3.0", "peek-readable": "^4.1.0" } }, "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw=="], + "structured-headers": ["structured-headers@0.4.1", "", {}, "sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg=="], + "style-to-js": ["style-to-js@1.1.21", "", { "dependencies": { "style-to-object": "1.0.14" } }, "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ=="], "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], @@ -4070,6 +4626,8 @@ "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + "supports-hyperlinks": ["supports-hyperlinks@2.3.0", "", { "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" } }, "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA=="], + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], "system-architecture": ["system-architecture@0.1.0", "", {}, "sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA=="], @@ -4090,10 +4648,14 @@ "tempy": ["tempy@0.6.0", "", { "dependencies": { "is-stream": "^2.0.0", "temp-dir": "^2.0.0", "type-fest": "^0.16.0", "unique-string": "^2.0.0" } }, "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw=="], + "terminal-link": ["terminal-link@2.1.1", "", { "dependencies": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" } }, "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ=="], + "terracotta": ["terracotta@1.1.0", "", { "dependencies": { "solid-use": "^0.9.1" }, "peerDependencies": { "solid-js": "^1.8" } }, "sha512-kfQciWUBUBgYkXu7gh3CK3FAJng/iqZslAaY08C+k1Hdx17aVEpcFFb/WPaysxAfcupNH3y53s/pc53xxZauww=="], "terser": ["terser@5.46.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg=="], + "test-exclude": ["test-exclude@6.0.0", "", { "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" } }, "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w=="], + "text-decoder": ["text-decoder@1.2.7", "", { "dependencies": { "b4a": "^1.6.4" } }, "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ=="], "thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="], @@ -4104,6 +4666,8 @@ "three": ["three@0.177.0", "", {}, "sha512-EiXv5/qWAaGI+Vz2A+JfavwYCMdGjxVsrn3oBwllUoqYeaBO75J63ZfyaQKoiLrqNHoTlUc6PFgMXnS0kI45zg=="], + "throat": ["throat@5.0.0", "", {}, "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA=="], + "thunky": ["thunky@1.1.0", "", {}, "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA=="], "tiny-inflate": ["tiny-inflate@1.0.3", "", {}, "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="], @@ -4122,6 +4686,8 @@ "titleize": ["titleize@4.0.0", "", {}, "sha512-ZgUJ1K83rhdu7uh7EHAC2BgY5DzoX8V5rTvoWI4vFysggi6YjLe5gUXABPWAU7VkvGP7P/0YiWq+dcPeYDsf1g=="], + "tmpl": ["tmpl@1.0.5", "", {}, "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw=="], + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], "toad-cache": ["toad-cache@3.7.0", "", {}, "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw=="], @@ -4174,6 +4740,8 @@ "tw-to-css": ["tw-to-css@0.0.12", "", { "dependencies": { "postcss": "8.4.31", "postcss-css-variables": "0.18.0", "tailwindcss": "3.3.2" } }, "sha512-rQAsQvOtV1lBkyCw+iypMygNHrShYAItES5r8fMsrhhaj5qrV2LkZyXc8ccEH+u5bFjHjQ9iuxe90I7Kykf6pw=="], + "type-detect": ["type-detect@4.0.8", "", {}, "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="], + "type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], "type-is": ["type-is@1.6.18", "", { "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" } }, "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g=="], @@ -4192,6 +4760,8 @@ "typescript-auto-import-cache": ["typescript-auto-import-cache@0.3.6", "", { "dependencies": { "semver": "^7.3.8" } }, "sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ=="], + "uc.micro": ["uc.micro@1.0.6", "", {}, "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="], + "ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], "ulid": ["ulid@3.0.1", "", { "bin": { "ulid": "dist/cli.js" } }, "sha512-dPJyqPzx8preQhqq24bBG1YNkvigm87K8kVEHCD+ruZg24t6IFEFv00xMWfxcC4djmFtiTLdFuADn4+DOz6R7Q=="], @@ -4252,6 +4822,8 @@ "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], + "uniwind": ["uniwind@1.3.2", "", { "dependencies": { "@tailwindcss/node": "4.1.17", "@tailwindcss/oxide": "4.1.17", "culori": "4.0.2", "lightningcss": "1.30.2" }, "peerDependencies": { "react": ">=19.0.0", "react-native": ">=0.81.0", "tailwindcss": ">=4" } }, "sha512-DKOa8E5DkTknAshp/mvQMDeIzERq7ntq59ztyEthuXT845zdp7GijpPu4hQwY9BVMKHT3IkmNM09J1kg1Tirvw=="], + "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], "unstorage": ["unstorage@2.0.0-alpha.5", "", { "peerDependencies": { "@azure/app-configuration": "^1.9.0", "@azure/cosmos": "^4.7.0", "@azure/data-tables": "^13.3.1", "@azure/identity": "^4.13.0", "@azure/keyvault-secrets": "^4.10.0", "@azure/storage-blob": "^12.29.1", "@capacitor/preferences": "^6.0.3 || ^7.0.0", "@deno/kv": ">=0.12.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.35.6", "@vercel/blob": ">=0.27.3", "@vercel/functions": "^2.2.12 || ^3.0.0", "@vercel/kv": "^1.0.1", "aws4fetch": "^1.0.20", "chokidar": "^4 || ^5", "db0": ">=0.3.4", "idb-keyval": "^6.2.2", "ioredis": "^5.8.2", "lru-cache": "^11.2.2", "mongodb": "^6 || ^7", "ofetch": "*", "uploadthing": "^7.7.4" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/functions", "@vercel/kv", "aws4fetch", "chokidar", "db0", "idb-keyval", "ioredis", "lru-cache", "mongodb", "ofetch", "uploadthing"] }, "sha512-Sj8btci21Twnd6M+N+MHhjg3fVn6lAPElPmvFTe0Y/wR0WImErUdA1PzlAaUavHylJ7uDiFwlZDQKm0elG4b7g=="], @@ -4266,8 +4838,12 @@ "use-callback-ref": ["use-callback-ref@1.3.3", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg=="], + "use-latest-callback": ["use-latest-callback@0.2.6", "", { "peerDependencies": { "react": ">=16.8" } }, "sha512-FvRG9i1HSo0wagmX63Vrm8SnlUU3LMM3WyZkQ76RnslpBrX694AdG4A0zQBx2B3ZifFA0yv/BaEHGBnEax5rZg=="], + "use-sidecar": ["use-sidecar@1.1.3", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ=="], + "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], + "utif2": ["utif2@4.1.0", "", { "dependencies": { "pako": "^1.0.11" } }, "sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w=="], "util": ["util@0.12.5", "", { "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" } }, "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA=="], @@ -4278,8 +4854,12 @@ "uuid": ["uuid@8.0.0", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw=="], + "validate-npm-package-name": ["validate-npm-package-name@5.0.1", "", {}, "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ=="], + "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], + "vaul": ["vaul@1.1.2", "", { "dependencies": { "@radix-ui/react-dialog": "^1.1.1" }, "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA=="], + "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], "vfile-location": ["vfile-location@5.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg=="], @@ -4302,6 +4882,8 @@ "vitest": ["vitest@4.0.18", "", { "dependencies": { "@vitest/expect": "4.0.18", "@vitest/mocker": "4.0.18", "@vitest/pretty-format": "4.0.18", "@vitest/runner": "4.0.18", "@vitest/snapshot": "4.0.18", "@vitest/spy": "4.0.18", "@vitest/utils": "4.0.18", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^3.10.0", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", "vite": "^6.0.0 || ^7.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.0.18", "@vitest/browser-preview": "4.0.18", "@vitest/browser-webdriverio": "4.0.18", "@vitest/ui": "4.0.18", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ=="], + "vlq": ["vlq@1.0.1", "", {}, "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w=="], + "volar-service-css": ["volar-service-css@0.0.68", "", { "dependencies": { "vscode-css-languageservice": "^6.3.0", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0" }, "optionalPeers": ["@volar/language-service"] }, "sha512-lJSMh6f3QzZ1tdLOZOzovLX0xzAadPhx8EKwraDLPxBndLCYfoTvnNuiFFV8FARrpAlW5C0WkH+TstPaCxr00Q=="], "volar-service-emmet": ["volar-service-emmet@0.0.68", "", { "dependencies": { "@emmetio/css-parser": "^0.4.1", "@emmetio/html-matcher": "^1.3.0", "@vscode/emmet-helper": "^2.9.3", "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0" }, "optionalPeers": ["@volar/language-service"] }, "sha512-nHvixrRQ83EzkQ4G/jFxu9Y4eSsXS/X2cltEPDM+K9qZmIv+Ey1w0tg1+6caSe8TU5Hgw4oSTwNMf/6cQb3LzQ=="], @@ -4336,18 +4918,28 @@ "vscode-uri": ["vscode-uri@3.1.0", "", {}, "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ=="], + "walker": ["walker@1.0.8", "", { "dependencies": { "makeerror": "1.0.12" } }, "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ=="], + + "warn-once": ["warn-once@0.1.1", "", {}, "sha512-VkQZJbO8zVImzYFteBXvBOZEl1qL175WH8VmZcxF2fZAoudNhNDvHi+doCaAEdU2l2vtcIwa2zn0QK5+I1HQ3Q=="], + + "wcwidth": ["wcwidth@1.0.1", "", { "dependencies": { "defaults": "^1.0.3" } }, "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg=="], + "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], "web-streams-polyfill": ["web-streams-polyfill@4.0.0-beta.3", "", {}, "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug=="], "web-tree-sitter": ["web-tree-sitter@0.25.10", "", { "peerDependencies": { "@types/emscripten": "^1.40.0" }, "optionalPeers": ["@types/emscripten"] }, "sha512-Y09sF44/13XvgVKgO2cNDw5rGk6s26MgoZPXLESvMXeefBf7i6/73eFurre0IsTW6E14Y0ArIzhUMmjoc7xyzA=="], - "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + "webidl-conversions": ["webidl-conversions@5.0.0", "", {}, "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA=="], + + "whatwg-fetch": ["whatwg-fetch@3.6.20", "", {}, "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg=="], "whatwg-mimetype": ["whatwg-mimetype@3.0.0", "", {}, "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q=="], "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], + "whatwg-url-without-unicode": ["whatwg-url-without-unicode@8.0.0-3", "", { "dependencies": { "buffer": "^5.4.3", "punycode": "^2.1.1", "webidl-conversions": "^5.0.0" } }, "sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig=="], + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="], @@ -4364,6 +4956,8 @@ "widest-line": ["widest-line@5.0.0", "", { "dependencies": { "string-width": "^7.0.0" } }, "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA=="], + "wonka": ["wonka@6.3.5", "", {}, "sha512-SSil+ecw6B4/Dm7Pf2sAshKQ5hWFvfyGlfPbEd6A14dOH6VDjrmbY86u6nZvy9omGwwIPFR8V41+of1EezgoUw=="], + "workbox-background-sync": ["workbox-background-sync@7.4.0", "", { "dependencies": { "idb": "^7.0.1", "workbox-core": "7.4.0" } }, "sha512-8CB9OxKAgKZKyNMwfGZ1XESx89GryWTfI+V5yEj8sHjFH8MFelUwYXEyldEK6M6oKMmn807GoJFUEA1sC4XS9w=="], "workbox-broadcast-update": ["workbox-broadcast-update@7.4.0", "", { "dependencies": { "workbox-core": "7.4.0" } }, "sha512-+eZQwoktlvo62cI0b+QBr40v5XjighxPq3Fzo9AWMiAosmpG5gxRHgTbGGhaJv/q/MFVxwFNGh/UwHZ/8K88lA=="], @@ -4400,16 +4994,20 @@ "wrangler": ["wrangler@4.50.0", "", { "dependencies": { "@cloudflare/kv-asset-handler": "0.4.0", "@cloudflare/unenv-preset": "2.7.11", "blake3-wasm": "2.1.5", "esbuild": "0.25.4", "miniflare": "4.20251118.1", "path-to-regexp": "6.3.0", "unenv": "2.0.0-rc.24", "workerd": "1.20251118.0" }, "optionalDependencies": { "fsevents": "~2.3.2" }, "peerDependencies": { "@cloudflare/workers-types": "^4.20251118.0" }, "optionalPeers": ["@cloudflare/workers-types"], "bin": { "wrangler": "bin/wrangler.js", "wrangler2": "bin/wrangler.js" } }, "sha512-+nuZuHZxDdKmAyXOSrHlciGshCoAPiy5dM+t6mEohWm7HpXvTHmWQGUf/na9jjWlWJHCJYOWzkA1P5HBJqrIEA=="], - "wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], + "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + "write-file-atomic": ["write-file-atomic@4.0.2", "", { "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" } }, "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg=="], + "ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], "wsl-utils": ["wsl-utils@0.3.1", "", { "dependencies": { "is-wsl": "^3.1.0", "powershell-utils": "^0.1.0" } }, "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg=="], + "xcode": ["xcode@3.0.1", "", { "dependencies": { "simple-plist": "^1.1.0", "uuid": "^7.0.3" } }, "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA=="], + "xdg-basedir": ["xdg-basedir@5.1.0", "", {}, "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ=="], "xml-parse-from-string": ["xml-parse-from-string@1.0.1", "", {}, "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g=="], @@ -4702,6 +5300,22 @@ "@babel/helper-create-regexp-features-plugin/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "@babel/highlight/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="], + + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/@babel/plugin-transform-optional-chaining": ["@babel/plugin-transform-optional-chaining@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w=="], + + "@babel/plugin-transform-runtime/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@babel/preset-env/@babel/plugin-transform-class-properties": ["@babel/plugin-transform-class-properties@7.28.6", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw=="], + + "@babel/preset-env/@babel/plugin-transform-classes": ["@babel/plugin-transform-classes@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-globals": "^7.28.0", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-replace-supers": "^7.28.6", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q=="], + + "@babel/preset-env/@babel/plugin-transform-nullish-coalescing-operator": ["@babel/plugin-transform-nullish-coalescing-operator@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg=="], + + "@babel/preset-env/@babel/plugin-transform-optional-chaining": ["@babel/plugin-transform-optional-chaining@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w=="], + + "@babel/preset-env/babel-plugin-polyfill-corejs3": ["babel-plugin-polyfill-corejs3@0.14.0", "", { "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.6", "core-js-compat": "^3.48.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ=="], + "@babel/preset-env/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@bufbuild/protoplugin/typescript": ["typescript@5.4.5", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ=="], @@ -4710,18 +5324,84 @@ "@dot/log/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "@expo/cli/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@expo/cli/ci-info": ["ci-info@3.9.0", "", {}, "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ=="], + + "@expo/cli/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "@expo/cli/picomatch": ["picomatch@3.0.1", "", {}, "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag=="], + + "@expo/cli/pretty-bytes": ["pretty-bytes@5.6.0", "", {}, "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg=="], + + "@expo/cli/undici": ["undici@6.23.0", "", {}, "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g=="], + + "@expo/cli/ws": ["ws@8.19.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="], + + "@expo/config/@babel/code-frame": ["@babel/code-frame@7.10.4", "", { "dependencies": { "@babel/highlight": "^7.10.4" } }, "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg=="], + + "@expo/config-plugins/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@expo/config-plugins/xml2js": ["xml2js@0.6.0", "", { "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" } }, "sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w=="], + + "@expo/devcert/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + + "@expo/devtools/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@expo/env/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@expo/fingerprint/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@expo/fingerprint/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + + "@expo/fingerprint/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "@expo/fingerprint/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + + "@expo/image-utils/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@expo/json-file/@babel/code-frame": ["@babel/code-frame@7.10.4", "", { "dependencies": { "@babel/highlight": "^7.10.4" } }, "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg=="], + + "@expo/metro/metro-runtime": ["metro-runtime@0.83.3", "", { "dependencies": { "@babel/runtime": "^7.25.0", "flow-enums-runtime": "^0.0.6" } }, "sha512-JHCJb9ebr9rfJ+LcssFYA2x1qPYuSD/bbePupIGhpMrsla7RCwC/VL3yJ9cSU+nUhU4c9Ixxy8tBta+JbDeZWw=="], + + "@expo/metro/metro-source-map": ["metro-source-map@0.83.3", "", { "dependencies": { "@babel/traverse": "^7.25.3", "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", "@babel/types": "^7.25.2", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "metro-symbolicate": "0.83.3", "nullthrows": "^1.1.1", "ob1": "0.83.3", "source-map": "^0.5.6", "vlq": "^1.0.0" } }, "sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg=="], + + "@expo/metro-config/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@expo/metro-config/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "@expo/metro-config/postcss": ["postcss@8.4.49", "", { "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA=="], + + "@expo/package-manager/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@expo/plist/xmlbuilder": ["xmlbuilder@15.1.1", "", {}, "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg=="], + + "@expo/prebuild-config/xml2js": ["xml2js@0.6.0", "", { "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" } }, "sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w=="], + + "@expo/xcpretty/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "@fastify/proxy-addr/ipaddr.js": ["ipaddr.js@2.3.0", "", {}, "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg=="], "@gitlab/gitlab-ai-provider/openai": ["openai@6.22.0", "", { "peerDependencies": { "ws": "^8.18.0", "zod": "^3.25 || ^4.0" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-7Yvy17F33Bi9RutWbsaYt5hJEEJ/krRPOrwan+f9aCPuMat1WVsb2VNSII5W1EksKT6fF69TG/xj4XzodK3JZw=="], "@gitlab/gitlab-ai-provider/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + "@hey-api/openapi-ts/commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], + "@hey-api/openapi-ts/open": ["open@11.0.0", "", { "dependencies": { "default-browser": "^5.4.0", "define-lazy-prop": "^3.0.0", "is-in-ssh": "^1.0.0", "is-inside-container": "^1.0.0", "powershell-utils": "^0.1.0", "wsl-utils": "^0.3.0" } }, "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw=="], "@hey-api/openapi-ts/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], "@hono/zod-validator/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + "@istanbuljs/load-nyc-config/camelcase": ["camelcase@5.3.1", "", {}, "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="], + + "@istanbuljs/load-nyc-config/js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="], + + "@jest/transform/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@jest/types/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "@jimp/plugin-blit/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], "@jimp/plugin-circle/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], @@ -4838,6 +5518,12 @@ "@opencode-ai/desktop/typescript": ["typescript@5.6.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw=="], + "@opencode-ai/mobile/react": ["react@19.1.0", "", {}, "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg=="], + + "@opencode-ai/mobile/tailwindcss": ["tailwindcss@4.2.0", "", {}, "sha512-yYzTZ4++b7fNYxFfpnberEEKu43w44aqDMNM9MHMmcKuCH7lL8jJ4yJ7LGHv7rSwiqM0nkiobF9I6cLlpS2P7Q=="], + + "@opencode-ai/mobile/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@opencode-ai/web/@shikijs/transformers": ["@shikijs/transformers@3.20.0", "", { "dependencies": { "@shikijs/core": "3.20.0", "@shikijs/types": "3.20.0" } }, "sha512-PrHHMRr3Q5W1qB/42kJW6laqFyWdhrPF2hNR9qjOm1xcSiAO3hAHo7HaVyHE6pMyevmy3i51O8kuGGXC78uK3g=="], "@opentui/solid/@babel/core": ["@babel/core@7.28.0", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.0", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.27.3", "@babel/helpers": "^7.27.6", "@babel/parser": "^7.28.0", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.0", "@babel/types": "^7.28.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ=="], @@ -4854,6 +5540,76 @@ "@protobuf-ts/plugin/typescript": ["typescript@3.9.10", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q=="], + "@radix-ui/react-dialog/@radix-ui/primitive": ["@radix-ui/primitive@1.1.3", "", {}, "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="], + + "@radix-ui/react-dialog/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="], + + "@radix-ui/react-dialog/@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], + + "@radix-ui/react-dialog/@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg=="], + + "@radix-ui/react-dialog/@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw=="], + + "@radix-ui/react-dialog/@radix-ui/react-focus-scope": ["@radix-ui/react-focus-scope@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw=="], + + "@radix-ui/react-dialog/@radix-ui/react-id": ["@radix-ui/react-id@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg=="], + + "@radix-ui/react-dialog/@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.9", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ=="], + + "@radix-ui/react-dialog/@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.5", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ=="], + + "@radix-ui/react-dialog/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], + + "@radix-ui/react-dialog/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], + + "@radix-ui/react-dialog/@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.2", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg=="], + + "@radix-ui/react-dialog/react-remove-scroll": ["react-remove-scroll@2.7.2", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q=="], + + "@radix-ui/react-tabs/@radix-ui/primitive": ["@radix-ui/primitive@1.1.3", "", {}, "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="], + + "@radix-ui/react-tabs/@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], + + "@radix-ui/react-tabs/@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw=="], + + "@radix-ui/react-tabs/@radix-ui/react-id": ["@radix-ui/react-id@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg=="], + + "@radix-ui/react-tabs/@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.5", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ=="], + + "@radix-ui/react-tabs/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], + + "@radix-ui/react-tabs/@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA=="], + + "@radix-ui/react-tabs/@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.2", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg=="], + + "@radix-ui/react-use-effect-event/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], + + "@react-native/babel-preset/@babel/plugin-transform-class-properties": ["@babel/plugin-transform-class-properties@7.28.6", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw=="], + + "@react-native/babel-preset/@babel/plugin-transform-classes": ["@babel/plugin-transform-classes@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-globals": "^7.28.0", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-replace-supers": "^7.28.6", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q=="], + + "@react-native/babel-preset/@babel/plugin-transform-nullish-coalescing-operator": ["@babel/plugin-transform-nullish-coalescing-operator@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg=="], + + "@react-native/babel-preset/@babel/plugin-transform-optional-chaining": ["@babel/plugin-transform-optional-chaining@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w=="], + + "@react-native/babel-preset/react-refresh": ["react-refresh@0.14.2", "", {}, "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA=="], + + "@react-native/codegen/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + + "@react-native/codegen/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + + "@react-native/community-cli-plugin/metro": ["metro@0.83.4", "", { "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", "chalk": "^4.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.33.3", "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.83.4", "metro-cache": "0.83.4", "metro-cache-key": "0.83.4", "metro-config": "0.83.4", "metro-core": "0.83.4", "metro-file-map": "0.83.4", "metro-resolver": "0.83.4", "metro-runtime": "0.83.4", "metro-source-map": "0.83.4", "metro-symbolicate": "0.83.4", "metro-transform-plugins": "0.83.4", "metro-transform-worker": "0.83.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" } }, "sha512-eBkAtcob+YmvSLL+/rsFiK8dHNfDbQA2/pi0lnxg3E6LLtUpwDfdGJ9WBWXkj0PVeOhoWQyj9Rt7s/+6k/GXuA=="], + + "@react-native/community-cli-plugin/metro-config": ["metro-config@0.83.4", "", { "dependencies": { "connect": "^3.6.5", "flow-enums-runtime": "^0.0.6", "jest-validate": "^29.7.0", "metro": "0.83.4", "metro-cache": "0.83.4", "metro-core": "0.83.4", "metro-runtime": "0.83.4", "yaml": "^2.6.1" } }, "sha512-ydOgMNI9aT8l2LOTOugt1FvC7getPKG9uJo9Vclg9/RWJxbwkBF/FMBm6w5gH8NwJokSmQrbNkojXPn7nm0kGw=="], + + "@react-native/community-cli-plugin/metro-core": ["metro-core@0.83.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6", "lodash.throttle": "^4.1.1", "metro-resolver": "0.83.4" } }, "sha512-EE+j/imryd3og/6Ly9usku9vcTLQr2o4IDax/izsr6b0HRqZK9k6f5SZkGkOPqnsACLq6csPCx+2JsgF9DkVbw=="], + + "@react-native/dev-middleware/open": ["open@7.4.2", "", { "dependencies": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" } }, "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q=="], + + "@react-native/dev-middleware/ws": ["ws@6.2.3", "", { "dependencies": { "async-limiter": "~1.0.0" } }, "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA=="], + + "@react-navigation/core/react-is": ["react-is@19.2.4", "", {}, "sha512-W+EWGn2v0ApPKgKKCy/7s7WHXkboGcsrXE+2joLyVxkbyVQfO3MUEaUQDHoSmb8TFFrSKYa9mw64WZHNHSDzYA=="], + "@rollup/plugin-babel/@rollup/pluginutils": ["@rollup/pluginutils@3.1.0", "", { "dependencies": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", "picomatch": "^2.2.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg=="], "@rollup/plugin-babel/rollup": ["rollup@2.79.2", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ=="], @@ -4944,12 +5700,16 @@ "ansi-align/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "ansi-escapes/type-fest": ["type-fest@0.21.3", "", {}, "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="], + "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "archiver-utils/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], "archiver-utils/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], + "argparse/sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], + "astro/@astrojs/internal-helpers": ["@astrojs/internal-helpers@0.6.1", "", {}, "sha512-l5Pqf6uZu31aG+3Lv8nl/3s4DbUzdlxTWDof4pEpto6GUJNhhCbelVi9dEyurOVyqaelwmS9oSyOWOENSfgo9A=="], "astro/diff": ["diff@5.2.2", "", {}, "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A=="], @@ -4964,12 +5724,16 @@ "aws-sdk/xml2js": ["xml2js@0.6.2", "", { "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" } }, "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA=="], + "babel-jest/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "babel-plugin-jsx-dom-expressions/@babel/helper-module-imports": ["@babel/helper-module-imports@7.18.6", "", { "dependencies": { "@babel/types": "^7.18.6" } }, "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA=="], "babel-plugin-module-resolver/glob": ["glob@9.3.5", "", { "dependencies": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", "minipass": "^4.2.4", "path-scurry": "^1.6.1" } }, "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q=="], "babel-plugin-polyfill-corejs2/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "better-opn/open": ["open@8.4.2", "", { "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" } }, "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ=="], + "bl/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], "body-parser/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], @@ -4978,18 +5742,44 @@ "body-parser/qs": ["qs@6.14.2", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q=="], + "boxen/wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], + "buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], "bun-webgpu/@webgpu/types": ["@webgpu/types@0.1.69", "", {}, "sha512-RPmm6kgRbI8e98zSD3RVACvnuktIja5+yLgDAkTmxLr90BEwdTXRQWNLF3ETTTyH/8mKhznZuN5AveXYFEsMGQ=="], "c12/chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], + "c12/dotenv": ["dotenv@17.3.1", "", {}, "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA=="], + + "chrome-launcher/is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], + + "chromium-edge-launcher/is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], + + "chromium-edge-launcher/mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], + + "chromium-edge-launcher/rimraf": ["rimraf@3.0.2", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="], + "clean-css/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "cliui/wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], + "compress-commons/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], + "compression/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + + "compression/negotiator": ["negotiator@0.6.4", "", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="], + "condense-newlines/kind-of": ["kind-of@3.2.2", "", { "dependencies": { "is-buffer": "^1.1.5" } }, "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ=="], + "connect/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + + "connect/finalhandler": ["finalhandler@1.1.2", "", { "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", "parseurl": "~1.3.3", "statuses": "~1.5.0", "unpipe": "~1.0.0" } }, "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA=="], + + "css-tree/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "defaults/clone": ["clone@1.0.4", "", {}, "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg=="], + "dom-serializer/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], "dot-prop/type-fest": ["type-fest@3.13.1", "", {}, "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g=="], @@ -5012,6 +5802,18 @@ "execa/is-stream": ["is-stream@3.0.0", "", {}, "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA=="], + "expo/babel-preset-expo": ["babel-preset-expo@54.0.10", "", { "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/plugin-proposal-decorators": "^7.12.9", "@babel/plugin-proposal-export-default-from": "^7.24.7", "@babel/plugin-syntax-export-default-from": "^7.24.7", "@babel/plugin-transform-class-static-block": "^7.27.1", "@babel/plugin-transform-export-namespace-from": "^7.25.9", "@babel/plugin-transform-flow-strip-types": "^7.25.2", "@babel/plugin-transform-modules-commonjs": "^7.24.8", "@babel/plugin-transform-object-rest-spread": "^7.24.7", "@babel/plugin-transform-parameters": "^7.24.7", "@babel/plugin-transform-private-methods": "^7.24.7", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-runtime": "^7.24.7", "@babel/preset-react": "^7.22.15", "@babel/preset-typescript": "^7.23.0", "@react-native/babel-preset": "0.81.5", "babel-plugin-react-compiler": "^1.0.0", "babel-plugin-react-native-web": "~0.21.0", "babel-plugin-syntax-hermes-parser": "^0.29.1", "babel-plugin-transform-flow-enums": "^0.0.2", "debug": "^4.3.4", "resolve-from": "^5.0.0" }, "peerDependencies": { "@babel/runtime": "^7.20.0", "expo": "*", "react-refresh": ">=0.14.0 <1.0.0" }, "optionalPeers": ["@babel/runtime", "expo"] }, "sha512-wTt7POavLFypLcPW/uC5v8y+mtQKDJiyGLzYCjqr9tx0Qc3vCXcDKk1iCFIj/++Iy5CWhhTflEa7VvVPNWeCfw=="], + + "expo/react-refresh": ["react-refresh@0.14.2", "", {}, "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA=="], + + "expo-modules-autolinking/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "expo-modules-autolinking/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], + + "expo-router/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.0", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w=="], + + "expo-router/semver": ["semver@7.6.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A=="], + "express/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], "express/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], @@ -5038,26 +5840,84 @@ "happy-dom/ws": ["ws@8.19.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="], + "hosted-git-info/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + "html-minifier-terser/commander": ["commander@10.0.1", "", {}, "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug=="], "html-minifier-terser/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], "htmlparser2/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + "istanbul-lib-instrument/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "jest-message-util/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-util/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-util/ci-info": ["ci-info@3.9.0", "", {}, "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ=="], + + "jest-util/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "jest-validate/camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], + + "jest-validate/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "js-beautify/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], + "js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + "katex/commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], "lazystream/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], "light-my-request/process-warning": ["process-warning@4.0.1", "", {}, "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q=="], + "lighthouse-logger/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + "lightningcss/detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + "log-symbols/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="], + + "markdown-it/entities": ["entities@2.0.3", "", {}, "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ=="], + "md-to-react-email/marked": ["marked@7.0.4", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-t8eP0dXRJMtMvBojtkcsA7n48BkauktUKzfkPSCq85ZMTJ0v76Rke4DYz01omYpPTUh4p/f7HePgRo3ebG8+QQ=="], "mdast-util-find-and-replace/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], + "metro/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "metro/ci-info": ["ci-info@2.0.0", "", {}, "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="], + + "metro/hermes-parser": ["hermes-parser@0.32.0", "", { "dependencies": { "hermes-estree": "0.32.0" } }, "sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw=="], + + "metro/metro-runtime": ["metro-runtime@0.83.3", "", { "dependencies": { "@babel/runtime": "^7.25.0", "flow-enums-runtime": "^0.0.6" } }, "sha512-JHCJb9ebr9rfJ+LcssFYA2x1qPYuSD/bbePupIGhpMrsla7RCwC/VL3yJ9cSU+nUhU4c9Ixxy8tBta+JbDeZWw=="], + + "metro/metro-source-map": ["metro-source-map@0.83.3", "", { "dependencies": { "@babel/traverse": "^7.25.3", "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", "@babel/types": "^7.25.2", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "metro-symbolicate": "0.83.3", "nullthrows": "^1.1.1", "ob1": "0.83.3", "source-map": "^0.5.6", "vlq": "^1.0.0" } }, "sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg=="], + + "metro/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + + "metro/source-map": ["source-map@0.5.7", "", {}, "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ=="], + + "metro/ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="], + + "metro/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + + "metro-babel-transformer/hermes-parser": ["hermes-parser@0.32.0", "", { "dependencies": { "hermes-estree": "0.32.0" } }, "sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw=="], + + "metro-config/metro-runtime": ["metro-runtime@0.83.3", "", { "dependencies": { "@babel/runtime": "^7.25.0", "flow-enums-runtime": "^0.0.6" } }, "sha512-JHCJb9ebr9rfJ+LcssFYA2x1qPYuSD/bbePupIGhpMrsla7RCwC/VL3yJ9cSU+nUhU4c9Ixxy8tBta+JbDeZWw=="], + + "metro-source-map/metro-symbolicate": ["metro-symbolicate@0.83.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "metro-source-map": "0.83.4", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "vlq": "^1.0.0" }, "bin": { "metro-symbolicate": "src/index.js" } }, "sha512-clyWAXDgkDHPwvldl95pcLTrJIqUj9GbZayL8tfeUs69ilsIUBpVym2lRd/8l3/8PIHCInxL868NvD2Y7OqKXg=="], + + "metro-source-map/source-map": ["source-map@0.5.7", "", {}, "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ=="], + + "metro-symbolicate/metro-source-map": ["metro-source-map@0.83.3", "", { "dependencies": { "@babel/traverse": "^7.25.3", "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", "@babel/types": "^7.25.2", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "metro-symbolicate": "0.83.3", "nullthrows": "^1.1.1", "ob1": "0.83.3", "source-map": "^0.5.6", "vlq": "^1.0.0" } }, "sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg=="], + + "metro-symbolicate/source-map": ["source-map@0.5.7", "", {}, "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ=="], + + "metro-transform-worker/metro-source-map": ["metro-source-map@0.83.3", "", { "dependencies": { "@babel/traverse": "^7.25.3", "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", "@babel/types": "^7.25.2", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "metro-symbolicate": "0.83.3", "nullthrows": "^1.1.1", "ob1": "0.83.3", "source-map": "^0.5.6", "vlq": "^1.0.0" } }, "sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg=="], + "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "miniflare/acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="], @@ -5096,10 +5956,18 @@ "openid-client/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], + "ora/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="], + + "ora/cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], + + "ora/strip-ansi": ["strip-ansi@5.2.0", "", { "dependencies": { "ansi-regex": "^4.1.0" } }, "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA=="], + "p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], + "parse-png/pngjs": ["pngjs@3.4.0", "", {}, "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w=="], + "parse5/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], "pixelmatch/pngjs": ["pngjs@6.0.0", "", {}, "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg=="], @@ -5108,18 +5976,50 @@ "playwright/fsevents": ["fsevents@2.3.2", "", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="], + "plist/xmlbuilder": ["xmlbuilder@15.1.1", "", {}, "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg=="], + "postcss-css-variables/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "postcss-css-variables/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + "postcss-load-config/lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], + "pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + "prompts/kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], + "prop-types/react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], + "raw-body/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], + "react-devtools-core/ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="], + + "react-dom/scheduler": ["scheduler@0.23.2", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ=="], + + "react-native/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + + "react-native/react": ["react@19.1.0", "", {}, "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg=="], + + "react-native/react-refresh": ["react-refresh@0.14.2", "", {}, "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA=="], + + "react-native/ws": ["ws@6.2.3", "", { "dependencies": { "async-limiter": "~1.0.0" } }, "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA=="], + + "react-native/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + + "react-native-reanimated/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], + + "react-native-worklets/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], + "readable-stream/buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], "readdir-glob/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], + "requireg/resolve": ["resolve@1.7.1", "", { "dependencies": { "path-parse": "^1.0.5" } }, "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw=="], + + "restore-cursor/onetime": ["onetime@2.0.1", "", { "dependencies": { "mimic-fn": "^1.0.0" } }, "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ=="], + + "restore-cursor/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + "rimraf/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], "router/path-to-regexp": ["path-to-regexp@8.3.0", "", {}, "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA=="], @@ -5138,6 +6038,8 @@ "shiki/@shikijs/types": ["@shikijs/types@3.20.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw=="], + "simple-plist/bplist-parser": ["bplist-parser@0.3.1", "", { "dependencies": { "big-integer": "1.6.x" } }, "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA=="], + "sitemap/sax": ["sax@1.4.4", "", {}, "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw=="], "source-map/whatwg-url": ["whatwg-url@7.1.0", "", { "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", "webidl-conversions": "^4.0.2" } }, "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg=="], @@ -5148,11 +6050,15 @@ "sst/jose": ["jose@5.2.3", "", {}, "sha512-KUXdbctm1uHVL8BYhnyHkgp3zDX5KW8ZhAKVFEfUbU2P8Alpzjb+48hHvjOdQIyPshoblhzsuqOwEEAbtHVirA=="], + "stack-utils/escape-string-regexp": ["escape-string-regexp@2.0.0", "", {}, "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="], + + "stacktrace-parser/type-fest": ["type-fest@0.7.1", "", {}, "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg=="], + "string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], "string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], "sucrase/commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="], @@ -5166,6 +6072,10 @@ "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], + "test-exclude/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + + "test-exclude/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + "token-types/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], "tree-sitter-bash/node-addon-api": ["node-addon-api@8.5.0", "", {}, "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A=="], @@ -5178,8 +6088,22 @@ "type-is/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + "unified/is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], + + "unifont/css-tree": ["css-tree@3.1.0", "", { "dependencies": { "mdn-data": "2.12.2", "source-map-js": "^1.0.1" } }, "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w=="], + "unifont/ofetch": ["ofetch@1.5.1", "", { "dependencies": { "destr": "^2.0.5", "node-fetch-native": "^1.6.7", "ufo": "^1.6.1" } }, "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA=="], + "uniwind/@tailwindcss/node": ["@tailwindcss/node@4.1.17", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "enhanced-resolve": "^5.18.3", "jiti": "^2.6.1", "lightningcss": "1.30.2", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.1.17" } }, "sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg=="], + + "uniwind/@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.17", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.17", "@tailwindcss/oxide-darwin-arm64": "4.1.17", "@tailwindcss/oxide-darwin-x64": "4.1.17", "@tailwindcss/oxide-freebsd-x64": "4.1.17", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.17", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.17", "@tailwindcss/oxide-linux-arm64-musl": "4.1.17", "@tailwindcss/oxide-linux-x64-gnu": "4.1.17", "@tailwindcss/oxide-linux-x64-musl": "4.1.17", "@tailwindcss/oxide-wasm32-wasi": "4.1.17", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.17", "@tailwindcss/oxide-win32-x64-msvc": "4.1.17" } }, "sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA=="], + + "uniwind/lightningcss": ["lightningcss@1.30.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.30.2", "lightningcss-darwin-arm64": "1.30.2", "lightningcss-darwin-x64": "1.30.2", "lightningcss-freebsd-x64": "1.30.2", "lightningcss-linux-arm-gnueabihf": "1.30.2", "lightningcss-linux-arm64-gnu": "1.30.2", "lightningcss-linux-arm64-musl": "1.30.2", "lightningcss-linux-x64-gnu": "1.30.2", "lightningcss-linux-x64-musl": "1.30.2", "lightningcss-win32-arm64-msvc": "1.30.2", "lightningcss-win32-x64-msvc": "1.30.2" } }, "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ=="], + + "uniwind/react": ["react@19.1.0", "", {}, "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg=="], + + "url/punycode": ["punycode@1.3.2", "", {}, "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw=="], + "utif2/pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], "vite-plugin-icons-spritesheet/glob": ["glob@11.1.0", "", { "dependencies": { "foreground-child": "^3.3.1", "jackspeak": "^4.1.1", "minimatch": "^10.1.1", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw=="], @@ -5192,6 +6116,10 @@ "vscode-languageserver-protocol/vscode-jsonrpc": ["vscode-jsonrpc@8.2.0", "", {}, "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA=="], + "whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + + "whatwg-url-without-unicode/buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], + "which-builtin-type/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], "workbox-build/glob": ["glob@11.1.0", "", { "dependencies": { "foreground-child": "^3.3.1", "jackspeak": "^4.1.1", "minimatch": "^10.1.1", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw=="], @@ -5202,12 +6130,18 @@ "wrangler/esbuild": ["esbuild@0.25.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.4", "@esbuild/android-arm": "0.25.4", "@esbuild/android-arm64": "0.25.4", "@esbuild/android-x64": "0.25.4", "@esbuild/darwin-arm64": "0.25.4", "@esbuild/darwin-x64": "0.25.4", "@esbuild/freebsd-arm64": "0.25.4", "@esbuild/freebsd-x64": "0.25.4", "@esbuild/linux-arm": "0.25.4", "@esbuild/linux-arm64": "0.25.4", "@esbuild/linux-ia32": "0.25.4", "@esbuild/linux-loong64": "0.25.4", "@esbuild/linux-mips64el": "0.25.4", "@esbuild/linux-ppc64": "0.25.4", "@esbuild/linux-riscv64": "0.25.4", "@esbuild/linux-s390x": "0.25.4", "@esbuild/linux-x64": "0.25.4", "@esbuild/netbsd-arm64": "0.25.4", "@esbuild/netbsd-x64": "0.25.4", "@esbuild/openbsd-arm64": "0.25.4", "@esbuild/openbsd-x64": "0.25.4", "@esbuild/sunos-x64": "0.25.4", "@esbuild/win32-arm64": "0.25.4", "@esbuild/win32-ia32": "0.25.4", "@esbuild/win32-x64": "0.25.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q=="], - "wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + "wrap-ansi/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "wrap-ansi-cjs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "write-file-atomic/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + + "xcode/uuid": ["uuid@7.0.3", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg=="], + "xml2js/sax": ["sax@1.4.4", "", {}, "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw=="], "yaml-language-server/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], @@ -5320,6 +6254,28 @@ "@babel/helper-compilation-targets/lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + "@babel/highlight/chalk/ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], + + "@babel/highlight/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + + "@babel/highlight/chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], + + "@expo/cli/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + + "@expo/config-plugins/xml2js/sax": ["sax@1.4.4", "", {}, "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw=="], + + "@expo/fingerprint/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + + "@expo/fingerprint/p-limit/yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + + "@expo/metro-config/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + + "@expo/metro/metro-source-map/ob1": ["ob1@0.83.3", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA=="], + + "@expo/metro/metro-source-map/source-map": ["source-map@0.5.7", "", {}, "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ=="], + + "@expo/prebuild-config/xml2js/sax": ["sax@1.4.4", "", {}, "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw=="], + "@jsx-email/cli/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.19.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA=="], "@jsx-email/cli/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.19.12", "", { "os": "android", "cpu": "arm" }, "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w=="], @@ -5500,6 +6456,80 @@ "@pierre/diffs/@shikijs/transformers/@shikijs/types": ["@shikijs/types@3.20.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw=="], + "@radix-ui/react-dialog/@radix-ui/react-dismissable-layer/@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg=="], + + "@radix-ui/react-dialog/@radix-ui/react-dismissable-layer/@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.1.1", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g=="], + + "@radix-ui/react-dialog/@radix-ui/react-focus-scope/@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg=="], + + "@radix-ui/react-dialog/@radix-ui/react-id/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], + + "@radix-ui/react-dialog/@radix-ui/react-portal/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], + + "@radix-ui/react-dialog/@radix-ui/react-presence/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], + + "@radix-ui/react-dialog/@radix-ui/react-use-controllable-state/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], + + "@radix-ui/react-tabs/@radix-ui/react-id/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], + + "@radix-ui/react-tabs/@radix-ui/react-presence/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="], + + "@radix-ui/react-tabs/@radix-ui/react-presence/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], + + "@radix-ui/react-tabs/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], + + "@radix-ui/react-tabs/@radix-ui/react-roving-focus/@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw=="], + + "@radix-ui/react-tabs/@radix-ui/react-roving-focus/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="], + + "@radix-ui/react-tabs/@radix-ui/react-roving-focus/@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg=="], + + "@radix-ui/react-tabs/@radix-ui/react-use-controllable-state/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], + + "@react-native/codegen/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "@react-native/codegen/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "@react-native/codegen/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "@react-native/community-cli-plugin/metro/accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], + + "@react-native/community-cli-plugin/metro/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "@react-native/community-cli-plugin/metro/ci-info": ["ci-info@2.0.0", "", {}, "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="], + + "@react-native/community-cli-plugin/metro/hermes-parser": ["hermes-parser@0.33.3", "", { "dependencies": { "hermes-estree": "0.33.3" } }, "sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA=="], + + "@react-native/community-cli-plugin/metro/metro-babel-transformer": ["metro-babel-transformer@0.83.4", "", { "dependencies": { "@babel/core": "^7.25.2", "flow-enums-runtime": "^0.0.6", "hermes-parser": "0.33.3", "nullthrows": "^1.1.1" } }, "sha512-xfNtsYIigybqm9xVL3ygTYYNFyYTMf2lGg/Wt+znVGtwcjXoRPG80WlL5SS09ZjYVei3MoE920i7MNr7ukSULA=="], + + "@react-native/community-cli-plugin/metro/metro-cache": ["metro-cache@0.83.4", "", { "dependencies": { "exponential-backoff": "^3.1.1", "flow-enums-runtime": "^0.0.6", "https-proxy-agent": "^7.0.5", "metro-core": "0.83.4" } }, "sha512-Pm6CiksVms0cZNDDe/nFzYr1xpXzJLOSwvOjl4b3cYtXxEFllEjD6EeBgoQK5C8yk7U54PcuRaUAFSvJ+eCKbg=="], + + "@react-native/community-cli-plugin/metro/metro-cache-key": ["metro-cache-key@0.83.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-Y8E6mm1alkYIRzmfkOdrwXMzJ4HKANYiZE7J2d3iYTwmnLIQG+aoIpvla+bo6LRxH1Gm3qjEiOl+LbxvPCzIug=="], + + "@react-native/community-cli-plugin/metro/metro-file-map": ["metro-file-map@0.83.4", "", { "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" } }, "sha512-RSZLpGQhW9topefjJ9dp77Ff7BP88b17sb/YjxLHC1/H0lJVYYC9Cgqua21Vxe4RUJK2z64hw72g+ySLGTCawA=="], + + "@react-native/community-cli-plugin/metro/metro-resolver": ["metro-resolver@0.83.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-drWdylyNqgdaJufz0GjU/ielv2hjcc6piegjjJwKn8l7A/72aLQpUpOHtP+GMR+kOqhSsD4MchhJ6PSANvlSEw=="], + + "@react-native/community-cli-plugin/metro/metro-symbolicate": ["metro-symbolicate@0.83.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", "metro-source-map": "0.83.4", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "vlq": "^1.0.0" }, "bin": { "metro-symbolicate": "src/index.js" } }, "sha512-clyWAXDgkDHPwvldl95pcLTrJIqUj9GbZayL8tfeUs69ilsIUBpVym2lRd/8l3/8PIHCInxL868NvD2Y7OqKXg=="], + + "@react-native/community-cli-plugin/metro/metro-transform-plugins": ["metro-transform-plugins@0.83.4", "", { "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" } }, "sha512-c0ROVcyvdaGPUFIg2N5nEQF4xbsqB2p1PPPhVvK1d/Y7ZhBAFiwQ75so0SJok32q+I++lc/hq7IdPCp2frPGQg=="], + + "@react-native/community-cli-plugin/metro/metro-transform-worker": ["metro-transform-worker@0.83.4", "", { "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.83.4", "metro-babel-transformer": "0.83.4", "metro-cache": "0.83.4", "metro-cache-key": "0.83.4", "metro-minify-terser": "0.83.4", "metro-source-map": "0.83.4", "metro-transform-plugins": "0.83.4", "nullthrows": "^1.1.1" } }, "sha512-6I81IZLeU/0ww7OBgCPALFl0OE0FQwvIuKCtuViSiKufmislF7kVr7IHH9GYtQuZcnualQ82gYeQ11KzZQTouw=="], + + "@react-native/community-cli-plugin/metro/source-map": ["source-map@0.5.7", "", {}, "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ=="], + + "@react-native/community-cli-plugin/metro/ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="], + + "@react-native/community-cli-plugin/metro/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + + "@react-native/community-cli-plugin/metro-config/metro-cache": ["metro-cache@0.83.4", "", { "dependencies": { "exponential-backoff": "^3.1.1", "flow-enums-runtime": "^0.0.6", "https-proxy-agent": "^7.0.5", "metro-core": "0.83.4" } }, "sha512-Pm6CiksVms0cZNDDe/nFzYr1xpXzJLOSwvOjl4b3cYtXxEFllEjD6EeBgoQK5C8yk7U54PcuRaUAFSvJ+eCKbg=="], + + "@react-native/community-cli-plugin/metro-core/metro-resolver": ["metro-resolver@0.83.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-drWdylyNqgdaJufz0GjU/ielv2hjcc6piegjjJwKn8l7A/72aLQpUpOHtP+GMR+kOqhSsD4MchhJ6PSANvlSEw=="], + + "@react-native/dev-middleware/open/is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], + + "@react-native/dev-middleware/open/is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], + "@rollup/plugin-babel/@rollup/pluginutils/@types/estree": ["@types/estree@0.0.39", "", {}, "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw=="], "@rollup/plugin-babel/@rollup/pluginutils/estree-walker": ["estree-walker@1.0.1", "", {}, "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg=="], @@ -5570,16 +6600,44 @@ "babel-plugin-module-resolver/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], + "better-opn/open/define-lazy-prop": ["define-lazy-prop@2.0.0", "", {}, "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="], + + "better-opn/open/is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], + + "better-opn/open/is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], + "bl/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], "body-parser/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + "boxen/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + "c12/chokidar/readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], + "chrome-launcher/is-wsl/is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], + + "chromium-edge-launcher/is-wsl/is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], + + "chromium-edge-launcher/rimraf/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + + "cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + + "compression/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + + "connect/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + + "connect/finalhandler/encodeurl": ["encodeurl@1.0.2", "", {}, "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="], + + "connect/finalhandler/on-finished": ["on-finished@2.3.0", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww=="], + + "connect/finalhandler/statuses": ["statuses@1.5.0", "", {}, "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA=="], + "editorconfig/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], "esbuild-plugin-copy/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + "expo-router/@radix-ui/react-slot/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="], + "express/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], "filelist/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], @@ -5588,8 +6646,6 @@ "form-data/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - "gray-matter/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], - "js-beautify/glob/jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], "js-beautify/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], @@ -5600,6 +6656,32 @@ "lazystream/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + "lighthouse-logger/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + + "log-symbols/chalk/ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], + + "log-symbols/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + + "log-symbols/chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], + + "metro-babel-transformer/hermes-parser/hermes-estree": ["hermes-estree@0.32.0", "", {}, "sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ=="], + + "metro-symbolicate/metro-source-map/ob1": ["ob1@0.83.3", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA=="], + + "metro-transform-worker/metro-source-map/ob1": ["ob1@0.83.3", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA=="], + + "metro-transform-worker/metro-source-map/source-map": ["source-map@0.5.7", "", {}, "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ=="], + + "metro/hermes-parser/hermes-estree": ["hermes-estree@0.32.0", "", {}, "sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ=="], + + "metro/metro-source-map/ob1": ["ob1@0.83.3", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA=="], + + "metro/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "metro/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "metro/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "opencode/@ai-sdk/openai/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.20", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-iXHVe0apM2zUEzauqJwqmpC37A5rihrStAih5Ks+JE32iTe4LZ58y17UGBjpQQTCRw9YxMeo2UFLxLpBluyvLQ=="], "opencode/@ai-sdk/openai-compatible/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.20", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-iXHVe0apM2zUEzauqJwqmpC37A5rihrStAih5Ks+JE32iTe4LZ58y17UGBjpQQTCRw9YxMeo2UFLxLpBluyvLQ=="], @@ -5614,12 +6696,28 @@ "opencontrol/@modelcontextprotocol/sdk/zod-to-json-schema": ["zod-to-json-schema@3.25.1", "", { "peerDependencies": { "zod": "^3.25 || ^4" } }, "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA=="], + "ora/chalk/ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], + + "ora/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + + "ora/chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], + + "ora/strip-ansi/ansi-regex": ["ansi-regex@4.1.1", "", {}, "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g=="], + "pkg-up/find-up/locate-path": ["locate-path@3.0.0", "", { "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A=="], + "react-native/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "react-native/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "react-native/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "readable-stream/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], "readdir-glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "restore-cursor/onetime/mimic-fn": ["mimic-fn@1.2.0", "", {}, "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="], + "rimraf/glob/jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], "rimraf/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], @@ -5632,7 +6730,7 @@ "source-map/whatwg-url/webidl-conversions": ["webidl-conversions@4.0.2", "", {}, "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="], - "string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "test-exclude/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], "tsx/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], @@ -5698,8 +6796,60 @@ "type-is/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + "unifont/css-tree/mdn-data": ["mdn-data@2.12.2", "", {}, "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA=="], + + "uniwind/@tailwindcss/node/tailwindcss": ["tailwindcss@4.1.17", "", {}, "sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q=="], + + "uniwind/@tailwindcss/oxide/@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.17", "", { "os": "android", "cpu": "arm64" }, "sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ=="], + + "uniwind/@tailwindcss/oxide/@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.17", "", { "os": "darwin", "cpu": "arm64" }, "sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg=="], + + "uniwind/@tailwindcss/oxide/@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.17", "", { "os": "darwin", "cpu": "x64" }, "sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog=="], + + "uniwind/@tailwindcss/oxide/@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.17", "", { "os": "freebsd", "cpu": "x64" }, "sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g=="], + + "uniwind/@tailwindcss/oxide/@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17", "", { "os": "linux", "cpu": "arm" }, "sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ=="], + + "uniwind/@tailwindcss/oxide/@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.17", "", { "os": "linux", "cpu": "arm64" }, "sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ=="], + + "uniwind/@tailwindcss/oxide/@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.17", "", { "os": "linux", "cpu": "arm64" }, "sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg=="], + + "uniwind/@tailwindcss/oxide/@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.17", "", { "os": "linux", "cpu": "x64" }, "sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ=="], + + "uniwind/@tailwindcss/oxide/@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.17", "", { "os": "linux", "cpu": "x64" }, "sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ=="], + + "uniwind/@tailwindcss/oxide/@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.1.17", "", { "dependencies": { "@emnapi/core": "^1.6.0", "@emnapi/runtime": "^1.6.0", "@emnapi/wasi-threads": "^1.1.0", "@napi-rs/wasm-runtime": "^1.0.7", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.4.0" }, "cpu": "none" }, "sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg=="], + + "uniwind/@tailwindcss/oxide/@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.17", "", { "os": "win32", "cpu": "arm64" }, "sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A=="], + + "uniwind/@tailwindcss/oxide/@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.17", "", { "os": "win32", "cpu": "x64" }, "sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw=="], + + "uniwind/lightningcss/detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + + "uniwind/lightningcss/lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.30.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA=="], + + "uniwind/lightningcss/lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.30.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ=="], + + "uniwind/lightningcss/lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.30.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA=="], + + "uniwind/lightningcss/lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.30.2", "", { "os": "linux", "cpu": "arm" }, "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA=="], + + "uniwind/lightningcss/lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.30.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A=="], + + "uniwind/lightningcss/lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.30.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA=="], + + "uniwind/lightningcss/lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.30.2", "", { "os": "linux", "cpu": "x64" }, "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w=="], + + "uniwind/lightningcss/lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.30.2", "", { "os": "linux", "cpu": "x64" }, "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA=="], + + "uniwind/lightningcss/lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.30.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ=="], + + "uniwind/lightningcss/lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.30.2", "", { "os": "win32", "cpu": "x64" }, "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw=="], + "vite-plugin-icons-spritesheet/glob/minimatch": ["minimatch@10.2.1", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A=="], + "whatwg-url-without-unicode/buffer/ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + "workbox-build/glob/minimatch": ["minimatch@10.2.1", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A=="], "wrangler/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.4", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q=="], @@ -5754,7 +6904,7 @@ "wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - "wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "wrap-ansi/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], "@actions/artifact/@actions/core/@actions/exec/@actions/io": ["@actions/io@2.0.0", "", {}, "sha512-Jv33IN09XLO+0HS79aaODsvIRyduiF7NY/F6LYeK5oeUmrsz7aFdRphQjFoESF4jS7lMauDOttKALcpapVDIAg=="], @@ -5764,8 +6914,6 @@ "@astrojs/check/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "@astrojs/check/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - "@astrojs/check/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], "@astrojs/check/yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -5814,6 +6962,16 @@ "@aws-sdk/token-providers/@aws-sdk/core/@aws-sdk/xml-builder/fast-xml-parser": ["fast-xml-parser@5.3.6", "", { "dependencies": { "strnum": "^2.1.2" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA=="], + "@babel/highlight/chalk/ansi-styles/color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], + + "@babel/highlight/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], + + "@expo/cli/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "@expo/fingerprint/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "@expo/metro-config/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "@jsx-email/cli/tailwindcss/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "@jsx-email/cli/tailwindcss/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], @@ -5886,12 +7044,32 @@ "@opencode-ai/desktop/@actions/artifact/@actions/http-client/undici": ["undici@5.29.0", "", { "dependencies": { "@fastify/busboy": "^2.0.0" } }, "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg=="], + "@radix-ui/react-tabs/@radix-ui/react-primitive/@radix-ui/react-slot/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="], + + "@radix-ui/react-tabs/@radix-ui/react-roving-focus/@radix-ui/react-collection/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], + + "@react-native/codegen/glob/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + + "@react-native/codegen/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "@react-native/codegen/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "@react-native/codegen/yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "@react-native/community-cli-plugin/metro/accepts/negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], + + "@react-native/community-cli-plugin/metro/hermes-parser/hermes-estree": ["hermes-estree@0.33.3", "", {}, "sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg=="], + + "@react-native/community-cli-plugin/metro/metro-transform-worker/metro-minify-terser": ["metro-minify-terser@0.83.4", "", { "dependencies": { "flow-enums-runtime": "^0.0.6", "terser": "^5.15.0" } }, "sha512-KmZnpxfj0nPIRkbBNTc6xul5f5GPvWL5kQ1UkisB7qFkgh6+UiJG+L4ukJ2sK7St6+8Za/Cb68MUEYkUouIYcQ=="], + + "@react-native/community-cli-plugin/metro/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "@react-native/community-cli-plugin/metro/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "@slack/web-api/form-data/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], "@solidjs/start/shiki/@shikijs/engine-javascript/oniguruma-to-es": ["oniguruma-to-es@2.3.0", "", { "dependencies": { "emoji-regex-xs": "^1.0.0", "regex": "^5.1.1", "regex-recursion": "^5.1.1" } }, "sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g=="], - "ansi-align/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "archiver-utils/glob/jackspeak/@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], "archiver-utils/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], @@ -5910,20 +7088,30 @@ "babel-plugin-module-resolver/glob/path-scurry/minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], + "chromium-edge-launcher/rimraf/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + "editorconfig/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "esbuild-plugin-copy/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "filelist/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "gray-matter/js-yaml/argparse/sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], - "js-beautify/glob/jackspeak/@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], "js-beautify/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], "js-beautify/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + "log-symbols/chalk/ansi-styles/color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], + + "log-symbols/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], + + "metro/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "metro/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "metro/yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "opencontrol/@modelcontextprotocol/sdk/express/accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], "opencontrol/@modelcontextprotocol/sdk/express/body-parser": ["body-parser@2.2.2", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" } }, "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="], @@ -5946,10 +7134,22 @@ "opencontrol/@modelcontextprotocol/sdk/express/type-is": ["type-is@2.0.1", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="], + "ora/chalk/ansi-styles/color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], + + "ora/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], + "pkg-up/find-up/locate-path/p-locate": ["p-locate@3.0.0", "", { "dependencies": { "p-limit": "^2.0.0" } }, "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ=="], "pkg-up/find-up/locate-path/path-exists": ["path-exists@3.0.0", "", {}, "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ=="], + "react-native/glob/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + + "react-native/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "react-native/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "react-native/yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "readdir-glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "rimraf/glob/jackspeak/@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], @@ -5958,15 +7158,23 @@ "rimraf/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - "source-map/whatwg-url/tr46/punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + "test-exclude/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "tw-to-css/tailwindcss/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "tw-to-css/tailwindcss/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], - "@astrojs/check/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "uniwind/@tailwindcss/oxide/@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="], + + "uniwind/@tailwindcss/oxide/@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], + + "uniwind/@tailwindcss/oxide/@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], + + "uniwind/@tailwindcss/oxide/@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.1", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" }, "bundled": true }, "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A=="], - "@astrojs/check/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "uniwind/@tailwindcss/oxide/@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + + "uniwind/@tailwindcss/oxide/@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "@aws-sdk/client-cognito-identity/@aws-sdk/core/@aws-sdk/xml-builder/fast-xml-parser/strnum": ["strnum@2.1.2", "", {}, "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ=="], @@ -5996,8 +7204,18 @@ "@aws-sdk/token-providers/@aws-sdk/core/@aws-sdk/xml-builder/fast-xml-parser/strnum": ["strnum@2.1.2", "", {}, "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ=="], + "@babel/highlight/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], + "@jsx-email/cli/tailwindcss/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "@react-native/codegen/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "@react-native/community-cli-plugin/metro/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "@react-native/community-cli-plugin/metro/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "@react-native/community-cli-plugin/metro/yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "@solidjs/start/shiki/@shikijs/engine-javascript/oniguruma-to-es/regex": ["regex@5.1.1", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw=="], "@solidjs/start/shiki/@shikijs/engine-javascript/oniguruma-to-es/regex-recursion": ["regex-recursion@5.1.1", "", { "dependencies": { "regex": "^5.1.1", "regex-utilities": "^2.3.0" } }, "sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w=="], @@ -6010,18 +7228,26 @@ "babel-plugin-module-resolver/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "chromium-edge-launcher/rimraf/glob/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + "js-beautify/glob/jackspeak/@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], "js-beautify/glob/jackspeak/@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], "js-beautify/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "log-symbols/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], + "opencontrol/@modelcontextprotocol/sdk/express/accepts/negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], "opencontrol/@modelcontextprotocol/sdk/express/type-is/media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="], + "ora/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], + "pkg-up/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + "react-native/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "rimraf/glob/jackspeak/@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], "rimraf/glob/jackspeak/@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], @@ -6036,6 +7262,8 @@ "archiver-utils/glob/jackspeak/@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + "chromium-edge-launcher/rimraf/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "js-beautify/glob/jackspeak/@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], "js-beautify/glob/jackspeak/@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], diff --git a/package.json b/package.json index cb7fc11bd6e..e461aefd3c6 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,8 @@ "packages/*", "packages/console/*", "packages/sdk/js", - "packages/slack" + "packages/slack", + "packages/mobile" ], "catalog": { "@types/bun": "1.3.9", @@ -103,7 +104,9 @@ ], "overrides": { "@types/bun": "catalog:", - "@types/node": "catalog:" + "@types/node": "catalog:", + "@types/react": "~19.1.10", + "react-native": "0.81.5" }, "patchedDependencies": { "ghostty-opentui@1.3.7": "patches/ghostty-opentui@1.3.7.patch", diff --git a/packages/app/src/context/global-sync/event-reducer.ts b/packages/app/src/context/global-sync/event-reducer.ts index 241dfb14d7d..aeed288b2e0 100644 --- a/packages/app/src/context/global-sync/event-reducer.ts +++ b/packages/app/src/context/global-sync/event-reducer.ts @@ -11,6 +11,7 @@ import type { SessionStatus, Todo, } from "@opencode-ai/sdk/v2/client" +import { applyMessageEvent, type MessageStore } from "@opencode-ai/sdk/event-reducer" import type { State, VcsCache } from "./types" import { trimSessions } from "./session-trim" @@ -164,99 +165,41 @@ export function applyDirectoryEvent(input: { input.setStore("session_status", props.sessionID, reconcile(props.status)) break } - case "message.updated": { - const info = (event.properties as { info: Message }).info - const messages = input.store.message[info.sessionID] - if (!messages) { - input.setStore("message", info.sessionID, [info]) - break + case "message.updated": + case "message.removed": + case "message.part.updated": + case "message.part.removed": + case "message.part.delta": { + const currentStore: MessageStore = { + messages: input.store.message as Record, + parts: input.store.part as Record, } - const result = Binary.search(messages, info.id, (m) => m.id) - if (result.found) { - input.setStore("message", info.sessionID, result.index, reconcile(info)) - break + const next = applyMessageEvent(currentStore, event) + if (!next) break + // Apply changed message lists to Solid store + for (const sessionID of Object.keys(next.messages) as string[]) { + if (next.messages[sessionID] !== currentStore.messages[sessionID]) { + input.setStore("message", sessionID, reconcile(next.messages[sessionID], { key: "id" })) + } } - input.setStore( - "message", - info.sessionID, - produce((draft) => { - draft.splice(result.index, 0, info) - }), - ) - break - } - case "message.removed": { - const props = event.properties as { sessionID: string; messageID: string } - input.setStore( - produce((draft) => { - const messages = draft.message[props.sessionID] - if (messages) { - const result = Binary.search(messages, props.messageID, (m) => m.id) - if (result.found) messages.splice(result.index, 1) - } - delete draft.part[props.messageID] - }), - ) - break - } - case "message.part.updated": { - const part = (event.properties as { part: Part }).part - const parts = input.store.part[part.messageID] - if (!parts) { - input.setStore("part", part.messageID, [part]) - break + for (const sessionID of Object.keys(currentStore.messages) as string[]) { + if (!(sessionID in next.messages)) { + input.setStore(produce((draft) => { delete draft.message[sessionID] })) + } } - const result = Binary.search(parts, part.id, (p) => p.id) - if (result.found) { - input.setStore("part", part.messageID, result.index, reconcile(part)) - break + // Apply changed part lists to Solid store + for (const messageID of Object.keys(next.parts) as string[]) { + if (next.parts[messageID] !== currentStore.parts[messageID]) { + input.setStore("part", messageID, reconcile(next.parts[messageID], { key: "id" })) + } } - input.setStore( - "part", - part.messageID, - produce((draft) => { - draft.splice(result.index, 0, part) - }), - ) - break - } - case "message.part.removed": { - const props = event.properties as { messageID: string; partID: string } - const parts = input.store.part[props.messageID] - if (!parts) break - const result = Binary.search(parts, props.partID, (p) => p.id) - if (result.found) { - input.setStore( - produce((draft) => { - const list = draft.part[props.messageID] - if (!list) return - const next = Binary.search(list, props.partID, (p) => p.id) - if (!next.found) return - list.splice(next.index, 1) - if (list.length === 0) delete draft.part[props.messageID] - }), - ) + for (const messageID of Object.keys(currentStore.parts) as string[]) { + if (!(messageID in next.parts)) { + input.setStore(produce((draft) => { delete draft.part[messageID] })) + } } break } - case "message.part.delta": { - const props = event.properties as { messageID: string; partID: string; field: string; delta: string } - const parts = input.store.part[props.messageID] - if (!parts) break - const result = Binary.search(parts, props.partID, (p) => p.id) - if (!result.found) break - input.setStore( - "part", - props.messageID, - produce((draft) => { - const part = draft[result.index] - const field = props.field as keyof typeof part - const existing = part[field] as string | undefined - ;(part[field] as string) = (existing ?? "") + props.delta - }), - ) - break - } case "vcs.branch.updated": { const props = event.properties as { branch: string } if (input.store.vcs?.branch === props.branch) break diff --git a/packages/desktop/src-tauri/icons/prod/icon.png b/packages/desktop/src-tauri/icons/prod/icon.png index 0ecbb6d5f8f0a14d4f1f413f12d0d49b5a6accbc..5640800c596f39b7a666593d0090ab1f5c222afc 100644 GIT binary patch literal 11113 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
+(acZpLHNc>3gHlCE@z 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

XOc$ z%8_)Ri+DLPzZu6J67IH@NtcOX!7Z(UI5l1Wu-RPv)}0|zpSwEsyoj#e%a!Mf$*n8V8A*Rud9KEQ`Z#q!7P577Al{Ur2+y+BrL z#WG#7OKprHq6~>WlSzYNYTgXgm$Or*41~VY3Mw*L>@xG^ybrS_%7&Wld+koQB6ih( zIp=4WIkK*s13I{H*J9>e?ppy%c&K)0aVL(4p=q)mz76dE);IoM0EDsn zHmrWX>uJsXU+)pXgYiax@Hl?_IDQvl?*2a=;^>QVF9Isx9-8lF=nCD>QkG?c6yes| z$hi^JO=Om@VBd=ueb9f})aLR%T6Ee$@oh zlU*f#PAl2#3fZu2EuAizPRW228VQA%>pcbFSflURyY>7Dje#_8D(n&y-fS^MU~|#G z{EA~R4l77 zCvs2Bl~|ysy9<^i36+$bto>%L5;t=4F~XQ)GRookf$QHY4YF~*Z?w&lT|UDahfKa4 z!L4)}qtc)#&G^j;W6{w+-zPrt2{Zop?Pm;s{=#wm{jsP1^!7SH_S@@J1e9L!-8Kng z5zzIH@^s(RoWCINmFtvYGHPRkVMS#4`X;Wg9bNR)A+79eQ=WU>m?YU87k{ER3e4IZZEPY}f`siy5ZodsGb}b2{e2AY`e~kCR^yAY+Qt5r zvv4}YDFt#9!gH~w4qOWx6160wG%CZjB9TPtXF(@A-cxDp5|RR2a?3O_z~V1)L5le3 zCW~`@|J>w?sps7;vQu$MuMwgXtI(h>(c_xKwVTC?91}0`_GRKmW$6tS% zq`x<+0N|_h0X}dXUqVt~6#*RuIF3gBv8^Uk+%IRMbla*~cAw2F>x|B6Q$tRGM6mh!qy}95h9}bh>toaU^9+S47-^&7(#8LYim|W|zR3MQ( z+_<@6@cMJ~QqO>0HHprVbXgF;e|{o0azn#?c#)ivJG3gsLn`7W|KSFya>?1iXmxin z?ekCw(;`-TH>%y|~5#cMFym@;H)-Eg5wGNP3%wg?VU+0*q0AK>Dc zn({3wx>xF_rh8>SI{&85pAoZVa_pg~xDSUR(-xT){`2 zy7=TnULE9QK}=iDz)i3z24`?p7}VGADeAS}Hys2e72Ou`$IXU2HJb;7T~f-Hf}lo9 z*=8b_2z1dSTrln=Yg=v9T#O0NlBsWIx_J;OQ-Pz9@@)uA>~o~VqN7M@^?eCa*5bdb zQ#w7{Ypf$axdL!U?WN)0#3}FXZ86oy?jl?W#ag?oIu zugJNP9C}*gsk1lAWJ#(xR}J@GGos=9h#fqiF-px73PRM*`75iv<=FRHclp!!=cfka z|6d-*@7EssOcnq;Sc~6u9A9x9U+f~F&p>J%V1foavH-*HH1O006nl9=X} zz1SACZgP{**zwl`VJ7j|q|XP4j$s~K7~&K$=%QNk`^6&W4zAgt#!^YbkM7|3kXbcQ z-5;Z8L%i~NT{$232G8!>5=~x9qcAi$v5e6Vy`_5Y($hlV$k*B^;eNTNLRFseQ9dVK zb6j}H^&ouDMXfv`Y$a<68Nr{0bEM^Ljdtdi3=VH~j#grqD7g51uPA73Upp1gJ~xQd zo^<{E*&OXy$|r(iw7$j2aUZ?{E!jvLH6cP)W@03ZaWq6vlzWhXv*715XPI3ZA&S?~ zys^sK_Z$lXVt1BBlN~#WsLif=NzuW3)9MC8_CbQTSzQr~zoxW9hrl6vK9078u${aC z2mjcrx?KJioBy|OcTRr~o;KtE%^CshkOzLtaeUQre4dMdep0$#m$8lPGR&~&=FWnE zj9Zy%#H2eu{7Ih1i)2Fx8tX97f<`$uLm`W|oV&(@NtEKexvKLZOiuWHRN@;=ZVEy( zENG@GNl#k5_W_e4Y~AD+5JFE*HY*oSXD)y=*UY4MfkD?e!peiSe>(1Q(ZU>a_lB{u zJ?0GF{1Li&dF)V7e|5Q4w0UeLH@ayvtr*>LPjcqi62wV&GZvEO3Gip~I+O=T#Y!i) zGHI*#GM@^38*>XT#d(mEHXF&v&ReP5Q&YWj9~bZp53W|41lLGhAj1J_#zO>te~dmzWD|NX~5{_!oq z{rx#a77jHCS5fr|Zsj=vE zL@fCXwW-QeAd>&6V4*KSdJp^=yndFg1$OylW9`DoTmmG!)d=Y-6Gb^$PVo(;$tH93;l`kI=J= z>I7)Y#0#nSP21s$#$82(C$~f^E4+3}zCBq!qu9ROfApjvqEs9q<;4)qVD3b7thR{h zlQN|{{7L7ZHvbR3UUI*;LIL0+;G2d#@QbYu=;MHX@;fIWk>e6GJt+k^kA!{WW%Cae z(ywDI(VUd99qR=()*xxoV7yCe*%BiTcMO!LgEHo$^-$-q|Sx;uh-0VOkS+gk-&p$^rLd7nuZIZ$q)l12o{Nm{m@UUpD`;Ez! zI9JWt0SlGE#ZZg96{=%Q#B=_EEV7$&7Fsg50t~&2%hFWv?6<;m+`Ld?sS)LFr@o}X zaWOg!et2G+{0~|cedNDzL#@BxL+51pIz$GO*VOEFkI`krnt2%!c|9N!R)}A%VV3*a z1k1)&R6nuUPQ-G?k{21)`4@ct2MKcXI^tJw_@l+|w-4C=$KL48|IH`>SOoNOz~4KL zFFTI+jSqfqVEv+3l(1)Zx2j;mLa8FNEX#{)-N&pPt@Y)m2fzN42xKN}EoLOI)bmz_ z2~BuhQI=a_icYT2K{rD$(025zPOUmnLW`DK-8$E-?iqZ6c`KphrR9Q#(UAqdj_2XWNhiYNL@S6 z&+%+A_I69|mAvMO7zwnXk-!R{44NV}XHP7;*s0jEp_H#hh_b#s`yRo`nJ@8wF8K%i zUHB}m=I!i+1NUU&l!TE%TO{sX@-ZAbV@YEwIxKlMTEHUdmfNTej3C!*HsUd{aMeUq zF&7HMX$%1_)P=jnk>mXPf!cF^GomADz_H(Q4LZk8YF2E;-kU(H$z{Nyn|W8`;*^RCN)vg0 zcy2;BHeEwosn)_&WLvHyXq4WQ}V-I}cjhgwtRSJM45iG~RM%Tc8VaheIqXF!^?aU^7%aY{n^y+uzn7RZ? zg&es{IFcQr?PWOwFZQmx;L3`YNBqj6MR0g^0A>eC!H0n zUj<8@FT`LHQf-to(rhKg$?CH-x-ojx;W;K|<)^1i^3nGKOp~1u5_1VDaU5;(*0=c% z3&E6Kkz{u%C?yy?Z5mBYBLFV+6&V|%XE)od+Lu6ljT3%ODS|q;6XTpDTYoQ{1!)R& zsz1QS;HJ@a_=O0ECnSAX|a>z zdELlqlAUghM|M|Tz9O=-KFM!HKoc3%7Tv{5slVvODA$TwcksNNzlY~uM8Qc7h4}Zz zbK*cUyPG=3n88p|Kbc!Fp_HBJ-)H{HQK>zx4Trz4!5;kTo3#nQnFYWGzvF#426l?% z?;L+O@d7#$&@V>6VX88$`EEi1xTw+Ny(-5dOws2&aSH4VWw$LeKW+9x*w6(A;j`dQ zx2p?jiH&dBm>|K4Q4ZL(=LI^ZkW&kIQq3kzWUT*GA%NsPC8J9 zQKOgclUxn5(`_x?|9wcwcE@8|kr2#OcHg)3I!N3Np(3qjv4JtZ^ZD`pn?_}Xcj2wS z*%F#)Qk@$*)A8R~{96iZL!Yvk4wk>?jGl|6QE6B0k! z=BSc)N65OvNTU*&x->hc;e3+>)coKmUh|T%kbDQIr%oFn&b=AiTVRtn6hxEdC=n7C zb|Zg0=DgFTuki_;BTB3V*Qm(KABTXuFeOV) zmZl38&c^gSdqkkvK8;dR-h*e({+eLL-GWy|RO1j0DYkc5^!Ma{FVm{sj+YLdVX@@2 z(UQmpz4&zfD;-hK^#v8AF9yz$Q4?h~(5$MN$SCAtLT2z8 zE;$Z1PfPg+3CRtlyhf5O3mDJwS6L4=n#9j}`1J?m|8Vo~(Eozz|FPlj_l?-o_BVU; zeJd0I_6qpHArt(K$MFS#N6rqalPdbfJEVfAou(`Ky20ILdK00W7^W2EcbV=TWanTl{jtRTP#hg+i zdJlL}Q;MErMkgW`u6dj>T4H1(=rChBr9I#btmf#G(TmM(=%HVvNQB)?u8y@Bir`uW zYGapW)^p8aU0{i$a*k$b+~llycgo)6tkvdqAUoaYg9|pW*0&XU6i8^7gD_Wd|EBbf-i!A^YE} z!smm0ng8-3^L&mbE>szm)h6R)7wL@CLPH}Z8>y5$t~MO``k$Ns;4GAun~TVF{q03= zqEuj_x3X^aCde?VFs@iKuGw|2?rEPpLeO?SBhr+NeHiM(dw8e^nhONkOi%N5ZkS|z zuhKI^EbAr|XyOzQ=7ltIw`r2|KdOjw_gY0@-5V?j>-v^jB_(85=MD+xR0JE*Ta6HP ze_V=^m6b9((^UjCt)Y#SF{_}S6QWvtK59dDK0%NTF7HLBCo=MQfmTkj*i;|D)pFu( z@Mow=DF@dR$)jx9u7yn9?E6n=`FD<5fc#$=`_(rb$5)R%?M-3&KT8Dw6$1T4{j=lv zk>mJn$MI>F3Kkkb!X6o%X`wL$OGfsX4WBYJXS|2(_uXuj*kQ zaQP0GzLO#AG^_vzPbNC`aFtCb7YG{HEavKMyq~E^sKuSEVFwpkYC{G!$x`w)m>_zN zP)uB-_dAP(v_KX|0XD@hEGVC9>3rBAiJeVCXPhWW!=NNvMNw6o;|`a*iO*uR2EGzg zJgJJS&Bi<{RzJGtGO3yFvEt{L&}!Rl5WJiYmm;e#k=Z z4r=>rywle!k+R)&Zze1gUPmfrEKqBN!ZoCjA&#w9BY{zHO!8Env&m1x-U40Q-w!o^ zl=yx8IR4yme4SKp+w%h8@pu8>J<dt>D-;=yn?HCS4PD!0h~s&)gP*whs|dX;S}T(v zcX;w~*sRsob!v3}qkq0fB81afb0rkP{tQMNYL3j$S;Zd-TpZ(ssM-m63(kR)e2@ha zW1YDGqpLLYf4U#aQ8am3*dUDh^WY$P2{j_hWOAXqagItZDPD6ycqwXBG%>#X?4~t# zX!1&#kVq?kjQ%Nzr%C?0Ns(2fu<80s8PS9&p2b!blr$;|Jdlc@W^62E_qJ@&y{aie{!769f2yf{Vz+mH&rU^Jj#tPaJLK|@K> zSgj($x3T&yO()RIzbQ5||>bzu?9MS`)Y>T8?TF8W_ z`_yskE>bP$laY>nS(?T^XMS^#Bnd~jIG_R7Gm~*iNoylL;7j6*${mgN+D3s ze?7Ckk9T zs@mH0y%-US#bV$5Ao{`J!)?N$4Jj~7BqV#`C(y@y<;KNSGZq?r4=cU9Xa6RMaWf|g zD6#KD^!Fqvd?J|wZw~>Vcu8tBN*M| zO26NN!)0@4nB-Y2Vw>+vZjLMRC+DiYtEujp@uilo`90S6v*1}FUzLKVI9|^AY1iEr zy7G%E74 zFPlXD8|R&btjs|7tag=0z!^2i3$E(9kWeyY@(z^?HH#xOY@M#;J-dDA9l)WVI*`$>nD)lpc$`F6A2qPS>C-?sbYIyYJAE;^#I2-tQbb%rWh@zEoN_A2jCS23 zy2+M%Psx^6+mOAU$ZLkXT`YKg@OUaoXz{zII9ra|k~3x%NzCsU8~KiKvrVRG6JZf# z#OdB6QqfU1Xja$iqt?^IZ14MO*athUoI)4<`JEMnbSVgmy^0Fjq1K<5R#A85cOd%cea>c*$008EJ0g<_%<`b$x%qwqDD(rn*ptH zmHagkE{l=Rd1%OCI2R{pE3D?xijch!$;eJmBbwTXJpWwy97HMU4LRFRNtTFujIW*S zW9u3g*-x`ynlhbpaJ4cNK4K5{NdGn!DpA*(RCg6scW{QGj zFFJC^CA;Xd{IDcfoY4_>ROhifrOa$@c2b5S(arA(CX_SWG?yN+!se4CXSTgW?)(a_?wT;|zS!5BJU6#;fzBc$tVENK2x=os3S$NE%AaO}l` zlT35*Zl(eR&$^l9+emz)QCJ#TdCago&fCOEcE+L5Gx06DhZb9&UJ$fqc5xF-bT+$o zA|GHM>s7O85}f!_soOo6^Z_w84j()jN3@fM8E(Z)Ii5!eXc%cE+PB+3$je zFmE3B!)exIQWcA`QkP&cvadlyTI6KK2d6#Pz{VF&VZ(|7qq_Vcl%xv3KtuH-|YYDas0{S_&)4EuRg1r=(Ah^FkPuv zV12mr9ot>R@Xs0vgYR0621?Q~P=Sf9T;z|A0@P+%y5o|#G5VGyoCF7(55UC(NmNbM z?M4aI!rF8fyEVFM1qZQ9MNh;dNqh2pT#b>EYh7?Zi}#AT1|e6S zO!N!-0&C@Su?>!PErkXN3E2a$WGcwg_>3b17Z;M!IdL>UNFTC3L{9ddXj7MIsJaD=ly+CL*!!&r9YBA%FeOJy`&2?9h@G zb&|HSfa~|@(fmE^_WRLc{_y-h(8m80Bf#fRZFkZ>64Uo*c>{gc3jkiQ8VkHUa+d$W z__r?^NrP3X?M4MEcDSPgBmCu@7a?V^35sulJxaH>-P&s#ZqQlKfh{3g*xgUE`=u-1 zM8xr2+$sQXE__H!wl+8s=Xr2OcgPNC$q1=jxA;E2kfb^DSY&sbygC)tp5T`c71^-uQz7PdPMBQx@FcEj%F)F-$-xLpwY+>gQRQ2FF2?P?TO#|J&r$pgVuR{QH~j#QV{ky#8F*rr+23!06wwKh(zmq2u`ax&0N^UoZ|FWP1aM}2Lsj_z!RPnAFqAR-Biq`6u=3pF6gs{fpR z1CH;H@ESWTdz*99^Fv1seQ@nM<6rq;)FN5$t$#rev#6YScoj?!lDpAS#9Xw?mW&Y+ zuY@;tpO)IyIV93ipK(KgO+lmNDDXT$n|(P)B(5cxlSP31%BS~Y_|-}dcjf%qE7Yin zfFNsKY=H4zPs`ynE453U#z2MqT+EMdZI=41`-%rab%d{F{kf2~x+nSd~g z3+kTT>G?sDX)3h2IdcTUVx#UYsySG&CDwZS`xL)ik=;n7ymYqyY#u#Wc>)E&`Fs&^ zslw%!?mtB4<`0gbp)C{x?bbP|WVm9IR#CtO$OS;%yw!yf8V&HS z9o%+9W{Jg~=6|V!Hg|yD0rkG^5l~-W(A&z2#qh4fdC#as+5QMYFZd|?$yJDfwg}JUZHzUs9lWyGaD-p%G@whuo zn-z;DWXoUX$SYE5{d~VyJTIHWuU17#O31@|+GXc@ftX!rCy2d|2kW_4bnR65x=;cV zMP5ufl%8QTd=`AaQMzZwx}klZLx<;3Zp!n(d&-EQxj?w5*-%{aAX1{I#}6sAhsAea zQ@MtwJcBCa3c~MS+t;Wnavou9>`lM_-M<+lRBo_CBpL;H^7DVI{ukfn4AN{|GfFZ@}`#9-~}Hw(5PzcS$saTB}%y?h9o*CjN;p&!zZ$OP3J@`F~u0;x55gW%` zHW>RFaI696vIdvENgwUa&ro?4W+whodUk`jwv!kb;NV?(1}Cwr7dOmSPjWdIwfxu&>=HSo*!Xm%iNS0E_43uvrQYd;X^mmpXo< z3NC~TWpcsB;Ha>{+7kOjI20Fs(eCs9Fc}!0B=@eDC1bR4(@Kuqk0LtOy-*$gJ)ONb z{RiNS@zn|B|6+`c|EtF158iGa|EFRBz|Z=EV4Qw4{MzIA%H#N|<9J^f39uk|>~ls5 zQ}GHcukoK3Y~naSOmVvGveWF(KR;FCDOOie$EUH0*|v6FG|4P2-h>+N1E9NOL(S$l1n7VAks!l;Me;H+ z%fGw)98kzkBvfuPX`amPSOGp4<%x}<#``}#{j0O)7^>b=c}}FxlZ6Elt_qkbRS=52 zGc<;3f}s6Bi{bj-Dm*;e5sCK_#Y-N8ktM?FwRxwahXt>TeoOrdI!7|+gvtRyC?(BV zxH|FF$XK#5r=+!t==#jn!Sh(j_#UCd-@=B!4+j6Yj=BDS5=s1pwH!V^ofaVgOecXy8NuPNv0fuRh)6! zU~k2q26w**X*$u38!i18q>JCdPQH9*!maFX9c|26FuQl7Ben3;>ekmtD8e3snkKoJ zyHg<*7sh+?7g#~)E@BvaO){aG_3Ah`rvfIV%3tp>6F+BC2l)Fr3L%HeK%;#cDZh!uFfC0+a&)M!g z1-|?^zH}4>Ul1xv7Y17>4&GAddO;?<&(-cV|DMPFo+tVKr~SUth~d7Uk!(*NrTANY z-L2pCTF=pa-|vym)A-r1qvx;ZujjAr8TM*x90`G^VbR;XgA=YenY)?6b8R|yOSLLlI~p1+>Ip4rW}J;COD-`DJmKernQ=##u&8NM$6ce@LL`{A+S|IhLN z`$qqfg%e+)1fTL<{__Ih=^_N}o}yp_#PsRM@p;=_MnUHj{DSe{&mD!q&l~^!*~js7 zkK;2(vGC4OT)c1t>U#cq{(Am;{@R`aleSj}G+)QZhRm*KxxBR9S-AKA|KsEM(edXW z8UOalZB}uuHv8>)hyT0)cr(slLJJ<}2JD;ur;Uxj7XqI>j$ROa*7*PL9)JFf@&Dg7 z{`(o@``$VJy^XK0_f|#4gYnh%??C|4_dS0-e?5P_bzgmh{i%D_cz?}4HslBJ z&3|e9+fR+J?|=V^(Vc&C{P&gdcOM_n`%B|%UmnL#j!plgPx# diff --git a/packages/mobile/.gitignore b/packages/mobile/.gitignore new file mode 100644 index 00000000000..d914c328fe1 --- /dev/null +++ b/packages/mobile/.gitignore @@ -0,0 +1,41 @@ +# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files + +# dependencies +node_modules/ + +# Expo +.expo/ +dist/ +web-build/ +expo-env.d.ts + +# Native +.kotlin/ +*.orig.* +*.jks +*.p8 +*.p12 +*.key +*.mobileprovision + +# Metro +.metro-health-check* + +# debug +npm-debug.* +yarn-debug.* +yarn-error.* + +# macOS +.DS_Store +*.pem + +# local env files +.env*.local + +# typescript +*.tsbuildinfo + +# generated native folders +/ios +/android diff --git a/packages/mobile/README.md b/packages/mobile/README.md new file mode 100644 index 00000000000..d0f81cc07c0 --- /dev/null +++ b/packages/mobile/README.md @@ -0,0 +1,146 @@ +# OpenPad + +A mobile client for [OpenCode](https://opencode.ai) - the AI coding assistant. Built with Expo and React Native. + +## Features + +- Connect to any OpenCode server +- View and manage chat sessions +- Send messages and receive AI responses in real-time +- View tool usage (file reads, edits, bash commands, etc.) +- Expandable tool blocks with input/output details +- Image attachment support +- Dark/light theme support +- Live polling for real-time updates + +## Screenshots + +*Coming soon* + +## Requirements + +- Bun 1.3+ +- iOS Simulator (Mac) or Android Emulator, or physical device with Expo Go + +## Installation + +This package is part of the shuvcode monorepo. From the repository root: + +```bash +bun install +``` + +Start the development server: + +```bash +bun run --cwd packages/mobile start +``` + +4. Run on your device: + - **iOS Simulator**: Press `i` in the terminal + - **Android Emulator**: Press `a` in the terminal + - **Physical Device**: Scan the QR code with Expo Go app + +## Connecting to OpenCode + +1. Make sure you have an OpenCode server running (default: `http://localhost:9034`) +2. If running on a physical device, use your machine's local IP address instead of `localhost` +3. Enter the server URL in the connect screen and tap "Connect" + +## Project Structure + +``` +openpad/ +├── App.tsx # Main app entry point with navigation +├── src/ +│ ├── components/ # Reusable UI components +│ │ ├── GlassCard.tsx # Glass morphism card component +│ │ ├── Icon.tsx # Icon wrapper for lucide-react-native +│ │ └── Markdown.tsx # Markdown renderer for messages +│ ├── hooks/ # Custom React hooks +│ │ ├── useOpenCode.ts # OpenCode SDK hook (legacy) +│ │ └── useTheme.ts # Theme hook for dark/light mode +│ ├── providers/ # Context providers +│ │ └── OpenCodeProvider.tsx # OpenCode client & state management +│ ├── screens/ # App screens +│ │ ├── ChatScreen.tsx # Chat conversation view +│ │ ├── ConnectScreen.tsx # Server connection screen +│ │ ├── SessionsScreen.tsx # Sessions list +│ │ └── SettingsScreen.tsx # App settings +│ └── theme/ # Theme configuration +│ └── index.ts # Colors, typography, spacing +├── assets/ # App icons and images +└── package.json +``` + +## Tech Stack + +- **Expo SDK 54** - React Native development platform +- **React Navigation** - Native stack navigation +- **@opencode-ai/sdk** - OpenCode API client +- **lucide-react-native** - Icon library +- **expo-blur** - Blur effects for iOS +- **react-native-markdown-display** - Markdown rendering + +## Contributing + +We welcome contributions! Here's how you can help: + +### Getting Started + +1. Fork the repository +2. Create a feature branch: `git checkout -b feature/my-feature` +3. Make your changes +4. Run TypeScript check: `bun run typecheck` +5. Commit your changes: `git commit -m "feat: Add my feature"` +6. Push to your fork: `git push origin feature/my-feature` +7. Open a Pull Request + +### Commit Convention + +We follow [Conventional Commits](https://www.conventionalcommits.org/): + +- `feat:` - New features +- `fix:` - Bug fixes +- `docs:` - Documentation changes +- `style:` - Code style changes (formatting, etc.) +- `refactor:` - Code refactoring +- `test:` - Adding or updating tests +- `chore:` - Maintenance tasks + +### Code Style + +- Use TypeScript for all new code +- Follow existing patterns in the codebase +- Use functional components with hooks +- Keep components small and focused +- Use the theme system for colors and spacing + +### Areas for Contribution + +- UI/UX improvements +- New features (voice input, image upload, etc.) +- Performance optimizations +- Bug fixes +- Documentation improvements +- Tests + +### Reporting Issues + +Found a bug or have a feature request? [Open an issue](https://github.com/R44VC0RP/openpad/issues) with: + +- Clear description of the problem or feature +- Steps to reproduce (for bugs) +- Expected vs actual behavior +- Screenshots if applicable +- Device/OS information + +## License + +MIT + +## Acknowledgments + +- [OpenCode](https://opencode.ai) - The AI coding assistant this app connects to +- [Expo](https://expo.dev) - React Native development platform +- [Lucide](https://lucide.dev) - Beautiful icons diff --git a/packages/mobile/app.json b/packages/mobile/app.json new file mode 100644 index 00000000000..aca38495e72 --- /dev/null +++ b/packages/mobile/app.json @@ -0,0 +1,45 @@ +{ + "expo": { + "name": "OpenPad", + "slug": "openpad", + "version": "1.0.0", + "scheme": "openpad", + "orientation": "default", + "icon": "./assets/icon.png", + "userInterfaceStyle": "automatic", + "newArchEnabled": true, + "splash": { + "image": "./assets/splash-icon.png", + "resizeMode": "contain", + "backgroundColor": "#ffffff" + }, + "ios": { + "supportsTablet": true, + "bundleIdentifier": "com.openpad.app" + }, + "android": { + "package": "com.openpad.app", + "softwareKeyboardLayoutMode": "resize", + "adaptiveIcon": { + "foregroundImage": "./assets/adaptive-icon.png", + "backgroundColor": "#131010" + }, + "edgeToEdgeEnabled": true, + "predictiveBackGestureEnabled": false + }, + "web": { + "favicon": "./assets/favicon.png", + "bundler": "metro" + }, + "plugins": [ + "expo-router", + [ + "expo-image-picker", + { + "photosPermission": "Allow OpenPad to access your photos so you can attach images to chats.", + "cameraPermission": "Allow OpenPad to use your camera so you can capture images to attach to chats." + } + ] + ] + } +} diff --git a/packages/mobile/app/(tabs)/_layout.tsx b/packages/mobile/app/(tabs)/_layout.tsx new file mode 100644 index 00000000000..48b6a8fa569 --- /dev/null +++ b/packages/mobile/app/(tabs)/_layout.tsx @@ -0,0 +1,45 @@ +import { Platform } from 'react-native'; +import { NativeTabs, Icon, Label, VectorIcon } from 'expo-router/unstable-native-tabs'; +import { useTheme } from '../../src/hooks/useTheme'; +import { Ionicons } from '@expo/vector-icons'; + +export default function TabLayout() { + const { isDark } = useTheme(); + + const labelColor = Platform.OS === 'ios' + ? { color: { dark: 'white', light: 'black' } as any } + : isDark ? 'white' : 'black'; + + const tintColor = Platform.OS === 'ios' + ? { color: { dark: '#22d3ee', light: '#0891b2' } as any } + : isDark ? '#22d3ee' : '#0891b2'; + + return ( + + + as any} + /> + + + + + as any} + /> + + + + ); +} diff --git a/packages/mobile/app/(tabs)/projects/_layout.tsx b/packages/mobile/app/(tabs)/projects/_layout.tsx new file mode 100644 index 00000000000..dbe63b5d815 --- /dev/null +++ b/packages/mobile/app/(tabs)/projects/_layout.tsx @@ -0,0 +1,5 @@ +import { Stack } from 'expo-router'; + +export default function ProjectsLayout() { + return ; +} diff --git a/packages/mobile/app/(tabs)/projects/index.tsx b/packages/mobile/app/(tabs)/projects/index.tsx new file mode 100644 index 00000000000..04b2bdfc476 --- /dev/null +++ b/packages/mobile/app/(tabs)/projects/index.tsx @@ -0,0 +1,34 @@ +import { useCallback } from 'react'; +import { useFocusEffect, useRouter } from 'expo-router'; +import { ProjectsScreen } from '../../../src/screens/ProjectsScreen'; +import { useOpenCode, Project } from '../../../src/providers/OpenCodeProvider'; + +export default function Projects() { + const router = useRouter(); + const { projects, projectsLoading, refreshProjects } = useOpenCode(); + + const handleSelectProject = useCallback((project: Project) => { + router.push(`/project/${project.id}`); + }, [router]); + + const handleCreateProject = useCallback(() => { + router.push('/new-project'); + }, [router]); + + useFocusEffect( + useCallback(() => { + refreshProjects(); + }, [refreshProjects]) + ); + + return ( + + ); +} diff --git a/packages/mobile/app/(tabs)/sessions/_layout.tsx b/packages/mobile/app/(tabs)/sessions/_layout.tsx new file mode 100644 index 00000000000..a1cc56b4bdf --- /dev/null +++ b/packages/mobile/app/(tabs)/sessions/_layout.tsx @@ -0,0 +1,9 @@ +import { Stack } from 'expo-router'; + +export default function SessionsLayout() { + return ( + + + + ); +} diff --git a/packages/mobile/app/(tabs)/sessions/index.tsx b/packages/mobile/app/(tabs)/sessions/index.tsx new file mode 100644 index 00000000000..6279c74fc9a --- /dev/null +++ b/packages/mobile/app/(tabs)/sessions/index.tsx @@ -0,0 +1,28 @@ +import { useCallback } from 'react'; +import { useRouter } from 'expo-router'; +import { SessionsScreen } from '../../../src/screens/SessionsScreen'; +import { useOpenCode, Session } from '../../../src/providers/OpenCodeProvider'; + +export default function Sessions() { + const router = useRouter(); + const { + sessions, + sessionsLoading, + sessionsRefreshing, + refreshSessions, + } = useOpenCode(); + + const handleSelectSession = useCallback((session: Session) => { + router.push({ pathname: '/chat/[id]', params: { id: session.id } }); + }, [router]); + + return ( + + ); +} diff --git a/packages/mobile/app/_layout.tsx b/packages/mobile/app/_layout.tsx new file mode 100644 index 00000000000..dc5ce72a2dd --- /dev/null +++ b/packages/mobile/app/_layout.tsx @@ -0,0 +1,73 @@ +import { useEffect } from 'react'; +import { Stack, useRouter, useSegments } from 'expo-router'; +import { StatusBar } from 'expo-status-bar'; +import { useColorScheme } from 'react-native'; +import { SafeAreaProvider } from 'react-native-safe-area-context'; +import { OpenCodeProvider, useOpenCode } from '../src/providers/OpenCodeProvider'; +import '../src/global.css'; + +function AuthRedirect({ children }: { children: React.ReactNode }) { + const { connected, connecting, connect } = useOpenCode(); + const segments = useSegments(); + const router = useRouter(); + + useEffect(() => { + // Wait for auto-connect to finish + if (connecting) { + return; + } + + const inAuthGroup = segments[0] === '(tabs)'; + const inProtectedRoute = ['chat', 'new-project', 'project'].includes(segments[0] as string); + + if (!connected && (inAuthGroup || inProtectedRoute)) { + router.replace('/connect'); + } else if (connected && segments[0] === 'connect') { + router.replace('/(tabs)/projects'); + } + }, [connected, connecting, segments, router]); + + return <>{children}; +} + +export default function RootLayout() { + const colorScheme = useColorScheme(); + const isDark = colorScheme === 'dark'; + + return ( + + + + + + + + + + + + + + + + ); +} diff --git a/packages/mobile/app/chat/[id].tsx b/packages/mobile/app/chat/[id].tsx new file mode 100644 index 00000000000..3d0f7d50b7c --- /dev/null +++ b/packages/mobile/app/chat/[id].tsx @@ -0,0 +1,161 @@ +import { useEffect, useCallback, useMemo } from 'react'; +import { useLocalSearchParams, useRouter } from 'expo-router'; +import { ChatScreen } from '../../src/screens/ChatScreen'; +import { useOpenCode, Session } from '../../src/providers/OpenCodeProvider'; +import type { PromptAttachment, ProviderModel } from '../../src/providers/OpenCodeProvider'; + +export default function Chat() { + const { id } = useLocalSearchParams<{ id: string }>(); + const router = useRouter(); + const { + sessions, + error, + getSessionMessages, + isSessionMessagesLoading, + serverUrl, + sendPrompt, + isSending, + createSession, + subscribeToSession, + unsubscribeFromSession, + providerData, + agentModes, + selectedModel, + setSelectedModel, + recentModelKeys, + } = useOpenCode(); + + // Derive available models from connected providers + const availableModels = useMemo((): ProviderModel[] => { + if (!providerData) return []; + const connected = new Set(providerData.connected); + const result: ProviderModel[] = []; + for (const provider of providerData.all) { + if (!connected.has(provider.id)) continue; + for (const [modelId, model] of Object.entries(provider.models)) { + result.push({ + id: modelId, + name: (model as any).name || modelId, + providerID: provider.id, + providerName: provider.name, + }); + } + } + return result; + }, [providerData]); + + const handleBranch = useCallback(async () => { + if (!id) return; + const currentSession = sessions.find(s => s.id === id); + const session = await createSession(currentSession?.directory, id); + if (session) { + router.replace({ pathname: '/chat/[id]', params: { id: session.id } }); + } + }, [id, createSession, sessions, router]); + + const handleOpenBranch = useCallback((sessionId: string) => { + if (!sessionId) return; + router.replace({ pathname: '/chat/[id]', params: { id: sessionId } }); + }, [router]); + + // Subscribe to session on mount + useEffect(() => { + if (id) { + subscribeToSession(id); + } + return () => { + unsubscribeFromSession(); + }; + }, [id, subscribeToSession, unsubscribeFromSession]); + + // Find session from the sessions list + const session = sessions.find((s) => s.id === id) ?? { + id: id || '', + title: 'Chat', + } as Session; + + const branchRootID = useMemo(() => { + if (!session.id) return ''; + const source = sessions.some((item) => item.id === session.id) + ? sessions + : [session, ...sessions]; + const map = new Map(source.map((item) => [item.id, item])); + let current = map.get(session.id); + while (current?.parentID && map.has(current.parentID)) { + current = map.get(current.parentID); + } + return current?.id || session.id; + }, [sessions, session]); + + const branches = useMemo(() => { + if (!branchRootID) return []; + const source = sessions.some((item) => item.id === session.id) + ? sessions + : [session, ...sessions]; + const map = new Map(source.map((item) => [item.id, item])); + const rootOf = (sessionID: string) => { + let current = map.get(sessionID); + while (current?.parentID && map.has(current.parentID)) { + current = map.get(current.parentID); + } + return current?.id || sessionID; + }; + + return source + .filter((item) => rootOf(item.id) === branchRootID) + .sort((a, b) => { + if (a.id === branchRootID) return -1; + if (b.id === branchRootID) return 1; + return (b.time?.updated ?? b.time?.created ?? 0) - (a.time?.updated ?? a.time?.created ?? 0); + }); + }, [sessions, session, branchRootID]); + + const messages = getSessionMessages(id || ''); + const loading = isSessionMessagesLoading(id || ''); + + const handleBack = useCallback(() => { + router.back(); + }, [router]); + + const handleSendMessage = useCallback(async ( + text: string, + model?: { providerID: string; modelID: string }, + mode?: string, + attachments?: PromptAttachment[], + ) => { + if (!id) return false; + return sendPrompt(id, text, model, mode, attachments); + }, [sendPrompt, id]); + + const handleSelectModel = useCallback((key: string) => { + setSelectedModel(key || null); + }, [setSelectedModel]); + + const modes = useMemo(() => { + const list = agentModes + .filter((a) => !a.hidden && (a.mode === 'primary' || a.mode === 'all')) + .map((a) => a.name); + return list.length ? list : ['build']; + }, [agentModes]); + + return ( + + ); +} diff --git a/packages/mobile/app/connect.tsx b/packages/mobile/app/connect.tsx new file mode 100644 index 00000000000..83cbc401b3b --- /dev/null +++ b/packages/mobile/app/connect.tsx @@ -0,0 +1,26 @@ +import { useCallback } from 'react'; +import { useRouter } from 'expo-router'; +import { ConnectScreen } from '../src/screens/ConnectScreen'; +import { useOpenCode } from '../src/providers/OpenCodeProvider'; + +export default function Connect() { + const router = useRouter(); + const { serverUrl, setServerUrl, connect, connecting, error } = useOpenCode(); + + const handleConnect = useCallback(async () => { + const success = await connect(serverUrl); + if (success) { + router.replace('/(tabs)/sessions'); + } + }, [connect, serverUrl, router]); + + return ( + + ); +} diff --git a/packages/mobile/app/index.tsx b/packages/mobile/app/index.tsx new file mode 100644 index 00000000000..aedd532fb4c --- /dev/null +++ b/packages/mobile/app/index.tsx @@ -0,0 +1,12 @@ +import { Redirect } from 'expo-router'; +import { useOpenCode } from '../src/providers/OpenCodeProvider'; + +export default function Index() { + const { connected } = useOpenCode(); + + if (connected) { + return ; + } + + return ; +} diff --git a/packages/mobile/app/new-project.tsx b/packages/mobile/app/new-project.tsx new file mode 100644 index 00000000000..a6591dde872 --- /dev/null +++ b/packages/mobile/app/new-project.tsx @@ -0,0 +1,33 @@ +import { useCallback } from 'react'; +import { useRouter } from 'expo-router'; +import { NewProjectScreen } from '../src/screens/NewProjectScreen'; +import { useOpenCode } from '../src/providers/OpenCodeProvider'; + +export default function NewProject() { + const router = useRouter(); + const { refreshProjects } = useOpenCode(); + + const handleBack = useCallback(() => { + router.back(); + }, [router]); + + const handleSelectDirectory = useCallback(async (path: string) => { + console.log('Opening directory:', path); + await refreshProjects(); + router.back(); + }, [refreshProjects, router]); + + const handleCloneRepository = useCallback(async (url: string, path?: string) => { + console.log('Cloning repository:', url, 'to:', path); + await refreshProjects(); + router.back(); + }, [refreshProjects, router]); + + return ( + + ); +} diff --git a/packages/mobile/app/project/[id].tsx b/packages/mobile/app/project/[id].tsx new file mode 100644 index 00000000000..9606bb67b31 --- /dev/null +++ b/packages/mobile/app/project/[id].tsx @@ -0,0 +1,47 @@ +import { useCallback } from 'react'; +import { useRouter, useLocalSearchParams } from 'expo-router'; +import { ProjectSessionsScreen } from '../../src/screens/ProjectSessionsScreen'; +import { useOpenCode, Session } from '../../src/providers/OpenCodeProvider'; +import { getFolderName } from '../../src/utils/path'; + +export default function ProjectSessions() { + const router = useRouter(); + const { id } = useLocalSearchParams<{ id: string }>(); + const { + sessions, + sessionsLoading, + sessionsRefreshing, + projects, + refreshSessions, + createSession, + } = useOpenCode(); + + const project = projects.find((p) => p.id === id); + const projectName = project?.worktree ? getFolderName(project.worktree) : 'Project'; + + const handleSelectSession = useCallback((session: Session) => { + router.push({ pathname: '/chat/[id]', params: { id: session.id } }); + }, [router]); + + const handleCreateSession = useCallback(async () => { + if (!project?.worktree) return; + const session = await createSession(project.worktree); + if (session) { + router.push({ pathname: '/chat/[id]', params: { id: session.id } }); + } + }, [project, createSession, router]); + + return ( + + ); +} diff --git a/packages/mobile/app/settings.tsx b/packages/mobile/app/settings.tsx new file mode 100644 index 00000000000..8d08bc388d9 --- /dev/null +++ b/packages/mobile/app/settings.tsx @@ -0,0 +1,21 @@ +import { useCallback } from 'react'; +import { useRouter } from 'expo-router'; +import { SettingsScreen } from '../src/screens/SettingsScreen'; +import { useOpenCode } from '../src/providers/OpenCodeProvider'; + +export default function Settings() { + const router = useRouter(); + const { serverUrl, disconnect } = useOpenCode(); + + const handleDisconnect = useCallback(() => { + disconnect(); + router.replace('/connect'); + }, [disconnect, router]); + + return ( + + ); +} diff --git a/packages/mobile/assets/adaptive-icon.png b/packages/mobile/assets/adaptive-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6ec25bbc5a5bb88b3c99a0a51e41c9244935a6a9 GIT binary patch literal 12561 zcmeAS@N?(olHy`uVBq!ia0y~yU;#2&7&zE~RK2WrGXsOc4Nn)xkcv5PZye;k;U>U* zV26+LS5`gaH1=o5xgT15o?!Jr_vd4Ip!x@uAYBX+2_Uk8ag;L}2BYaM;T1LDG<;nM$!@(l8yl|L~*;BQfN(ENL!f#HMW%l~;%4NV(ZG?xCCW?-<>_!_qJH%nS$Em;T?K$;fp`Xu*_!`3wv{7JR8U*L84=V48C2KQ9A={FHz1m$7Pa zcsB(7+Rw=Fp!w4OyIUAo6FCFC{+lx})CBz6KU-{pf)1nC%l~W)4g6mJ%P%vDj9NY# z?4t>8G^>rcLWb{2-*>Z*JxAK^SWLJvK^k08o|1h(!G41Ez1v5Og`|rfJ0v;hF@Q_R z@;%P~9Ntyr3!nGMInm49$-9#gTrS`F$oG?Z=i|M;Hp&|n&G}T!p0I%nZw27N<@J08eAx`G1?2fTS0%tws`b$>_05_zm(G!Y>Utc>QK z(P9HQ{5D!%A`cgimY1XDC2&xAw4xZTDC(IuJahJl#}M2>Ps!(cQWjOK;W@&J?zM$^G)7!Z{X9+-bHoG`sB?E74h Na!*%3mvv4FO#trA23P<9 literal 0 HcmV?d00001 diff --git a/packages/mobile/assets/favicon.png b/packages/mobile/assets/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..e75f697b1801871ad8cd9309b05e8ffe8c6b6d01 GIT binary patch literal 1466 zcmV;r1x5OaP)F>1w{Y zBeHf{*q3<2*AtQf4s&-m0MsH$EBv51Nj=s=Appw|nd1Yi(-DKZBN$9bAlWN83A_)0 z$4U=S!XyBuAm(`t#aW=l*tHPgHRE~MrmzGWN*Eidc=$BV2uYe|Rpi@t-me&ht6I?| ze$M(9=%DxSVTwNL7B*O`z`fRE$T)18O{B^J5OHo#W%kD-}gAcJO3n1x6Q{X*TFh-d!yx?Z$G16f%*K?exQ+p ztyb%4*R_Y=)qQBLG-9hc_A|ub$th|8Sk1bi@fFe$DwUpU57nc*-z8<&dM#e3a2hB! z16wLhz7o)!MC8}$7Jv9c-X$w^Xr(M9+`Py)~O3rGmgbvjOzXjGl>h9lp*QEn%coj{`wU^_3U|=B`xxU;X3K1L?JT?0?+@K!|MWVr zmC=;rjX@CoW3kMZA^8ZAy52^R{+-YG!J5q^YP&$t9F`&J8*KzV4t3ZZZJ>~XP7}Bs z<}$a~2r_E?4rlN=(}RBkF~6rBo}Sz7#r{X49&!gODP+TcB*@uq57EII-_>qWEt44B z`5o+tysMLY*Dq^n@4_vzKRu3We5|DI+i%NV=Z|)QAl{di_@%07*qoM6N<$f(5Fv<^TWy literal 0 HcmV?d00001 diff --git a/packages/mobile/assets/icon.png b/packages/mobile/assets/icon.png new file mode 120000 index 00000000000..e84f09529c3 --- /dev/null +++ b/packages/mobile/assets/icon.png @@ -0,0 +1 @@ +../../desktop/src-tauri/icons/prod/icon.png \ No newline at end of file diff --git a/packages/mobile/assets/splash-icon.png b/packages/mobile/assets/splash-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..03d6f6b6c6727954aec1d8206222769afd178d8d GIT binary patch literal 17547 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 16.0.0" + }, + "build": { + "development": { + "developmentClient": true, + "distribution": "internal" + }, + "preview": { + "distribution": "internal", + "ios": { + "simulator": false + } + }, + "preview-apk": { + "distribution": "internal", + "android": { + "buildType": "apk" + } + }, + "production": { + "autoIncrement": true + } + }, + "submit": { + "production": {} + } +} diff --git a/packages/mobile/metro.config.js b/packages/mobile/metro.config.js new file mode 100644 index 00000000000..4233127716b --- /dev/null +++ b/packages/mobile/metro.config.js @@ -0,0 +1,32 @@ +const { getDefaultConfig } = require("expo/metro-config") +const { withUniwindConfig } = require("uniwind/metro") +const path = require("path") + +const projectRoot = __dirname +const monorepoRoot = path.resolve(projectRoot, "../..") + +const config = getDefaultConfig(projectRoot) + +config.watchFolders = [monorepoRoot] + +config.resolver.nodeModulesPaths = [ + path.resolve(projectRoot, "node_modules"), + path.resolve(monorepoRoot, "node_modules"), +] + +config.resolver.resolveRequest = (context, moduleName, platform) => { + if (moduleName.endsWith(".js")) { + const tsPath = moduleName.replace(/\.js$/, ".ts") + try { + return context.resolveRequest(context, tsPath, platform) + } catch { + return context.resolveRequest(context, moduleName, platform) + } + } + return context.resolveRequest(context, moduleName, platform) +} + +module.exports = withUniwindConfig(config, { + cssEntryFile: "./src/global.css", + dtsFile: "./uniwind-types.d.ts", +}) diff --git a/packages/mobile/package.json b/packages/mobile/package.json new file mode 100644 index 00000000000..63b5e25396b --- /dev/null +++ b/packages/mobile/package.json @@ -0,0 +1,48 @@ +{ + "name": "@opencode-ai/mobile", + "version": "1.0.0", + "main": "expo-router/entry", + "scripts": { + "start": "bunx expo start", + "android": "bunx expo run:android", + "ios": "bunx expo run:ios", + "web": "bunx expo start --web", + "typecheck": "tsc --noEmit", + "build:apk": "bunx expo prebuild --platform android --clean && cd android && ./gradlew assembleRelease" + }, + "dependencies": { + "@expo/vector-icons": "^15.0.3", + "@opencode-ai/sdk": "workspace:*", + "@react-native-async-storage/async-storage": "^2.2.0", + "babel-preset-expo": "54.0.9", + "expo": "~54.0.30", + "expo-blur": "^15.0.8", + "expo-file-system": "~19.0.21", + "expo-glass-effect": "^0.1.8", + "expo-image-picker": "17.0.10", + "expo-keep-awake": "15.0.8", + "expo-linear-gradient": "~15.0.8", + "expo-linking": "^8.0.11", + "expo-router": "~6.0.21", + "expo-status-bar": "~3.0.9", + "lucide-react-native": "^0.562.0", + "react": "19.1.0", + "react-native": "0.81.5", + "react-native-markdown-display": "^7.0.2", + "react-native-reanimated": "4.2.1", + "react-native-safe-area-context": "^5.6.2", + "react-native-screens": "~4.16.0", + "react-native-svg": "15.12.1", + "react-native-worklets": "0.7.1", + "uniwind": "1.3.2" + }, + "devDependencies": { + "@types/react": "~19.1.10", + "tailwindcss": "4.2.0", + "typescript": "~5.9.2" + }, + "overrides": { + "@types/react": "~19.1.0" + }, + "private": true +} diff --git a/packages/mobile/src/components/AnimatedFAB.tsx b/packages/mobile/src/components/AnimatedFAB.tsx new file mode 100644 index 00000000000..b644a11da31 --- /dev/null +++ b/packages/mobile/src/components/AnimatedFAB.tsx @@ -0,0 +1,104 @@ +import React from 'react'; +import { + StyleSheet, + TouchableOpacity, + Platform, +} from 'react-native'; +import Animated, { + useAnimatedStyle, + SharedValue, + interpolate, + Extrapolation, +} from 'react-native-reanimated'; +import { useSafeAreaInsets } from 'react-native-safe-area-context'; +import { Icon, IconName } from './Icon'; +import { useTheme } from '../hooks/useTheme'; +import { spacing } from '../theme'; + +// Native tab bar height varies. On iOS with NativeTabs (liquid glass), the +// bar is rendered natively and its height isn't exposed to JS. Use a generous +// value so the FAB always clears the tab bar + home indicator. +const NATIVE_TAB_BAR_HEIGHT = Platform.OS === 'ios' ? 90 : 64; +const FAB_MARGIN = spacing.lg; + +interface AnimatedFABProps { + onPress: () => void; + icon: IconName; + visible: SharedValue; + /** Set to true when rendered inside a tab screen so the FAB clears the tab bar. */ + insideTabBar?: boolean; +} + +export function AnimatedFAB({ + onPress, + icon, + visible, + insideTabBar = false, +}: AnimatedFABProps) { + const { colors: c } = useTheme(); + const insets = useSafeAreaInsets(); + + const bottomOffset = insideTabBar + ? NATIVE_TAB_BAR_HEIGHT + FAB_MARGIN + : insets.bottom + FAB_MARGIN; + + const rStyle = useAnimatedStyle(() => { + const translateY = interpolate( + visible.value, + [0, 1], + [150, 0], + Extrapolation.CLAMP + ); + + const opacity = interpolate( + visible.value, + [0, 0.5, 1], + [0, 0, 1], + Extrapolation.CLAMP + ); + + const scale = interpolate( + visible.value, + [0, 1], + [0.8, 1], + Extrapolation.CLAMP + ); + + return { + transform: [{ translateY }, { scale }], + opacity, + }; + }); + + return ( + + + + + + ); +} + +const styles = StyleSheet.create({ + container: { + position: 'absolute', + right: spacing.lg, + zIndex: 1000, + }, + fab: { + width: 56, + height: 56, + borderRadius: 28, + alignItems: 'center', + justifyContent: 'center', + elevation: 4, + shadowColor: '#000', + shadowOffset: { width: 0, height: 2 }, + shadowOpacity: 0.25, + shadowRadius: 4, + }, +}); diff --git a/packages/mobile/src/components/GlassCard.tsx b/packages/mobile/src/components/GlassCard.tsx new file mode 100644 index 00000000000..63f4623ddc2 --- /dev/null +++ b/packages/mobile/src/components/GlassCard.tsx @@ -0,0 +1,63 @@ +import React from 'react'; +import { View, StyleSheet, ViewStyle, Platform } from 'react-native'; +import { BlurView } from 'expo-blur'; +import { useTheme } from '../hooks/useTheme'; +import { radius, spacing } from '../theme'; + +// Try to import GlassView, fallback to blur if not available +let GlassView: any = null; +let canUseLiquidGlass = false; + +try { + const glassEffect = require('expo-glass-effect'); + GlassView = glassEffect.GlassView; + canUseLiquidGlass = Platform.OS === 'ios' && !!glassEffect.isLiquidGlassAvailable?.(); +} catch { + // expo-glass-effect not available or iOS < 26 +} + +interface GlassCardProps { + children: React.ReactNode; + style?: ViewStyle; + intensity?: number; +} + +export function GlassCard({ children, style, intensity = 60 }: GlassCardProps) { + const { colors: c, isDark } = useTheme(); + + if (canUseLiquidGlass && GlassView) { + return ( + + {children} + + ); + } + + // Fallback to BlurView for older iOS / Android + return ( + + + + {children} + + + ); +} + +const styles = StyleSheet.create({ + container: { + borderRadius: radius.lg, + borderWidth: 1, + overflow: 'hidden', + }, + content: { + padding: spacing.lg, + }, +}); diff --git a/packages/mobile/src/components/Icon.tsx b/packages/mobile/src/components/Icon.tsx new file mode 100644 index 00000000000..c5b3eb5ee2a --- /dev/null +++ b/packages/mobile/src/components/Icon.tsx @@ -0,0 +1,162 @@ +import React from 'react'; +import { + MessageSquare, + FolderOpen, + ChevronRight, + ChevronDown, + ChevronUp, + ChevronsDown, + Wifi, + WifiOff, + RefreshCw, + Code2, + Terminal, + User, + Bot, + Check, + Clock, + AlertCircle, + Settings, + LogOut, + Loader2, + Zap, + Hash, + FileText, + FileCode, + FilePlus, + Pencil, + Search, + Globe, + ListTodo, + Play, + Eye, + File, + FolderSearch, + SearchCode, + Circle, + Inbox, + Mic, + Send, + ArrowUp, + Plus, + X, + GitBranch, + Download, + Brain, +} from 'lucide-react-native'; +import { useTheme } from '../hooks/useTheme'; + +export type IconName = + | 'message-square' + | 'folder-open' + | 'chevron-right' + | 'chevron-down' + | 'chevron-up' + | 'chevrons-down' + | 'wifi' + | 'wifi-off' + | 'refresh' + | 'code' + | 'terminal' + | 'user' + | 'bot' + | 'check' + | 'clock' + | 'alert' + | 'settings' + | 'logout' + | 'loader' + | 'zap' + | 'hash' + | 'file-text' + | 'file-code' + | 'file-plus' + | 'pencil' + | 'search' + | 'globe' + | 'list-todo' + | 'play' + | 'eye' + | 'file' + | 'folder-search' + | 'search-code' + | 'circle' + | 'inbox' + | 'mic' + | 'send' + | 'arrow-up' + | 'plus' + | 'x' + | 'git-branch' + | 'download' + | 'brain'; + +interface IconProps { + name: IconName; + size?: number; + color?: string; + strokeWidth?: number; +} + +const iconMap = { + 'message-square': MessageSquare, + 'folder-open': FolderOpen, + 'chevron-right': ChevronRight, + 'chevron-down': ChevronDown, + 'chevron-up': ChevronUp, + 'chevrons-down': ChevronsDown, + 'wifi': Wifi, + 'wifi-off': WifiOff, + 'refresh': RefreshCw, + 'code': Code2, + 'terminal': Terminal, + 'user': User, + 'bot': Bot, + 'check': Check, + 'clock': Clock, + 'alert': AlertCircle, + 'settings': Settings, + 'logout': LogOut, + 'loader': Loader2, + 'zap': Zap, + 'hash': Hash, + 'file-text': FileText, + 'file-code': FileCode, + 'file-plus': FilePlus, + 'pencil': Pencil, + 'search': Search, + 'globe': Globe, + 'list-todo': ListTodo, + 'play': Play, + 'eye': Eye, + 'file': File, + 'folder-search': FolderSearch, + 'search-code': SearchCode, + 'circle': Circle, + 'inbox': Inbox, + 'mic': Mic, + 'send': Send, + 'arrow-up': ArrowUp, + 'plus': Plus, + 'x': X, + 'git-branch': GitBranch, + 'download': Download, + 'brain': Brain, +}; + +export const Icon = React.memo(function Icon({ name, size = 24, color, strokeWidth = 2 }: IconProps) { + const { colors: c } = useTheme(); + const IconComponent = iconMap[name]; + + if (!IconComponent) { + return null; + } + + return ( + + ); +}); diff --git a/packages/mobile/src/components/Markdown.tsx b/packages/mobile/src/components/Markdown.tsx new file mode 100644 index 00000000000..afe0c51addd --- /dev/null +++ b/packages/mobile/src/components/Markdown.tsx @@ -0,0 +1,179 @@ +import React, { useMemo } from 'react'; +import { Platform, StyleSheet } from 'react-native'; +import MarkdownDisplay from 'react-native-markdown-display'; +import { useTheme } from '../hooks/useTheme'; +import { typography, spacing, radius } from '../theme'; + +interface MarkdownProps { + children: string; + isUser?: boolean; +} + +// Structural styles that don't depend on theme/isUser +const baseStyles = StyleSheet.create({ + heading1: { + fontSize: 24, + fontWeight: '600', + marginTop: spacing.lg, + marginBottom: spacing.sm, + lineHeight: 30, + }, + heading2: { + fontSize: 20, + fontWeight: '600', + marginTop: spacing.lg, + marginBottom: spacing.sm, + lineHeight: 26, + }, + heading3: { + fontSize: 18, + fontWeight: '600', + marginTop: spacing.md, + marginBottom: spacing.sm, + lineHeight: 24, + }, + heading4: { + fontSize: 16, + fontWeight: '600', + marginTop: spacing.md, + marginBottom: spacing.xs, + }, + paragraph: { + marginTop: 0, + marginBottom: spacing.sm, + }, + strong: { + fontWeight: '600', + }, + em: { + fontStyle: 'italic', + }, + list_item: { + marginVertical: 3, + }, + bullet_list: { + marginVertical: spacing.sm, + }, + ordered_list: { + marginVertical: spacing.sm, + }, + hr: { + height: 1, + marginVertical: spacing.lg, + }, +}); + +const monoFamily = Platform.select({ ios: 'Menlo', android: 'monospace', default: 'monospace' }); + +export const Markdown = React.memo(function Markdown({ children, isUser = false }: MarkdownProps) { + const { colors: c, isDark } = useTheme(); + + const markdownStyles = useMemo(() => { + const textColor = isUser ? '#ffffff' : c.text; + const secondaryColor = isUser ? 'rgba(255,255,255,0.7)' : c.textSecondary; + const codeBackground = isUser + ? 'rgba(0,0,0,0.2)' + : (isDark ? 'rgba(255,255,255,0.05)' : 'rgba(0,0,0,0.04)'); + const blockquoteBorder = isUser ? 'rgba(255,255,255,0.4)' : c.accent; + + return { + body: { + color: textColor, + ...typography.body, + }, + heading1: { ...baseStyles.heading1, color: textColor }, + heading2: { ...baseStyles.heading2, color: textColor }, + heading3: { ...baseStyles.heading3, color: textColor }, + heading4: { ...baseStyles.heading4, color: textColor }, + paragraph: baseStyles.paragraph, + strong: baseStyles.strong, + em: baseStyles.em, + link: { + color: isUser ? '#ffffff' : c.accent, + textDecorationLine: 'underline' as const, + }, + blockquote: { + backgroundColor: isUser ? 'rgba(255,255,255,0.1)' : c.accentSubtle, + borderLeftColor: blockquoteBorder, + borderLeftWidth: 3, + borderRadius: radius.sm, + paddingHorizontal: spacing.md, + paddingVertical: spacing.sm, + marginVertical: spacing.sm, + }, + code_inline: { + fontFamily: monoFamily, + fontSize: 14, + backgroundColor: codeBackground, + color: isUser ? '#ffffff' : c.accent, + paddingHorizontal: 6, + paddingVertical: 2, + borderRadius: 4, + }, + code_block: { + fontFamily: monoFamily, + fontSize: 13, + backgroundColor: codeBackground, + color: textColor, + padding: spacing.md, + borderRadius: radius.md, + marginVertical: spacing.sm, + overflow: 'hidden' as const, + lineHeight: 20, + }, + fence: { + fontFamily: monoFamily, + fontSize: 13, + backgroundColor: codeBackground, + color: textColor, + padding: spacing.md, + borderRadius: radius.md, + marginVertical: spacing.sm, + overflow: 'hidden' as const, + lineHeight: 20, + }, + list_item: baseStyles.list_item, + bullet_list: baseStyles.bullet_list, + ordered_list: baseStyles.ordered_list, + bullet_list_icon: { + color: secondaryColor, + marginRight: spacing.sm, + fontSize: 14, + }, + ordered_list_icon: { + color: secondaryColor, + marginRight: spacing.sm, + fontSize: 14, + }, + table: { + borderWidth: 1, + borderColor: isUser ? 'rgba(255,255,255,0.2)' : c.border, + borderRadius: radius.md, + marginVertical: spacing.sm, + overflow: 'hidden' as const, + }, + thead: { + backgroundColor: isUser ? 'rgba(255,255,255,0.1)' : c.bgHover, + }, + th: { + padding: spacing.sm, + fontWeight: '600' as const, + }, + td: { + padding: spacing.sm, + borderTopWidth: 1, + borderColor: isUser ? 'rgba(255,255,255,0.1)' : c.divider, + }, + hr: { + ...baseStyles.hr, + backgroundColor: isUser ? 'rgba(255,255,255,0.2)' : c.divider, + }, + }; + }, [isUser, isDark, c]); + + return ( + + {children} + + ); +}); diff --git a/packages/mobile/src/components/chat/MessageBlock.tsx b/packages/mobile/src/components/chat/MessageBlock.tsx new file mode 100644 index 00000000000..11124b77aec --- /dev/null +++ b/packages/mobile/src/components/chat/MessageBlock.tsx @@ -0,0 +1,281 @@ +import React, { useMemo, useState } from 'react'; +import { Image, Text, TouchableOpacity, useWindowDimensions, View } from 'react-native'; +import { withUniwind } from 'uniwind'; +import { Markdown } from '../Markdown'; +import { Icon, IconName } from '../Icon'; +import type { MessageWithParts } from '../../providers/OpenCodeProvider'; + +const WView = withUniwind(View); +const WText = withUniwind(Text); +const WTouchableOpacity = withUniwind(TouchableOpacity); + +function getToolIcon(name: string): IconName { + const map: Record = { + read: 'file-text', + write: 'file-plus', + edit: 'pencil', + bash: 'terminal', + glob: 'folder-search', + grep: 'search', + list: 'folder-open', + todowrite: 'list-todo', + todoread: 'list-todo', + task: 'play', + webfetch: 'globe', + websearch: 'globe', + codesearch: 'search', + }; + return map[name] || 'zap'; +} + +function clean(text?: string) { + if (!text) return ''; + return text.replace(/<\/?file>/g, '').replace(/^\d{5}\| /gm, '').trim().slice(0, 800); +} + +function imageMime(mime?: string) { + if (!mime) return false; + return mime.startsWith('image/'); +} + +function imageURL(url: string, serverURL: string) { + if (url.startsWith('http://') || url.startsWith('https://') || url.startsWith('data:')) return url; + const base = serverURL.endsWith('/') ? serverURL.slice(0, -1) : serverURL; + const path = url.startsWith('/') ? url : `/${url}`; + return `${base}${path}`; +} + +function StripeBlock({ + colors, + stripe, + icon, + title, + detail, + showHeader, + expanded, + expandable, + onToggle, + children, +}: { + colors: any; + stripe: string; + icon: IconName; + title: string; + detail?: string; + showHeader?: boolean; + expanded: boolean; + expandable: boolean; + onToggle: () => void; + children?: React.ReactNode; +}) { + const header = showHeader ?? true; + + return ( + + {header ? ( + + + {title} + {detail ? {detail} : } + {expandable ? : null} + + ) : null} + {children && (!expandable || expanded) ? ( + {children} + ) : null} + + ); +} + +function ToolBlock({ part, colors }: { part: any; colors: any }) { + const [expanded, setExpanded] = useState(false); + const status = typeof part.state === 'object' ? part.state?.status : part.state; + const done = status === 'completed' || status === 'complete' || status === 'result'; + const tool = part.tool || part.toolName || 'tool'; + const icon = getToolIcon(tool); + const detail = part.state?.input?.filePath || part.state?.input?.description || part.state?.input?.pattern || ''; + const command = part.state?.input?.command; + const output = clean(part.state?.output); + const todos = part.state?.input?.todos; + const hasExpanded = Boolean(command || output || todos); + + return ( + hasExpanded && setExpanded((prev) => !prev)} + > + {command ? ( + + Command + + {command} + + + ) : null} + {Array.isArray(todos) ? ( + + Todos + {todos.slice(0, 6).map((todo: any, i: number) => ( + + + {todo.content} + + ))} + + ) : null} + {output ? ( + + Output + {output} + + ) : null} + + ); +} + +function ImageBlock({ part, colors, serverURL }: { part: any; colors: any; serverURL: string }) { + const [error, setError] = useState(false); + const { width } = useWindowDimensions(); + const url = part.url ? imageURL(part.url, serverURL) : ''; + + if (!url || error) { + return ( + + + Image + + ); + } + + return ( + setError(true)} + style={{ width: 200, height: 200, borderRadius: 8, maxWidth: width - 40, maxHeight: 300 }} + /> + ); +} + +function ReasoningBlock({ + id, + part, + colors, + expanded, + onToggle, +}: { + id: string; + part: any; + colors: any; + expanded: boolean; + onToggle: (id: string) => void; +}) { + const raw = String(part.text || '').trim(); + const lines = raw.split(/\r?\n+/).map((line) => line.trim()).filter(Boolean); + const titleLine = lines[0] || 'thinking'; + const heading = titleLine + .replace(/^#+\s+/, '') + .replace(/^\*\*(.*?)\*\*$/, '$1') + .trim() || 'thinking'; + const body = lines + .slice(1) + .join('\n') + .replace(/\*\*(.*?)\*\*/g, '$1') + .trim(); + const detail = !expanded && body ? (body.length > 100 ? `${body.slice(0, 97)}...` : body) : undefined; + + return ( + onToggle(id)} + > + {body ? {body} : null} + + ); +} + +export function MessageBlock({ + message, + colors, + serverURL, + expandedReasoning, + onToggleReasoning, +}: { + message: MessageWithParts; + colors: any; + serverURL: string; + expandedReasoning: Record; + onToggleReasoning: (id: string) => void; +}) { + const isUser = message.info.role === 'user'; + + const data = useMemo(() => { + const text = message.parts + .filter((p) => p.type === 'text' && (p as any).text?.trim()) + .map((p) => (p as any).text) + .join('\n\n'); + const tools = message.parts.filter((p) => p.type === 'tool'); + const images = message.parts.filter((p) => p.type === 'file' && imageMime((p as any).mime)); + const reasoning = message.parts.filter((p) => p.type === 'reasoning' && (p as any).text?.trim()); + return { text, tools, images, reasoning }; + }, [message.parts]); + + if (!data.text && data.tools.length === 0 && data.images.length === 0 && data.reasoning.length === 0) return null; + + if (isUser) { + return ( + + + + {data.images.length > 0 ? ( + + {data.images.map((part, i) => )} + + ) : null} + {data.text ? {data.text} : null} + + + ); + } + + return ( + + {data.reasoning.length > 0 ? data.reasoning.map((part, i) => { + const id = (part as any).id ?? `${message.info.id}-reasoning-${i}`; + return ; + }) : null} + + {data.text || data.images.length > 0 ? ( + + + + {data.images.length > 0 ? ( + + {data.images.map((part, i) => )} + + ) : null} + {data.text ? {data.text} : null} + + + ) : null} + + {data.tools.length > 0 ? ( + + {data.tools.map((part, i) => )} + + ) : null} + + ); +} diff --git a/packages/mobile/src/components/ui/EmptyState.tsx b/packages/mobile/src/components/ui/EmptyState.tsx new file mode 100644 index 00000000000..517d26b1908 --- /dev/null +++ b/packages/mobile/src/components/ui/EmptyState.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { Text, View } from 'react-native'; +import { withUniwind } from 'uniwind'; +import { Icon, type IconName } from '../Icon'; +import { useTheme } from '../../hooks/useTheme'; + +const WView = withUniwind(View); +const WText = withUniwind(Text); + +export function EmptyState({ + icon, + title, + description, + accent, + action, +}: { + icon: IconName; + title: string; + description: string; + accent: string; + action?: React.ReactNode; +}) { + const { colors } = useTheme(); + + return ( + + + + + {title} + {description} + {action ? {action} : null} + + ); +} diff --git a/packages/mobile/src/components/ui/ScreenHeader.tsx b/packages/mobile/src/components/ui/ScreenHeader.tsx new file mode 100644 index 00000000000..6d351ec4e78 --- /dev/null +++ b/packages/mobile/src/components/ui/ScreenHeader.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import { Text, TouchableOpacity, View } from 'react-native'; +import { withUniwind } from 'uniwind'; +import { useTheme } from '../../hooks/useTheme'; + +const WView = withUniwind(View); +const WText = withUniwind(Text); +const WTouchableOpacity = withUniwind(TouchableOpacity); + +export function ScreenHeader({ + title, + subtitle, + right, + onRightPress, +}: { + title: string; + subtitle?: string; + right?: React.ReactNode; + onRightPress?: () => void; +}) { + const { colors } = useTheme(); + + return ( + + + {title} + {subtitle ? {subtitle} : null} + + {right ? ( + + {right} + + ) : null} + + ); +} diff --git a/packages/mobile/src/global.css b/packages/mobile/src/global.css new file mode 100644 index 00000000000..44f2168fdcd --- /dev/null +++ b/packages/mobile/src/global.css @@ -0,0 +1,2 @@ +@import "tailwindcss"; +@import "uniwind"; diff --git a/packages/mobile/src/hooks/useOpenCode.ts b/packages/mobile/src/hooks/useOpenCode.ts new file mode 100644 index 00000000000..65c2b04749e --- /dev/null +++ b/packages/mobile/src/hooks/useOpenCode.ts @@ -0,0 +1,14 @@ +// Re-export everything from the provider for backwards compatibility +export { useOpenCode } from '../providers/OpenCodeProvider'; +export type { + Session, + SessionWithPreview, + Project, + Message, + MessagePart, + MessageWithParts, + OpenCodeClient, + ProviderModel, + ProviderData, + AgentMode, +} from '../providers/OpenCodeProvider'; diff --git a/packages/mobile/src/hooks/useTheme.ts b/packages/mobile/src/hooks/useTheme.ts new file mode 100644 index 00000000000..2e67e8c8031 --- /dev/null +++ b/packages/mobile/src/hooks/useTheme.ts @@ -0,0 +1,13 @@ +import { useColorScheme } from 'react-native'; +import { useMemo } from 'react'; +import { createTheme, colors, Colors } from '../theme'; + +export function useTheme() { + const colorScheme = useColorScheme(); + const isDark = colorScheme === 'dark'; + + const theme = useMemo(() => createTheme(isDark), [isDark]); + const c: Colors = isDark ? colors.dark : colors.light; + + return useMemo(() => ({ theme, colors: c, isDark }), [theme, c, isDark]); +} diff --git a/packages/mobile/src/providers/OpenCodeProvider.tsx b/packages/mobile/src/providers/OpenCodeProvider.tsx new file mode 100644 index 00000000000..d87d0cc448c --- /dev/null +++ b/packages/mobile/src/providers/OpenCodeProvider.tsx @@ -0,0 +1,523 @@ +import React, { createContext, useContext, useState, useCallback, useRef, useEffect, useMemo, ReactNode } from 'react'; +import AsyncStorage from '@react-native-async-storage/async-storage'; +import { fetch as streamingFetch } from 'expo/fetch'; +import { createOpencodeClient } from '@opencode-ai/sdk/v2/client'; +import type { Project, Session, Message, Part } from '@opencode-ai/sdk/v2/client'; +import { applyMessageEvent, loadMessages, type MessageStore } from '@opencode-ai/sdk/event-reducer'; + +const SERVER_URL_KEY = 'opencode_server_url'; +const SELECTED_MODEL_KEY = 'opencode_selected_model'; +const RECENT_MODELS_KEY = 'opencode_recent_models'; +const MAX_RECENT_MODELS = 5; + +export type OpenCodeClient = ReturnType; +export type { Project, Session, Message, Part as MessagePart }; + +export interface SessionWithPreview extends Session { + preview?: string; +} + +export interface MessageWithParts { + info: Message; + parts: Part[]; +} + +export interface PromptAttachment { + mime: string; + url: string; + filename?: string; +} + +export interface ProviderModel { + id: string; + name: string; + providerID: string; + providerName: string; +} + +export interface ProviderData { + all: any[]; + connected: string[]; + default: Record; +} + +export interface AgentMode { + name: string; + description?: string; + mode: 'subagent' | 'primary' | 'all'; + hidden?: boolean; +} + +interface OpenCodeContextValue { + connected: boolean; + connecting: boolean; + error: string | null; + serverUrl: string; + connect: (url?: string) => Promise; + disconnect: () => void; + setServerUrl: (url: string) => void; + sessions: SessionWithPreview[]; + sessionsLoading: boolean; + sessionsRefreshing: boolean; + refreshSessions: () => void; + getSessionMessages: (sessionId: string) => MessageWithParts[]; + isSessionMessagesLoading: (sessionId: string) => boolean; + refreshSessionMessages: (sessionId: string) => void; + subscribeToSession: (sessionId: string) => void; + unsubscribeFromSession: () => void; + activeSessionId: string | null; + sendPrompt: ( + sessionId: string, + text: string, + model?: { providerID: string; modelID: string }, + mode?: string, + attachments?: PromptAttachment[], + ) => Promise; + isSending: boolean; + createSession: (projectID?: string, parentID?: string) => Promise; + projects: Project[]; + projectsLoading: boolean; + refreshProjects: () => void; + providerData: ProviderData | null; + agentModes: AgentMode[]; + selectedModel: string | null; + setSelectedModel: (model: string | null) => void; + recentModelKeys: string[]; + client: OpenCodeClient | null; +} + +const OpenCodeContext = createContext(null); + +function extractPreview(parts: Part[]): string { + for (let i = parts.length - 1; i >= 0; i--) { + const part = parts[i] as any; + if (part.type === 'text' && part.text?.trim()) { + const text = part.text.trim(); + return text.length > 60 ? text.substring(0, 57) + '...' : text; + } + } + return ''; +} + +function getMessages(store: MessageStore, sessionId: string): MessageWithParts[] { + const messages = store.messages[sessionId]; + if (!messages) return []; + return messages.map((info) => ({ + info, + parts: store.parts[info.id] ?? [], + })); +} + +function headerDirectory(directory: string) { + return /^[\x00-\x7F]*$/.test(directory) ? directory : encodeURIComponent(directory); +} + +interface OpenCodeProviderProps { + children: ReactNode; +} + +export function OpenCodeProvider({ children }: OpenCodeProviderProps) { + const [connected, setConnected] = useState(false); + const [connecting, setConnecting] = useState(false); + const [error, setError] = useState(null); + const [serverUrl, setServerUrlState] = useState(''); + const clientRef = useRef(null); + const connectionIdRef = useRef(0); + + const setServerUrl = useCallback((url: string) => { + setServerUrlState(url); + AsyncStorage.setItem(SERVER_URL_KEY, url).catch(() => {}); + }, []); + + const [sessions, setSessions] = useState([]); + const [sessionsLoading, setSessionsLoading] = useState(false); + const [sessionsRefreshing, setSessionsRefreshing] = useState(false); + + const [messageStore, setMessageStore] = useState({ messages: {}, parts: {} }); + const [messagesLoading, setMessagesLoading] = useState>(new Set()); + + const [projects, setProjects] = useState([]); + const [projectsLoading, setProjectsLoading] = useState(false); + + const [providerData, setProviderData] = useState(null); + const [agentModes, setAgentModes] = useState([]); + const [selectedModel, setSelectedModelState] = useState(null); + const [recentModelKeys, setRecentModelKeys] = useState([]); + + const setSelectedModel = useCallback((model: string | null) => { + setSelectedModelState(model); + if (model) { + AsyncStorage.setItem(SELECTED_MODEL_KEY, model).catch(() => {}); + setRecentModelKeys(prev => { + const next = [model, ...prev.filter(k => k !== model)].slice(0, MAX_RECENT_MODELS); + AsyncStorage.setItem(RECENT_MODELS_KEY, JSON.stringify(next)).catch(() => {}); + return next; + }); + return; + } + AsyncStorage.removeItem(SELECTED_MODEL_KEY).catch(() => {}); + }, []); + + const [activeSessionId, setActiveSessionId] = useState(null); + const sseAbortRef = useRef(null); + const [isSending, setIsSending] = useState(false); + + const connect = useCallback(async (url?: string) => { + const targetUrl = url || serverUrl; + const connectionId = ++connectionIdRef.current; + setConnecting(true); + setError(null); + + try { + const client = createOpencodeClient({ + baseUrl: targetUrl, + fetch: (input: any, init?: any) => fetch(input, init), + }); + + const listPromise = client.session.list(); + const timeoutPromise = new Promise((_, reject) => + setTimeout(() => reject(new Error('Connection timed out')), 5000), + ); + await Promise.race([listPromise, timeoutPromise]); + + if (connectionId !== connectionIdRef.current) return false; + clientRef.current = client; + setServerUrl(targetUrl); + setConnected(true); + setConnecting(false); + return true; + } catch (err) { + if (connectionId !== connectionIdRef.current) return false; + setError((err as Error).message); + setConnected(false); + setConnecting(false); + return false; + } + }, [serverUrl]); + + useEffect(() => { + (async () => { + try { + const [savedUrl, savedModel, savedRecents] = await Promise.all([ + AsyncStorage.getItem(SERVER_URL_KEY), + AsyncStorage.getItem(SELECTED_MODEL_KEY), + AsyncStorage.getItem(RECENT_MODELS_KEY), + ]); + if (savedModel) setSelectedModelState(savedModel); + if (savedRecents) try { setRecentModelKeys(JSON.parse(savedRecents)); } catch {} + if (savedUrl) connect(savedUrl); + } catch {} + })(); + }, []); + + const disconnect = useCallback(() => { + sseAbortRef.current?.abort(); + sseAbortRef.current = null; + clientRef.current = null; + setConnected(false); + setActiveSessionId(null); + setSessions([]); + setMessageStore({ messages: {}, parts: {} }); + setProjects([]); + }, []); + + const fetchSessions = useCallback(async (isRefresh = false) => { + if (!clientRef.current) return; + if (isRefresh) setSessionsRefreshing(true); + else setSessionsLoading(true); + + try { + const result = await clientRef.current.session.list(); + const data = (result.data ?? []) as Session[]; + data.sort((a, b) => (b.time?.updated ?? b.time?.created ?? 0) - (a.time?.updated ?? a.time?.created ?? 0)); + setSessions(data.map(s => ({ ...s, preview: '' }))); + } catch (err) { + setError((err as Error).message); + } finally { + setSessionsLoading(false); + setSessionsRefreshing(false); + } + }, []); + + const refreshSessions = useCallback(() => fetchSessions(true), [fetchSessions]); + + useEffect(() => { + if (connected) fetchSessions(); + }, [connected, fetchSessions]); + + const getSessionMessagesForSession = useCallback((sessionId: string): MessageWithParts[] => { + return getMessages(messageStore, sessionId); + }, [messageStore]); + + const isSessionMessagesLoading = useCallback((sessionId: string): boolean => { + return messagesLoading.has(sessionId); + }, [messagesLoading]); + + const fetchSessionMessages = useCallback(async (sessionId: string) => { + if (!clientRef.current) return; + const directory = sessions.find(s => s.id === sessionId)?.directory; + setMessagesLoading(prev => new Set(prev).add(sessionId)); + + try { + const result = await clientRef.current.session.messages({ + sessionID: sessionId, + ...(directory && { directory }), + }); + const data = (result.data ?? []) as MessageWithParts[]; + setMessageStore(prev => loadMessages(prev, sessionId, data)); + } catch (err) { + setError((err as Error).message); + } finally { + setMessagesLoading(prev => { + const next = new Set(prev); + next.delete(sessionId); + return next; + }); + } + }, [sessions]); + + const refreshSessionMessages = useCallback((sessionId: string) => { + fetchSessionMessages(sessionId); + }, [fetchSessionMessages]); + + const subscribeToSession = useCallback((sessionId: string) => { + if (!clientRef.current) return; + + sseAbortRef.current?.abort(); + setActiveSessionId(sessionId); + const directory = sessions.find(s => s.id === sessionId)?.directory; + + fetchSessionMessages(sessionId); + + const abort = new AbortController(); + sseAbortRef.current = abort; + const baseUrl = serverUrl.endsWith('/') ? serverUrl.slice(0, -1) : serverUrl; + + (async () => { + if (__DEV__) console.log('[SSE] Subscribing for session', sessionId); + + while (!abort.signal.aborted) { + try { + const response = await streamingFetch(`${baseUrl}/event`, { + headers: { + Accept: 'text/event-stream', + ...(directory && { 'x-opencode-directory': headerDirectory(directory) }), + }, + signal: abort.signal, + }); + if (!response.ok) throw new Error(`SSE HTTP ${response.status}`); + + const reader = response.body?.getReader(); + if (!reader) throw new Error('No response body reader'); + + const decoder = new TextDecoder(); + let buffer = ''; + + while (!abort.signal.aborted) { + const { done, value } = await reader.read(); + if (done) break; + + buffer += decoder.decode(value, { stream: true }); + const chunks = buffer.split('\n\n'); + buffer = chunks.pop() ?? ''; + + for (const chunk of chunks) { + const dataLine = chunk.split('\n').find(l => l.startsWith('data:')); + if (!dataLine) continue; + const json = dataLine.slice(5).trim(); + if (!json) continue; + + try { + const eventData = JSON.parse(json); + const event = eventData?.payload ?? eventData; + const props = event?.properties; + const evtSessionId = + props?.sessionID ?? + props?.info?.sessionID ?? + props?.part?.sessionID; + + if (evtSessionId && evtSessionId !== sessionId) continue; + + setMessageStore(prev => applyMessageEvent(prev, event) ?? prev); + } catch { + // skip malformed JSON + } + } + } + } catch (err) { + if (abort.signal.aborted) break; + if (__DEV__) console.log('[SSE] Reconnecting in 3s...', (err as Error).message); + await new Promise(r => setTimeout(r, 3000)); + } + } + })(); + }, [serverUrl, sessions, fetchSessionMessages]); + + const unsubscribeFromSession = useCallback(() => { + sseAbortRef.current?.abort(); + sseAbortRef.current = null; + setActiveSessionId(null); + }, []); + + const sendPrompt = useCallback(async ( + sessionId: string, + text: string, + model?: { providerID: string; modelID: string }, + mode?: string, + attachments?: PromptAttachment[], + ): Promise => { + if (!clientRef.current) return false; + const trimmed = text.trim(); + const files = (attachments ?? []).flatMap((item) => { + if (!item.mime || !item.url) return []; + return [{ + type: 'file' as const, + mime: item.mime, + url: item.url, + ...(item.filename && { filename: item.filename }), + }]; + }); + const parts = trimmed + ? [...files, { type: 'text' as const, text: trimmed }] + : files; + if (!parts.length) return false; + const directory = sessions.find(s => s.id === sessionId)?.directory; + setIsSending(true); + + try { + await clientRef.current.session.promptAsync({ + sessionID: sessionId, + ...(directory && { directory }), + parts, + ...(model && { model }), + ...(mode && { agent: mode }), + }, { throwOnError: true }); + } catch (err) { + if (__DEV__) console.log('[OpenCode] promptAsync failed, trying prompt fallback', (err as any)?.message || err); + + try { + clientRef.current.session.prompt({ + sessionID: sessionId, + ...(directory && { directory }), + parts, + ...(model && { model }), + ...(mode && { agent: mode }), + }, { throwOnError: true }).catch((fallbackErr: any) => { + const message = fallbackErr?.data?.message || fallbackErr?.message || String(fallbackErr); + setError(message); + }); + } catch (fallbackErr) { + const error = fallbackErr as any; + setError(error?.data?.message || error?.message || 'Failed to send message'); + return false; + } + } finally { + setIsSending(false); + } + + fetchSessionMessages(sessionId); + return true; + }, [fetchSessionMessages, sessions]); + + const createSession = useCallback(async (directory?: string, parentID?: string): Promise => { + if (!clientRef.current) return null; + try { + const result = await clientRef.current.session.create( + { parentID, directory }, + { throwOnError: true }, + ); + const newSession = result.data as Session; + if (newSession) { + setSessions((prev) => { + const next = prev.some((s) => s.id === newSession.id) + ? prev + : [{ ...newSession, preview: '' }, ...prev]; + next.sort((a, b) => (b.time?.updated ?? b.time?.created ?? 0) - (a.time?.updated ?? a.time?.created ?? 0)); + return next; + }); + refreshSessions(); + return newSession; + } + return null; + } catch (err) { + const error = err as any; + setError(error?.data?.message || error?.message || 'Failed to create session'); + return null; + } + }, [refreshSessions]); + + const fetchProjects = useCallback(async () => { + if (!clientRef.current) return; + setProjectsLoading(true); + try { + const result = await clientRef.current.project.list(); + const data = (result.data ?? []) as Project[]; + data.sort((a, b) => ((b as any).time?.updated ?? (b as any).time?.created ?? 0) - ((a as any).time?.updated ?? (a as any).time?.created ?? 0)); + setProjects(data); + } catch (err) { + setError((err as Error).message); + } finally { + setProjectsLoading(false); + } + }, []); + + const refreshProjects = useCallback(() => fetchProjects(), [fetchProjects]); + + const fetchProviders = useCallback(async () => { + if (!clientRef.current) return; + try { + const result = await clientRef.current.provider.list(); + if (result.data) setProviderData(result.data as ProviderData); + } catch {} + }, []); + + const fetchAgents = useCallback(async () => { + if (!clientRef.current) return; + try { + const result = await clientRef.current.app.agents(); + const data = (result.data ?? []) as AgentMode[]; + setAgentModes(data); + } catch {} + }, []); + + useEffect(() => { + if (connected) { fetchProjects(); fetchProviders(); fetchAgents(); } + }, [connected, fetchProjects, fetchProviders, fetchAgents]); + + useEffect(() => () => { sseAbortRef.current?.abort(); }, []); + + const value = useMemo(() => ({ + connected, connecting, error, serverUrl, + connect, disconnect, setServerUrl, + sessions, sessionsLoading, sessionsRefreshing, refreshSessions, + getSessionMessages: getSessionMessagesForSession, + isSessionMessagesLoading, + refreshSessionMessages, + subscribeToSession, unsubscribeFromSession, activeSessionId, + sendPrompt, isSending, createSession, + projects, projectsLoading, refreshProjects, + providerData, agentModes, selectedModel, setSelectedModel, recentModelKeys, + client: clientRef.current, + }), [ + connected, connecting, error, serverUrl, + connect, disconnect, setServerUrl, + sessions, sessionsLoading, sessionsRefreshing, refreshSessions, + getSessionMessagesForSession, isSessionMessagesLoading, refreshSessionMessages, + subscribeToSession, unsubscribeFromSession, activeSessionId, + sendPrompt, isSending, createSession, + projects, projectsLoading, refreshProjects, + providerData, agentModes, selectedModel, setSelectedModel, recentModelKeys, + ]); + + return ( + + {children} + + ); +} + +export function useOpenCode() { + const context = useContext(OpenCodeContext); + if (!context) throw new Error('useOpenCode must be used within an OpenCodeProvider'); + return context; +} diff --git a/packages/mobile/src/screens/ChatScreen.tsx b/packages/mobile/src/screens/ChatScreen.tsx new file mode 100644 index 00000000000..97265f5ba27 --- /dev/null +++ b/packages/mobile/src/screens/ChatScreen.tsx @@ -0,0 +1,568 @@ +import React, { useCallback, useMemo, useRef, useState } from 'react'; +import { + ActivityIndicator, + FlatList, + Image, + Keyboard, + KeyboardAvoidingView, + NativeScrollEvent, + NativeSyntheticEvent, + Platform, + ScrollView, + Text, + TextInput, + TouchableOpacity, + View, +} from 'react-native'; +import { useSafeAreaInsets } from 'react-native-safe-area-context'; +import { withUniwind } from 'uniwind'; +import { useTheme } from '../hooks/useTheme'; +import { Icon } from '../components/Icon'; +import { EmptyState } from '../components/ui/EmptyState'; +import { MessageBlock } from '../components/chat/MessageBlock'; +import * as ImagePicker from 'expo-image-picker'; +import * as FileSystem from 'expo-file-system/legacy'; +import type { MessageWithParts, PromptAttachment, ProviderModel, Session } from '../providers/OpenCodeProvider'; + +const WView = withUniwind(View); +const WText = withUniwind(Text); +const WTouchableOpacity = withUniwind(TouchableOpacity); +const WKeyboardAvoidingView = withUniwind(KeyboardAvoidingView); +const WTextInput = withUniwind(TextInput); +const WScrollView = withUniwind(ScrollView); +const WImage = withUniwind(Image); + +interface ChatScreenProps { + session: Session; + messages: MessageWithParts[]; + loading: boolean; + serverUrl: string; + error?: string | null; + models: ProviderModel[]; + modes: string[]; + branches: Session[]; + recentModelKeys: string[]; + selectedModel: string | null; + onSelectModel: (modelKey: string) => void; + onBack: () => void; + onSendMessage: ( + text: string, + model?: { providerID: string; modelID: string }, + mode?: string, + attachments?: PromptAttachment[], + ) => Promise; + onCreateBranch: () => void; + onOpenBranch: (sessionId: string) => void; + isSending: boolean; +} + +export function ChatScreen({ + session, + messages, + loading, + serverUrl, + error, + models, + modes, + branches, + recentModelKeys, + selectedModel, + onSelectModel, + onBack, + onSendMessage, + onCreateBranch, + onOpenBranch, + isSending, +}: ChatScreenProps) { + const { colors } = useTheme(); + const insets = useSafeAreaInsets(); + const [showScrollButton, setShowScrollButton] = useState(false); + const [inputText, setInputText] = useState(''); + const [showModelPicker, setShowModelPicker] = useState(false); + const [showModePicker, setShowModePicker] = useState(false); + const [showBranchPicker, setShowBranchPicker] = useState(false); + const [keyboardHeight, setKeyboardHeight] = useState(0); + const [attachments, setAttachments] = useState([]); + const [modelSearch, setModelSearch] = useState(''); + const [selectedMode, setSelectedMode] = useState(''); + const [expandedReasoning, setExpandedReasoning] = useState>({}); + const flatListRef = useRef>(null); + const atBottomRef = useRef(true); + + React.useEffect(() => { + if (!modes.length) return; + setSelectedMode((prev) => (prev && modes.includes(prev) ? prev : modes[0])); + }, [modes]); + + React.useEffect(() => { + if (Platform.OS !== 'android') return; + const show = Keyboard.addListener('keyboardDidShow', (event) => { + setKeyboardHeight(event.endCoordinates.height); + }); + const hide = Keyboard.addListener('keyboardDidHide', () => { + setKeyboardHeight(0); + }); + return () => { + show.remove(); + hide.remove(); + }; + }, []); + + const selectedModelObj = useMemo(() => { + if (!selectedModel) return undefined; + const model = models.find((item) => `${item.providerID}/${item.id}` === selectedModel); + if (!model) return undefined; + return { providerID: model.providerID, modelID: model.id }; + }, [selectedModel, models]); + + const selectedModelLabel = useMemo(() => { + if (!selectedModel) return 'Server Default'; + const model = models.find((item) => `${item.providerID}/${item.id}` === selectedModel); + return model?.name || selectedModel.split('/').pop() || 'Server Default'; + }, [selectedModel, models]); + + const selectedModelVendor = useMemo(() => { + if (!selectedModel) return ''; + const model = models.find((item) => `${item.providerID}/${item.id}` === selectedModel); + return model?.providerName || model?.providerID || ''; + }, [selectedModel, models]); + + const handleSend = useCallback(async () => { + if ((!inputText.trim() && !attachments.length) || isSending) return; + const text = inputText.trim(); + const files = attachments; + setInputText(''); + setAttachments([]); + const ok = await onSendMessage(text, selectedModelObj, selectedMode || undefined, files); + if (ok) return; + setInputText(text); + setAttachments(files); + }, [inputText, attachments, isSending, onSendMessage, selectedModelObj, selectedMode]); + + const handleAttach = useCallback(async () => { + if (isSending) return; + const permission = await ImagePicker.requestMediaLibraryPermissionsAsync(); + if (!permission.granted) return; + const result = await ImagePicker.launchImageLibraryAsync({ + mediaTypes: ImagePicker.MediaTypeOptions.Images, + allowsEditing: false, + quality: 0.9, + }); + if (result.canceled || !result.assets.length) return; + const asset = result.assets[0]; + if (!asset.uri) return; + const base64 = await FileSystem.readAsStringAsync(asset.uri, { + encoding: FileSystem.EncodingType.Base64, + }).catch(() => ''); + if (!base64) return; + const mime = asset.mimeType || (asset.fileName?.toLowerCase().endsWith('.heic') ? 'image/heic' : 'image/jpeg'); + const ext = mime.split('/')[1] || 'jpg'; + setAttachments((prev) => [ + ...prev, + { + mime, + url: `data:${mime};base64,${base64}`, + filename: asset.fileName || `image.${ext}`, + }, + ]); + }, [isSending]); + + const removeAttachment = useCallback((index: number) => { + setAttachments((prev) => prev.filter((_, i) => i !== index)); + }, []); + + const handleScroll = useCallback((event: NativeSyntheticEvent) => { + const offset = event.nativeEvent.contentOffset.y; + const visible = event.nativeEvent.layoutMeasurement.height; + const total = event.nativeEvent.contentSize.height; + const distance = total - visible - offset; + atBottomRef.current = distance < 60; + const shouldShow = distance > 200; + setShowScrollButton((prev) => (prev === shouldShow ? prev : shouldShow)); + }, []); + + const scrollToLatest = useCallback(() => { + flatListRef.current?.scrollToEnd({ animated: true }); + }, []); + + const filtered = useMemo(() => { + const query = modelSearch.toLowerCase(); + const list = query + ? models.filter((item) => + item.name.toLowerCase().includes(query) || + item.providerName.toLowerCase().includes(query) || + item.id.toLowerCase().includes(query), + ) + : models; + const grouped = new Map(); + for (const model of list) { + const items = grouped.get(model.providerName) ?? []; + items.push(model); + grouped.set(model.providerName, items); + } + return { list, grouped: Array.from(grouped.entries()) }; + }, [models, modelSearch]); + + const recent = useMemo(() => { + if (modelSearch) return []; + return recentModelKeys + .map((key) => models.find((item) => `${item.providerID}/${item.id}` === key)) + .filter((item): item is ProviderModel => Boolean(item)); + }, [recentModelKeys, models, modelSearch]); + + const dismissModelPicker = useCallback(() => { + setShowModelPicker(false); + setModelSearch(''); + }, []); + + const dismissModePicker = useCallback(() => { + setShowModePicker(false); + }, []); + + const dismissBranchPicker = useCallback(() => { + setShowBranchPicker(false); + }, []); + + const openModelPicker = useCallback(() => { + Keyboard.dismiss(); + requestAnimationFrame(() => { + setShowModelPicker(true); + }); + }, []); + + const openModePicker = useCallback(() => { + Keyboard.dismiss(); + requestAnimationFrame(() => { + setShowModePicker(true); + }); + }, []); + + const openBranchPicker = useCallback(() => { + Keyboard.dismiss(); + requestAnimationFrame(() => { + setShowBranchPicker(true); + }); + }, []); + + const keyExtractor = useCallback((item: MessageWithParts, index: number) => item.info.id || String(index), []); + + const renderMessage = useCallback( + ({ item }: { item: MessageWithParts }) => ( + { + setExpandedReasoning((prev) => ({ ...prev, [id]: !prev[id] })); + }} + /> + ), + [colors, serverUrl, expandedReasoning], + ); + + const visibleBranches = useMemo(() => { + if (branches.length) return branches; + return [session]; + }, [branches, session]); + + return ( + + + + + {session.title || 'Chat'} + + + + + + + + { + if (!atBottomRef.current) return; + requestAnimationFrame(() => { + flatListRef.current?.scrollToEnd({ animated: false }); + }); + }} + keyboardShouldPersistTaps="handled" + keyboardDismissMode="interactive" + onScroll={handleScroll} + scrollEventThrottle={16} + contentContainerStyle={{ paddingTop: 14, paddingBottom: 14, flexGrow: messages.length ? 0 : 1 }} + ListEmptyComponent={ + + + + } + /> + + {showScrollButton ? ( + + + + + + Latest + + + ) : null} + + + {error ? ( + + {error} + + ) : null} + + {attachments.length ? ( + + + {attachments.map((item, index) => ( + + + removeAttachment(index)}> + + + + ))} + + + ) : null} + + + + + + + + {isSending ? : } + + + + + + + {selectedMode} + + + + + + {selectedModelLabel} + {selectedModelVendor ? {selectedModelVendor} : null} + + + + + + + + {showModelPicker ? ( + + + + + + + + + Select Model + + + + + + + + + {!modelSearch ? ( + { onSelectModel(''); dismissModelPicker(); }}> + Server Default + + ) : null} + + {recent.length > 0 ? ( + + Recent + {recent.map((item) => { + const key = `${item.providerID}/${item.id}`; + return ( + { onSelectModel(key); dismissModelPicker(); }}> + {item.name} + {item.providerName} + + ); + })} + + ) : null} + + {filtered.list.length === 0 && modelSearch ? ( + No models match "{modelSearch}" + ) : ( + filtered.grouped.map(([provider, items]) => ( + + {provider} + {items.map((item) => { + const key = `${item.providerID}/${item.id}`; + return ( + { onSelectModel(key); dismissModelPicker(); }}> + {item.name} + + ); + })} + + )) + )} + + + + ) : null} + + {showModePicker ? ( + + + + + + + + Select Mode + + {modes.map((mode) => ( + { + setSelectedMode(mode); + dismissModePicker(); + }} + > + + {mode} + + ))} + + + ) : null} + + {showBranchPicker ? ( + + + + + + + + + Branches + + + + {visibleBranches.map((item) => { + const active = item.id === session.id; + const main = item.id === (session.parentID ?? session.id); + return ( + { + dismissBranchPicker(); + onOpenBranch(item.id); + }} + > + + + {item.title || 'Untitled Session'} + + + + {main ? 'Main' : 'Branch'} + {item.time?.updated ? ( + + {new Date(item.time.updated).toLocaleString()} + + ) : null} + + + ); + })} + + + { + dismissBranchPicker(); + onCreateBranch(); + }} + > + + New Branch + + + + ) : null} + + ); +} diff --git a/packages/mobile/src/screens/ConnectScreen.tsx b/packages/mobile/src/screens/ConnectScreen.tsx new file mode 100644 index 00000000000..bacfedb07ea --- /dev/null +++ b/packages/mobile/src/screens/ConnectScreen.tsx @@ -0,0 +1,101 @@ +import React from 'react'; +import { ActivityIndicator, KeyboardAvoidingView, Platform, Text, TextInput, TouchableOpacity, View } from 'react-native'; +import { withUniwind } from 'uniwind'; +import { useTheme } from '../hooks/useTheme'; +import { Icon } from '../components/Icon'; + +const WView = withUniwind(View); +const WText = withUniwind(Text); +const WTextInput = withUniwind(TextInput); +const WTouchableOpacity = withUniwind(TouchableOpacity); +const WKeyboardAvoidingView = withUniwind(KeyboardAvoidingView); + +interface ConnectScreenProps { + serverUrl: string; + onServerUrlChange: (url: string) => void; + onConnect: () => void; + connecting: boolean; + error: string | null; +} + +export function ConnectScreen({ + serverUrl, + onServerUrlChange, + onConnect, + connecting, + error, +}: ConnectScreenProps) { + const { colors } = useTheme(); + + return ( + + + + + + + + OpenPad + + Connect to your OpenCode server to get started + + + + + Server URL + + + {error ? ( + + + {error} + + ) : null} + + + {connecting ? ( + + ) : ( + <> + + Connect + + )} + + + + + + + + {connecting ? 'Connecting to server...' : 'Ready to connect'} + + + + opencode serve --port 9034 --hostname "0.0.0.0" + + + + + + ); +} diff --git a/packages/mobile/src/screens/NewProjectScreen.tsx b/packages/mobile/src/screens/NewProjectScreen.tsx new file mode 100644 index 00000000000..c403f04ca49 --- /dev/null +++ b/packages/mobile/src/screens/NewProjectScreen.tsx @@ -0,0 +1,153 @@ +import React, { useState } from 'react'; +import { KeyboardAvoidingView, Platform, ScrollView, Text, TextInput, TouchableOpacity, View } from 'react-native'; +import { useSafeAreaInsets } from 'react-native-safe-area-context'; +import { withUniwind } from 'uniwind'; +import { useTheme } from '../hooks/useTheme'; +import { Icon } from '../components/Icon'; + +const WView = withUniwind(View); +const WText = withUniwind(Text); +const WTextInput = withUniwind(TextInput); +const WTouchableOpacity = withUniwind(TouchableOpacity); +const WScrollView = withUniwind(ScrollView); +const WKeyboardAvoidingView = withUniwind(KeyboardAvoidingView); + +type ProjectCreationMode = 'directory' | 'clone'; + +interface NewProjectScreenProps { + onBack: () => void; + onSelectDirectory: (path: string) => void; + onCloneRepository: (url: string, path?: string) => void; +} + +export function NewProjectScreen({ onBack, onSelectDirectory, onCloneRepository }: NewProjectScreenProps) { + const { colors } = useTheme(); + const insets = useSafeAreaInsets(); + const [mode, setMode] = useState('directory'); + const [directory, setDirectory] = useState(''); + const [url, setUrl] = useState(''); + const [path, setPath] = useState(''); + + const disabled = mode === 'directory' ? !directory.trim() : !url.trim(); + + const submit = () => { + if (mode === 'directory' && directory.trim()) { + onSelectDirectory(directory.trim()); + return; + } + if (mode === 'clone' && url.trim()) { + onCloneRepository(url.trim(), path.trim() || undefined); + } + }; + + return ( + + + + + New Project + open or clone + + + + + setMode('directory')} + > + + Open Directory + + + setMode('clone')} + > + + Clone Repo + + + + {mode === 'directory' ? ( + + Directory Path + + Enter a full path to an existing project directory. + + ) : ( + + Repository URL + + + Clone To (optional) + + Leave empty to use the default location. + + )} + + + + + + + {mode === 'directory' ? 'Open Project' : 'Clone Repository'} + + + + + + ); +} diff --git a/packages/mobile/src/screens/ProjectSessionsScreen.tsx b/packages/mobile/src/screens/ProjectSessionsScreen.tsx new file mode 100644 index 00000000000..c2f15a860bd --- /dev/null +++ b/packages/mobile/src/screens/ProjectSessionsScreen.tsx @@ -0,0 +1,188 @@ +import React, { useCallback, useMemo, useState } from 'react'; +import { FlatList, RefreshControl, Text, TouchableOpacity, View } from 'react-native'; +import Animated, { useAnimatedScrollHandler, useSharedValue, withTiming } from 'react-native-reanimated'; +import { SafeAreaView } from 'react-native-safe-area-context'; +import { withUniwind } from 'uniwind'; +import { useTheme } from '../hooks/useTheme'; +import { Icon } from '../components/Icon'; +import { AnimatedFAB } from '../components/AnimatedFAB'; +import { ScreenHeader } from '../components/ui/ScreenHeader'; +import { EmptyState } from '../components/ui/EmptyState'; +import { formatRelativeDate } from '../utils/date'; +import type { Session, SessionWithPreview } from '../providers/OpenCodeProvider'; +import { getFolderName } from '../utils/path'; + +const WSafeAreaView = withUniwind(SafeAreaView); +const WView = withUniwind(View); +const WText = withUniwind(Text); +const WTouchableOpacity = withUniwind(TouchableOpacity); + +interface ProjectSessionsScreenProps { + projectId: string; + projectWorktree?: string; + projectName: string; + sessions: SessionWithPreview[]; + loading: boolean; + refreshing?: boolean; + onRefresh?: () => void; + onSelectSession: (session: Session) => void; + onCreateSession: () => void; +} + +interface GroupedSession extends SessionWithPreview { + children?: SessionWithPreview[]; +} + +export function ProjectSessionsScreen({ + projectId, + projectWorktree, + projectName, + sessions, + loading, + refreshing = false, + onRefresh, + onSelectSession, + onCreateSession, +}: ProjectSessionsScreenProps) { + const { colors } = useTheme(); + const visible = useSharedValue(1); + const offset = useSharedValue(0); + const [expanded, setExpanded] = useState>(new Set()); + + const onScroll = useAnimatedScrollHandler({ + onScroll: (event) => { + const current = event.contentOffset.y; + const diff = current - offset.value; + if (Math.abs(diff) < 10 || current < 0) return; + if (diff > 0 && current > 50 && visible.value !== 0) visible.value = withTiming(0, { duration: 200 }); + if (diff < 0 && visible.value !== 1) visible.value = withTiming(1, { duration: 200 }); + offset.value = current; + }, + }); + + const list = useMemo(() => { + const filtered = sessions.filter((session) => { + if (projectWorktree && session.directory) return session.directory === projectWorktree; + return session.projectID === projectId; + }); + const parents: GroupedSession[] = []; + const children = new Map(); + for (const session of filtered) { + if (!session.parentID) { + parents.push({ ...session }); + continue; + } + const existing = children.get(session.parentID) ?? []; + existing.push(session); + children.set(session.parentID, existing); + } + for (const session of parents) { + const nested = children.get(session.id); + if (!nested) continue; + session.children = nested.sort((a, b) => (b.time?.updated ?? b.time?.created ?? 0) - (a.time?.updated ?? a.time?.created ?? 0)); + } + return parents.sort((a, b) => (b.time?.updated ?? b.time?.created ?? 0) - (a.time?.updated ?? a.time?.created ?? 0)); + }, [sessions, projectId, projectWorktree]); + + const renderItem = useCallback(({ item }: { item: GroupedSession }) => { + const open = expanded.has(item.id); + const child = item.children ?? []; + const hasChild = child.length > 0; + return ( + + onSelectSession(item)} + > + + + {item.title || 'Untitled Session'} + {formatRelativeDate(item.time?.updated ?? item.time?.created)} + + {item.preview ? {item.preview} : null} + + {hasChild ? ( + setExpanded((prev) => { + const next = new Set(prev); + if (next.has(item.id)) next.delete(item.id); + else next.add(item.id); + return next; + })} + > + {child.length} + + + ) : } + + + {hasChild && open ? ( + + {child.map((nested) => ( + onSelectSession(nested)} + > + + + {nested.title || 'Untitled Session'} + {nested.preview ? {nested.preview} : null} + + {formatRelativeDate(nested.time?.updated ?? nested.time?.created)} + + ))} + + ) : null} + + ); + }, [colors, expanded, onSelectSession]); + + return ( + + + + item.id} + renderItem={renderItem as any} + onScroll={onScroll} + scrollEventThrottle={16} + refreshControl={} + contentContainerStyle={{ paddingBottom: list.length || loading ? 110 : 16, flexGrow: list.length ? 0 : 1 }} + ListEmptyComponent={ + loading ? ( + + Loading... + Fetching sessions for this project + + ) : ( + + + New Session + + } + /> + ) + } + /> + + + + ); +} diff --git a/packages/mobile/src/screens/ProjectsScreen.tsx b/packages/mobile/src/screens/ProjectsScreen.tsx new file mode 100644 index 00000000000..79141ba807f --- /dev/null +++ b/packages/mobile/src/screens/ProjectsScreen.tsx @@ -0,0 +1,126 @@ +import React from 'react'; +import { FlatList, Image, RefreshControl, Text, TouchableOpacity, View } from 'react-native'; +import Animated, { useAnimatedScrollHandler, useSharedValue, withTiming } from 'react-native-reanimated'; +import { SafeAreaView } from 'react-native-safe-area-context'; +import { SvgUri } from 'react-native-svg'; +import { withUniwind } from 'uniwind'; +import { useTheme } from '../hooks/useTheme'; +import { Icon } from '../components/Icon'; +import { AnimatedFAB } from '../components/AnimatedFAB'; +import { ScreenHeader } from '../components/ui/ScreenHeader'; +import { EmptyState } from '../components/ui/EmptyState'; +import type { Project } from '../providers/OpenCodeProvider'; +import { getFolderName, shortenPath } from '../utils/path'; + +const WSafeAreaView = withUniwind(SafeAreaView); +const WView = withUniwind(View); +const WText = withUniwind(Text); +const WTouchableOpacity = withUniwind(TouchableOpacity); + +interface ProjectsScreenProps { + projects: Project[]; + loading: boolean; + refreshing?: boolean; + onRefresh?: () => void; + onSelectProject?: (project: Project) => void; + onCreateProject: () => void; +} + +function isSvg(src: string) { + return src.startsWith('data:image/svg+xml') || src.toLowerCase().endsWith('.svg'); +} + +function ProjectAvatar({ project, accent }: { project: Project; accent: string }) { + const [failed, setFailed] = React.useState(false); + const src = project.icon?.override || project.icon?.url; + if (!src || failed) return ; + + if (isSvg(src)) { + return ( + setFailed(true)} + /> + ); + } + + return ( + setFailed(true)} + /> + ); +} + +export function ProjectsScreen({ + projects, + loading, + refreshing = false, + onRefresh, + onSelectProject, + onCreateProject, +}: ProjectsScreenProps) { + const { colors } = useTheme(); + const visible = useSharedValue(1); + const offset = useSharedValue(0); + + const onScroll = useAnimatedScrollHandler({ + onScroll: (event) => { + const current = event.contentOffset.y; + const diff = current - offset.value; + if (Math.abs(diff) < 10 || current < 0) return; + if (diff > 0 && current > 50 && visible.value !== 0) visible.value = withTiming(0, { duration: 200 }); + if (diff < 0 && visible.value !== 1) visible.value = withTiming(1, { duration: 200 }); + offset.value = current; + }, + }); + + return ( + + + + item.id} + onScroll={onScroll} + scrollEventThrottle={16} + renderItem={({ item }: { item: Project }) => ( + onSelectProject?.(item)} + > + + + + + {item.worktree ? getFolderName(item.worktree) : 'Unknown Project'} + {item.worktree ? {shortenPath(item.worktree)} : null} + + + + )} + refreshControl={} + contentContainerStyle={{ paddingBottom: 100, flexGrow: projects.length ? 0 : 1 }} + ListEmptyComponent={ + + } + /> + + + + ); +} diff --git a/packages/mobile/src/screens/SessionsScreen.tsx b/packages/mobile/src/screens/SessionsScreen.tsx new file mode 100644 index 00000000000..c0acfcea2a2 --- /dev/null +++ b/packages/mobile/src/screens/SessionsScreen.tsx @@ -0,0 +1,141 @@ +import React, { useMemo, useState } from 'react'; +import { FlatList, RefreshControl, Text, TouchableOpacity, View } from 'react-native'; +import { SafeAreaView } from 'react-native-safe-area-context'; +import { withUniwind } from 'uniwind'; +import { useTheme } from '../hooks/useTheme'; +import { Icon } from '../components/Icon'; +import { ScreenHeader } from '../components/ui/ScreenHeader'; +import { EmptyState } from '../components/ui/EmptyState'; +import { formatRelativeDate } from '../utils/date'; +import type { Session, SessionWithPreview } from '../providers/OpenCodeProvider'; + +const WView = withUniwind(View); +const WText = withUniwind(Text); +const WTouchableOpacity = withUniwind(TouchableOpacity); +const WSafeAreaView = withUniwind(SafeAreaView); + +interface SessionsScreenProps { + sessions: SessionWithPreview[]; + loading: boolean; + refreshing: boolean; + onRefresh: () => void; + onSelectSession: (session: Session) => void; +} + +interface GroupedSession extends SessionWithPreview { + children?: SessionWithPreview[]; +} + +export function SessionsScreen({ + sessions, + loading, + refreshing, + onRefresh, + onSelectSession, +}: SessionsScreenProps) { + const { colors } = useTheme(); + const [expanded, setExpanded] = useState>(new Set()); + + const grouped = useMemo(() => { + const parents: GroupedSession[] = []; + const children = new Map(); + for (const session of sessions) { + if (!session.parentID) { + parents.push({ ...session }); + continue; + } + const existing = children.get(session.parentID) ?? []; + existing.push(session); + children.set(session.parentID, existing); + } + for (const session of parents) { + const nested = children.get(session.id); + if (!nested) continue; + session.children = nested.sort((a, b) => (b.time?.updated ?? b.time?.created ?? 0) - (a.time?.updated ?? a.time?.created ?? 0)); + } + return parents.sort((a, b) => (b.time?.updated ?? b.time?.created ?? 0) - (a.time?.updated ?? a.time?.created ?? 0)); + }, [sessions]); + + return ( + + + + item.id} + refreshControl={} + contentContainerStyle={{ paddingBottom: 100, flexGrow: grouped.length ? 0 : 1 }} + renderItem={({ item }) => { + const open = expanded.has(item.id); + const child = item.children ?? []; + const hasChild = child.length > 0; + return ( + + onSelectSession(item)} + activeOpacity={0.8} + > + + + {item.title || 'Untitled Session'} + {formatRelativeDate(item.time?.updated ?? item.time?.created)} + + {item.preview ? {item.preview} : null} + + {hasChild ? ( + setExpanded((prev) => { + const next = new Set(prev); + if (next.has(item.id)) next.delete(item.id); + else next.add(item.id); + return next; + })} + > + {child.length} + + + ) : } + + + {hasChild && open ? ( + + {child.map((nested) => ( + onSelectSession(nested)} + > + + + {nested.title || 'Untitled Session'} + {nested.preview ? {nested.preview} : null} + + {formatRelativeDate(nested.time?.updated ?? nested.time?.created)} + + ))} + + ) : null} + + ); + }} + ListEmptyComponent={ + + } + /> + + ); +} diff --git a/packages/mobile/src/screens/SettingsScreen.tsx b/packages/mobile/src/screens/SettingsScreen.tsx new file mode 100644 index 00000000000..740d0d5b310 --- /dev/null +++ b/packages/mobile/src/screens/SettingsScreen.tsx @@ -0,0 +1,159 @@ +import React from 'react'; +import { + View, + Text, + TouchableOpacity, + StyleSheet, + ScrollView, + Platform, +} from 'react-native'; +import { useSafeAreaInsets } from 'react-native-safe-area-context'; +import { useTheme } from '../hooks/useTheme'; +import { Icon } from '../components/Icon'; +import { spacing, radius, typography } from '../theme'; + +interface SettingsScreenProps { + serverUrl: string; + onDisconnect: () => void; +} + +export function SettingsScreen({ + serverUrl, + onDisconnect, +}: SettingsScreenProps) { + const { theme, colors: c } = useTheme(); + const insets = useSafeAreaInsets(); + + // Extra padding for the floating liquid glass tab bar on iOS/iPad + const topPadding = Platform.OS === 'ios' ? insets.top + 60 : insets.top + spacing.lg; + + return ( + + {/* Header */} + + + Settings + + + + + {/* Connection Section */} + + + CONNECTION + + + + + + + + + Server + + {serverUrl} + + + + + + + + {/* About Section */} + + + ABOUT + + + + + + + + + OpenPad + + Version 1.0.0 + + + + + + + {/* Actions Section */} + + + + + Disconnect + + + + + + ); +} + +const styles = StyleSheet.create({ + content: { + padding: spacing.lg, + paddingBottom: 120, + }, + section: { + marginBottom: spacing.xl, + }, + sectionTitle: { + ...typography.caption, + letterSpacing: 0.5, + marginBottom: spacing.sm, + marginLeft: spacing.xs, + }, + card: { + borderRadius: radius.lg, + borderWidth: 1, + overflow: 'hidden', + }, + row: { + flexDirection: 'row', + alignItems: 'center', + padding: spacing.md, + }, + iconContainer: { + width: 36, + height: 36, + borderRadius: radius.md, + alignItems: 'center', + justifyContent: 'center', + }, + rowContent: { + flex: 1, + marginLeft: spacing.md, + }, + rowLabel: { + ...typography.bodyMedium, + }, + rowValue: { + ...typography.small, + marginTop: 2, + }, + statusDot: { + width: 8, + height: 8, + borderRadius: 4, + }, + disconnectButton: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + padding: spacing.lg, + borderRadius: radius.lg, + gap: spacing.sm, + }, + disconnectText: { + ...typography.bodyMedium, + }, +}); diff --git a/packages/mobile/src/theme/index.ts b/packages/mobile/src/theme/index.ts new file mode 100644 index 00000000000..6662e8f0082 --- /dev/null +++ b/packages/mobile/src/theme/index.ts @@ -0,0 +1,367 @@ +import { StyleSheet, Platform } from 'react-native'; + +// OpenPad Design System +// A modern, clean design with subtle depth and warmth + +export const colors = { + dark: { + // Core backgrounds - minimal dark + bg: '#0a0a0a', + bgElevated: '#141414', + bgCard: '#1a1a1a', + bgHover: '#222222', + + // Text hierarchy + text: '#fafafa', + textSecondary: '#a3a3a3', + textMuted: '#737373', + textInverse: '#0a0a0a', + + // Accent - orange + accent: '#f97316', + accentMuted: '#ea580c', + accentSubtle: 'rgba(249, 115, 22, 0.12)', + + // Semantic + success: '#22c55e', + warning: '#eab308', + error: '#ef4444', + info: '#3b82f6', + + // Borders and dividers + border: '#262626', + borderLight: '#404040', + divider: 'rgba(255, 255, 255, 0.06)', + + // Overlays + overlay: 'rgba(0, 0, 0, 0.6)', + glass: 'rgba(20, 20, 20, 0.8)', + + // Message blocks + userMessage: '#f97316', + userMessageBg: 'rgba(249, 115, 22, 0.08)', + assistantMessage: '#1a1a1a', + }, + light: { + // Core backgrounds - clean minimal + bg: '#fafafa', + bgElevated: '#ffffff', + bgCard: '#ffffff', + bgHover: '#f5f5f5', + + // Text hierarchy + text: '#0a0a0a', + textSecondary: '#525252', + textMuted: '#a3a3a3', + textInverse: '#fafafa', + + // Accent - orange + accent: '#ea580c', + accentMuted: '#f97316', + accentSubtle: 'rgba(234, 88, 12, 0.08)', + + // Semantic + success: '#16a34a', + warning: '#ca8a04', + error: '#dc2626', + info: '#2563eb', + + // Borders and dividers + border: '#e5e5e5', + borderLight: '#f5f5f5', + divider: 'rgba(0, 0, 0, 0.04)', + + // Overlays + overlay: 'rgba(0, 0, 0, 0.3)', + glass: 'rgba(255, 255, 255, 0.8)', + + // Message blocks + userMessage: '#ea580c', + userMessageBg: 'rgba(234, 88, 12, 0.06)', + assistantMessage: '#f5f5f5', + }, +}; + +export const spacing = { + xs: 4, + sm: 8, + md: 12, + lg: 16, + xl: 24, + xxl: 32, + xxxl: 48, +}; + +export const radius = { + sm: 8, + md: 12, + lg: 16, + xl: 20, + full: 9999, +}; + +// Typography using system fonts +export const typography = { + // Display + hero: { + fontSize: 34, + fontWeight: '700' as const, + lineHeight: 40, + }, + title: { + fontSize: 24, + fontWeight: '600' as const, + lineHeight: 30, + }, + subtitle: { + fontSize: 20, + fontWeight: '600' as const, + lineHeight: 26, + }, + // Body + body: { + fontSize: 16, + fontWeight: '400' as const, + lineHeight: 24, + }, + bodyMedium: { + fontSize: 16, + fontWeight: '500' as const, + lineHeight: 24, + }, + bodySemibold: { + fontSize: 16, + fontWeight: '600' as const, + lineHeight: 24, + }, + // Small + small: { + fontSize: 14, + fontWeight: '400' as const, + lineHeight: 20, + }, + smallMedium: { + fontSize: 14, + fontWeight: '500' as const, + lineHeight: 20, + }, + // Tiny + caption: { + fontSize: 12, + fontWeight: '400' as const, + lineHeight: 16, + }, + captionMedium: { + fontSize: 12, + fontWeight: '500' as const, + lineHeight: 16, + }, + // Mono (for code) + mono: { + fontSize: 14, + fontFamily: Platform.select({ ios: 'Menlo', android: 'monospace', default: 'monospace' }), + lineHeight: 20, + }, +}; + +export const shadows = { + sm: { + shadowColor: '#000', + shadowOffset: { width: 0, height: 1 }, + shadowOpacity: 0.05, + shadowRadius: 2, + elevation: 1, + }, + md: { + shadowColor: '#000', + shadowOffset: { width: 0, height: 2 }, + shadowOpacity: 0.08, + shadowRadius: 8, + elevation: 3, + }, + lg: { + shadowColor: '#000', + shadowOffset: { width: 0, height: 4 }, + shadowOpacity: 0.12, + shadowRadius: 16, + elevation: 5, + }, +}; + +export const createTheme = (isDark: boolean) => { + const c = isDark ? colors.dark : colors.light; + + return StyleSheet.create({ + // Containers + container: { + flex: 1, + backgroundColor: c.bg, + }, + containerElevated: { + flex: 1, + backgroundColor: c.bgElevated, + }, + + // Cards + card: { + backgroundColor: c.bgCard, + borderRadius: radius.lg, + padding: spacing.lg, + borderWidth: 1, + borderColor: c.border, + }, + + // Typography + hero: { ...typography.hero, color: c.text }, + title: { ...typography.title, color: c.text }, + subtitle: { ...typography.subtitle, color: c.text }, + body: { ...typography.body, color: c.text }, + bodyMedium: { ...typography.bodyMedium, color: c.text }, + bodySemibold: { ...typography.bodySemibold, color: c.text }, + small: { ...typography.small, color: c.text }, + smallMedium: { ...typography.smallMedium, color: c.text }, + caption: { ...typography.caption, color: c.textMuted }, + captionMedium: { ...typography.captionMedium, color: c.textMuted }, + + // Secondary text variants + textSecondary: { color: c.textSecondary }, + textMuted: { color: c.textMuted }, + textAccent: { color: c.accent }, + + // List items + listItem: { + flexDirection: 'row', + alignItems: 'center', + paddingVertical: spacing.md, + paddingHorizontal: spacing.lg, + backgroundColor: c.bgCard, + borderBottomWidth: 1, + borderBottomColor: c.divider, + }, + listItemContent: { + flex: 1, + marginLeft: spacing.md, + }, + + // Buttons + buttonPrimary: { + backgroundColor: c.accent, + paddingVertical: spacing.md, + paddingHorizontal: spacing.xl, + borderRadius: radius.md, + alignItems: 'center', + justifyContent: 'center', + }, + buttonPrimaryText: { + ...typography.bodyMedium, + color: c.textInverse, + }, + buttonSecondary: { + backgroundColor: c.accentSubtle, + paddingVertical: spacing.md, + paddingHorizontal: spacing.xl, + borderRadius: radius.md, + alignItems: 'center', + justifyContent: 'center', + }, + buttonSecondaryText: { + ...typography.bodyMedium, + color: c.accent, + }, + buttonGhost: { + paddingVertical: spacing.sm, + paddingHorizontal: spacing.md, + }, + buttonGhostText: { + ...typography.bodyMedium, + color: c.accent, + }, + + // Input + input: { + ...typography.body, + color: c.text, + backgroundColor: c.bgHover, + borderRadius: radius.md, + paddingVertical: spacing.md, + paddingHorizontal: spacing.lg, + borderWidth: 1, + borderColor: c.border, + }, + + // Header/Nav + header: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', + paddingHorizontal: spacing.lg, + paddingVertical: spacing.lg, + backgroundColor: c.bgElevated, + borderBottomWidth: 1, + borderBottomColor: c.border, + minHeight: 64, + }, + + // Divider + divider: { + height: 1, + backgroundColor: c.divider, + }, + + // Message blocks + messageBlockUser: { + backgroundColor: c.userMessage, + borderRadius: radius.lg, + padding: spacing.lg, + marginHorizontal: spacing.lg, + marginVertical: spacing.sm, + }, + messageBlockAssistant: { + backgroundColor: c.assistantMessage, + borderRadius: radius.lg, + padding: spacing.lg, + marginHorizontal: spacing.lg, + marginVertical: spacing.sm, + borderWidth: isDark ? 0 : 1, + borderColor: c.border, + }, + + // Tab bar + tabBar: { + flexDirection: 'row', + backgroundColor: c.bgElevated, + borderTopWidth: 1, + borderTopColor: c.border, + paddingBottom: spacing.lg, + paddingTop: spacing.sm, + }, + tab: { + flex: 1, + alignItems: 'center', + paddingVertical: spacing.xs, + }, + tabLabel: { + ...typography.caption, + marginTop: spacing.xs, + }, + + // Status indicators + statusDot: { + width: 8, + height: 8, + borderRadius: 4, + }, + statusConnected: { + backgroundColor: c.success, + }, + statusPending: { + backgroundColor: c.warning, + }, + statusError: { + backgroundColor: c.error, + }, + }); +}; + +export type Theme = ReturnType; +export type Colors = typeof colors.dark; diff --git a/packages/mobile/src/utils/date.ts b/packages/mobile/src/utils/date.ts new file mode 100644 index 00000000000..a6875e8b3ff --- /dev/null +++ b/packages/mobile/src/utils/date.ts @@ -0,0 +1,17 @@ +export function formatRelativeDate(timestamp?: number): string { + if (!timestamp) return ''; + // Backend uses Date.now() (ms). Handle both seconds and milliseconds. + const ms = timestamp > 1e12 ? timestamp : timestamp * 1000; + const date = new Date(ms); + const now = new Date(); + const diff = now.getTime() - date.getTime(); + const minutes = Math.floor(diff / 60000); + const hours = Math.floor(diff / 3600000); + const days = Math.floor(diff / 86400000); + + if (minutes < 1) return 'Just now'; + if (minutes < 60) return `${minutes}m`; + if (hours < 24) return `${hours}h`; + if (days < 7) return `${days}d`; + return date.toLocaleDateString(); +} diff --git a/packages/mobile/src/utils/path.ts b/packages/mobile/src/utils/path.ts new file mode 100644 index 00000000000..8b28b647044 --- /dev/null +++ b/packages/mobile/src/utils/path.ts @@ -0,0 +1,25 @@ +const HOME_PATTERNS = [ + /^\/home\/[^/]+/, + /^\/Users\/[^/]+/, + /^\/root/, +]; + +export function shortenPath(path: string, homeDir?: string): string { + if (homeDir) { + return path.replace(homeDir, '~'); + } + + for (const pattern of HOME_PATTERNS) { + const match = path.match(pattern); + if (match) { + return path.replace(match[0], '~'); + } + } + + return path; +} + +export function getFolderName(path: string): string { + const parts = path.split('/'); + return parts[parts.length - 1] || path; +} diff --git a/packages/mobile/tsconfig.json b/packages/mobile/tsconfig.json new file mode 100644 index 00000000000..5e5cf4de903 --- /dev/null +++ b/packages/mobile/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "expo/tsconfig.base", + "compilerOptions": { + "strict": true + }, + "include": [ + "**/*.ts", + "**/*.tsx", + "uniwind-types.d.ts" + ] +} diff --git a/packages/mobile/uniwind-types.d.ts b/packages/mobile/uniwind-types.d.ts new file mode 100644 index 00000000000..cc099419a9b --- /dev/null +++ b/packages/mobile/uniwind-types.d.ts @@ -0,0 +1,10 @@ +// NOTE: This file is generated by uniwind and it should not be edited manually. +/// + +declare module 'uniwind' { + export interface UniwindConfig { + themes: readonly ['light', 'dark'] + } +} + +export {} diff --git a/packages/opencode/.gitignore b/packages/opencode/.gitignore index c9cc9498224..0ca9631c481 100644 --- a/packages/opencode/.gitignore +++ b/packages/opencode/.gitignore @@ -4,3 +4,4 @@ gen app.log static src/provider/models-snapshot.ts +.*.bun-build diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index af80eb0d862..8bbb442c55a 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -24,7 +24,8 @@ "types": "./dist/v2/gen/client/index.d.ts", "default": "./src/v2/gen/client/index.ts" }, - "./v2/server": "./src/v2/server.ts" + "./v2/server": "./src/v2/server.ts", + "./event-reducer": "./src/event-reducer.ts" }, "files": [ "dist" @@ -36,7 +37,9 @@ "typescript": "catalog:", "@typescript/native-preview": "catalog:" }, - "dependencies": {}, + "dependencies": { + "@opencode-ai/util": "workspace:*" + }, "publishConfig": { "directory": "dist" } diff --git a/packages/sdk/js/src/event-reducer.ts b/packages/sdk/js/src/event-reducer.ts new file mode 100644 index 00000000000..8ca6087d592 --- /dev/null +++ b/packages/sdk/js/src/event-reducer.ts @@ -0,0 +1,157 @@ +/** + * Framework-agnostic event reducer for opencode SSE events. + * Applies message/part events to a flat store using immutable updates. + * Can be used from any UI framework (React, Solid, etc). + */ +import type { Message, Part } from "./v2/gen/types.gen.js" + +function search(array: T[], id: string, getId: (item: T) => string): { found: boolean; index: number } { + let left = 0 + let right = array.length - 1 + + while (left <= right) { + const mid = Math.floor((left + right) / 2) + const midId = getId(array[mid]) + + if (midId === id) return { found: true, index: mid } + if (midId < id) { + left = mid + 1 + continue + } + right = mid - 1 + } + + return { found: false, index: left } +} + +export interface MessageStore { + /** Messages keyed by sessionID */ + messages: Record + /** Parts keyed by messageID */ + parts: Record +} + +function upsertSorted(array: T[], item: T, id: string, getId: (item: T) => string): T[] { + const result = search(array, id, getId) + const next = [...array] + if (result.found) { + next[result.index] = item + } else { + next.splice(result.index, 0, item) + } + return next +} + +function removeSorted(array: T[], id: string, getId: (item: T) => string): T[] | null { + const result = search(array, id, getId) + if (!result.found) return null + const next = [...array] + next.splice(result.index, 1) + return next +} + +/** + * Apply a single SSE event to a MessageStore. + * Returns a new store if the event was handled, or null if unrecognized/no-op. + */ +export function applyMessageEvent( + store: MessageStore, + event: { type: string; properties?: any }, +): MessageStore | null { + const props = event.properties + + switch (event.type) { + case "message.updated": { + const info = props?.info as Message | undefined + if (!info) return null + const sessionID = (info as any).sessionID + if (!sessionID) return null + const messages = store.messages[sessionID] ?? [] + const next = upsertSorted(messages, info, info.id, (m) => m.id) + return { ...store, messages: { ...store.messages, [sessionID]: next } } + } + + case "message.removed": { + const { sessionID, messageID } = props as { sessionID: string; messageID: string } + if (!sessionID || !messageID) return null + const messages = store.messages[sessionID] + if (!messages) return null + const next = removeSorted(messages, messageID, (m) => m.id) + if (!next) return null + const { [messageID]: _, ...restParts } = store.parts + return { messages: { ...store.messages, [sessionID]: next }, parts: restParts } + } + + case "message.part.updated": { + const part = props?.part as Part | undefined + if (!part) return null + const messageID = (part as any).messageID + if (!messageID) return null + const parts = store.parts[messageID] ?? [] + const next = upsertSorted(parts, part, (part as any).id, (p) => (p as any).id) + return { ...store, parts: { ...store.parts, [messageID]: next } } + } + + case "message.part.delta": { + const { messageID, partID, field, delta } = props as { + messageID: string + partID: string + field: string + delta: string + } + if (!messageID || !partID || !field) return null + const parts = store.parts[messageID] + if (!parts) return null + const result = search(parts, partID, (p) => (p as any).id) + if (!result.found) return null + const oldPart = parts[result.index] as any + const newPart = { ...oldPart, [field]: (oldPart[field] ?? "") + delta } + const next = [...parts] + next[result.index] = newPart + return { ...store, parts: { ...store.parts, [messageID]: next } } + } + + case "message.part.removed": { + const { messageID, partID } = props as { messageID: string; partID: string } + if (!messageID || !partID) return null + const parts = store.parts[messageID] + if (!parts) return null + const next = removeSorted(parts, partID, (p) => (p as any).id) + if (!next) return null + return { ...store, parts: { ...store.parts, [messageID]: next } } + } + + default: + return null + } +} + +/** Reconstruct message+parts pairs from the flat stores for a given session. */ +export function getSessionMessages( + store: MessageStore, + sessionID: string, +): Array<{ info: Message; parts: Part[] }> { + const messages = store.messages[sessionID] + if (!messages) return [] + return messages.map((info) => ({ + info, + parts: store.parts[info.id] ?? [], + })) +} + +/** Load fetched message+parts data into the store. */ +export function loadMessages( + store: MessageStore, + sessionID: string, + data: Array<{ info: Message; parts: Part[] }>, +): MessageStore { + const messages = data.map((m) => m.info) + const parts = { ...store.parts } + for (const m of data) { + parts[m.info.id] = m.parts + } + return { + messages: { ...store.messages, [sessionID]: messages }, + parts, + } +}