From d2e893885cf17231f550558d7828839088d5847e Mon Sep 17 00:00:00 2001 From: rory Date: Wed, 29 Apr 2026 09:16:20 -0700 Subject: [PATCH 01/38] fix: add legacy-peer-deps to allow npm ci with react-native-screens beta Made-with: Cursor --- .npmrc | 1 + package-lock.json | 642 ++++++++++++++-------------------------------- 2 files changed, 193 insertions(+), 450 deletions(-) diff --git a/.npmrc b/.npmrc index b6f27f135954..d5831dd51888 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1,2 @@ engine-strict=true +legacy-peer-deps=true diff --git a/package-lock.json b/package-lock.json index 5703516b8e6c..80785de4a648 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4739,7 +4739,7 @@ }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" @@ -4750,7 +4750,7 @@ }, "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", @@ -5900,21 +5900,6 @@ "node": ">=8" } }, - "node_modules/@expo/config/node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, "node_modules/@expo/devcert": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.2.1.tgz", @@ -7579,23 +7564,6 @@ "node": ">=18.0.0" } }, - "node_modules/@firebase/app": { - "version": "0.14.11", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.14.11.tgz", - "integrity": "sha512-yxADFW35LYkP8oSGobGsYIrI42I+GPCvKTNHx4meT9Yq3C950IVz1eANoBk822I9tbKv1wyv9P4Bv1G5TpucFw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/component": "0.7.2", - "@firebase/logger": "0.5.0", - "@firebase/util": "1.15.0", - "idb": "7.1.1", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, "node_modules/@firebase/app-check": { "version": "0.8.11", "license": "Apache-2.0", @@ -7866,20 +7834,6 @@ "node": ">=18.0.0" } }, - "node_modules/@firebase/component": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.2.tgz", - "integrity": "sha512-iyVDGc6Vjx7Rm0cAdccLH/NG6fADsgJak/XW9IA2lPf8AjIlsemOpFGKczYyPHxm4rnKdR8z6sK4+KEC7NwmEg==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/util": "1.15.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, "node_modules/@firebase/data-connect": { "version": "0.3.0", "license": "Apache-2.0", @@ -8268,19 +8222,6 @@ "@firebase/app-types": "0.x" } }, - "node_modules/@firebase/logger": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", - "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, "node_modules/@firebase/messaging": { "version": "0.12.16", "license": "Apache-2.0", @@ -8636,20 +8577,6 @@ "node": ">=18.0.0" } }, - "node_modules/@firebase/util": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.15.0.tgz", - "integrity": "sha512-AmWf3cHAOMbrCPG4xdPKQaj5iHnyYfyLKZxwz+Xf55bqKbpAmcYifB4jQinT2W9XhDRHISOoPyBOariJpCG6FA==", - "hasInstallScript": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, "node_modules/@firebase/vertexai": { "version": "1.0.4", "license": "Apache-2.0", @@ -8860,12 +8787,12 @@ }, "node_modules/@hapi/hoek": { "version": "9.3.0", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause" }, "node_modules/@hapi/topo": { "version": "5.1.0", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" @@ -10423,7 +10350,7 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -10435,7 +10362,7 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -10443,7 +10370,7 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -11141,7 +11068,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-20.0.0.tgz", "integrity": "sha512-/cMnGl5V1rqnbElY1Fvga1vfw0d3bnqiJLx2+2oh7l9ulnXfVRWb5tU2kgBqiMxuDOKA+DQoifC9q/tvkj5K2w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-clean": "20.0.0", @@ -11171,7 +11098,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-20.0.0.tgz", "integrity": "sha512-YmdNRcT+Dp8lC7CfxSDIfPMbVPEXVFzBH62VZNbYGxjyakqAvoQUFTYPgM2AyFusAr4wDFbDOsEv88gCDwR3ig==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-tools": "20.0.0", @@ -11184,7 +11111,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -11200,7 +11127,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -11217,7 +11144,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -11230,14 +11157,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@react-native-community/cli-clean/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -11247,7 +11174,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -11260,7 +11187,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-20.0.0.tgz", "integrity": "sha512-5Ky9ceYuDqG62VIIpbOmkg8Lybj2fUjf/5wK4UO107uRqejBgNgKsbGnIZgEhREcaSEOkujWrroJ9gweueLfBg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-tools": "20.0.0", @@ -11275,7 +11202,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-android/-/cli-config-android-20.0.0.tgz", "integrity": "sha512-asv60qYCnL1v0QFWcG9r1zckeFlKG+14GGNyPXY72Eea7RX5Cxdx8Pb6fIPKroWH1HEWjYH9KKHksMSnf9FMKw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-tools": "20.0.0", @@ -11288,7 +11215,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -11304,7 +11231,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -11321,7 +11248,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -11334,14 +11261,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@react-native-community/cli-config-android/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -11351,7 +11278,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -11364,7 +11291,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-apple/-/cli-config-apple-20.0.0.tgz", "integrity": "sha512-PS1gNOdpeQ6w7dVu1zi++E+ix2D0ZkGC2SQP6Y/Qp002wG4se56esLXItYiiLrJkhH21P28fXdmYvTEkjSm9/Q==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-tools": "20.0.0", @@ -11377,7 +11304,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -11393,7 +11320,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -11410,7 +11337,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -11423,14 +11350,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@react-native-community/cli-config-apple/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -11440,7 +11367,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -11453,7 +11380,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -11469,14 +11396,14 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "devOptional": true, + "dev": true, "license": "Python-2.0" }, "node_modules/@react-native-community/cli-config/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -11493,7 +11420,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -11506,14 +11433,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@react-native-community/cli-config/node_modules/cosmiconfig": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "env-paths": "^2.2.1", @@ -11540,7 +11467,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -11550,7 +11477,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -11563,7 +11490,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -11576,7 +11503,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-20.0.0.tgz", "integrity": "sha512-cPHspi59+Fy41FDVxt62ZWoicCZ1o34k8LAl64NVSY0lwPl+CEi78jipXJhtfkVqSTetloA8zexa/vSAcJy57Q==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-config": "20.0.0", @@ -11600,7 +11527,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -11616,7 +11543,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -11633,7 +11560,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -11646,14 +11573,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@react-native-community/cli-doctor/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -11663,7 +11590,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -11676,7 +11603,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-20.0.0.tgz", "integrity": "sha512-th3ji1GRcV6ACelgC0wJtt9daDZ+63/52KTwL39xXGoqczFjml4qERK90/ppcXU0Ilgq55ANF8Pr+UotQ2AB/A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-config-android": "20.0.0", @@ -11690,7 +11617,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -11706,7 +11633,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -11723,7 +11650,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -11736,14 +11663,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@react-native-community/cli-platform-android/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -11753,7 +11680,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -11766,7 +11693,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-20.0.0.tgz", "integrity": "sha512-rZZCnAjUHN1XBgiWTAMwEKpbVTO4IHBSecdd1VxJFeTZ7WjmstqA6L/HXcnueBgxrzTCRqvkRIyEQXxC1OfhGw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-config-apple": "20.0.0", @@ -11780,7 +11707,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -11796,7 +11723,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -11813,7 +11740,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -11826,14 +11753,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@react-native-community/cli-platform-apple/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -11843,7 +11770,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -11856,7 +11783,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-20.0.0.tgz", "integrity": "sha512-Z35M+4gUJgtS4WqgpKU9/XYur70nmj3Q65c9USyTq6v/7YJ4VmBkmhC9BticPs6wuQ9Jcv0NyVCY0Wmh6kMMYw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-platform-apple": "20.0.0" @@ -11866,7 +11793,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-20.0.0.tgz", "integrity": "sha512-Ves21bXtjUK3tQbtqw/NdzpMW1vR2HvYCkUQ/MXKrJcPjgJnXQpSnTqHXz6ZdBlMbbwLJXOhSPiYzxb5/v4CDg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-tools": "20.0.0", @@ -11885,7 +11812,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -11895,7 +11822,7 @@ "version": "6.4.0", "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "is-wsl": "^1.1.0" @@ -11908,7 +11835,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-20.0.0.tgz", "integrity": "sha512-akSZGxr1IajJ8n0YCwQoA3DI0HttJ0WB7M3nVpb0lOM+rJpsBN7WG5Ft+8ozb6HyIPX+O+lLeYazxn5VNG/Xhw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@vscode/sudo-prompt": "^9.0.0", @@ -11927,7 +11854,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -11943,7 +11870,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -11960,7 +11887,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -11973,14 +11900,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@react-native-community/cli-tools/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -11990,7 +11917,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -12003,7 +11930,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-20.0.0.tgz", "integrity": "sha512-7J4hzGWOPTBV1d30Pf2NidV+bfCWpjfCOiGO3HUhz1fH4MvBM0FbbBmE9LE5NnMz7M8XSRSi68ZGYQXgLBB2Qw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "joi": "^17.2.1" @@ -12011,7 +11938,7 @@ }, "node_modules/@react-native-community/cli/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -12025,7 +11952,7 @@ }, "node_modules/@react-native-community/cli/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -12040,7 +11967,7 @@ }, "node_modules/@react-native-community/cli/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -12051,12 +11978,12 @@ }, "node_modules/@react-native-community/cli/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@react-native-community/cli/node_modules/commander": { "version": "9.5.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": "^12.20.0 || >=14" @@ -12064,7 +11991,7 @@ }, "node_modules/@react-native-community/cli/node_modules/fs-extra": { "version": "8.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -12077,7 +12004,7 @@ }, "node_modules/@react-native-community/cli/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -12085,7 +12012,7 @@ }, "node_modules/@react-native-community/cli/node_modules/jsonfile": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" @@ -12093,7 +12020,7 @@ }, "node_modules/@react-native-community/cli/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -12104,7 +12031,7 @@ }, "node_modules/@react-native-community/cli/node_modules/universalify": { "version": "0.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 4.0.0" @@ -12194,6 +12121,7 @@ "version": "0.83.1", "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.83.1.tgz", "integrity": "sha512-VPj8O3pG1ESjZho9WVKxqiuryrotAECPHGF5mx46zLUYNTWR5u9OMUXYk7LeLy+JLWdGEZ2Gn3KoXeFZbuqE+g==", + "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.3", @@ -12207,6 +12135,7 @@ "version": "0.83.1", "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.83.1.tgz", "integrity": "sha512-xI+tbsD4fXcI6PVU4sauRCh0a5fuLQC849SINmU2J5wP8kzKu4Ye0YkGjUW3mfGrjaZcjkWmF6s33jpyd3gdTw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -12425,6 +12354,7 @@ "version": "0.83.1", "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.83.1.tgz", "integrity": "sha512-fqt6DHWX1GBGDKa5WJOjDtPPy2M9lkYVLn59fBeFQ0GXhBRzNbUh8JzWWI/Q2CLDZ2tgKCcwaiXJ1OHWVd2BCQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -12443,6 +12373,7 @@ "version": "0.83.1", "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.83.1.tgz", "integrity": "sha512-1rjYZf62fCm6QAinHmRAKnJxIypX0VF/zBPd0qWvWABMZugrS0eACuIbk9Wk0StBod4yL8KnwEJyg77ak8xYzQ==", + "dev": true, "license": "MIT", "dependencies": { "@react-native/js-polyfills": "0.83.1", @@ -14327,7 +14258,7 @@ }, "node_modules/@sideway/address": { "version": "4.1.5", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" @@ -14335,12 +14266,12 @@ }, "node_modules/@sideway/formula": { "version": "3.0.1", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause" }, "node_modules/@sideway/pinpoint": { "version": "2.0.0", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause" }, "node_modules/@sinclair/typebox": { @@ -15966,76 +15897,6 @@ "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/@testing-library/dom": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", - "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.3.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "picocolors": "1.1.1", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@testing-library/dom/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/dom/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@testing-library/dom/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/@testing-library/jest-dom": { "version": "6.9.1", "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", @@ -16306,22 +16167,22 @@ }, "node_modules/@tsconfig/node10": { "version": "1.0.9", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@turf/along": { @@ -16551,14 +16412,6 @@ "tslib": "^2.4.0" } }, - "node_modules/@types/aria-query": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", - "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/@types/babel__core": { "version": "7.20.5", "license": "MIT", @@ -16985,6 +16838,7 @@ "version": "19.2.14", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", + "dev": true, "license": "MIT", "dependencies": { "csstype": "^3.2.2" @@ -17002,6 +16856,7 @@ "version": "19.2.3", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, "license": "MIT", "peerDependencies": { "@types/react": "^19.2.0" @@ -17015,17 +16870,6 @@ "@types/react": "*" } }, - "node_modules/@types/react-native": { - "version": "0.72.8", - "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.72.8.tgz", - "integrity": "sha512-St6xA7+EoHN5mEYfdWnfYt0e8u6k2FR0P9s2arYgakQGFgU1f9FlPrIEcj0X24pLCF5c5i3WVuLCUdiCYHmOoA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@react-native/virtualized-lists": "^0.72.4", - "@types/react": "*" - } - }, "node_modules/@types/react-native-web": { "version": "0.19.2", "resolved": "https://registry.npmjs.org/@types/react-native-web/-/react-native-web-0.19.2.tgz", @@ -17037,20 +16881,6 @@ "react-native": "*" } }, - "node_modules/@types/react-native/node_modules/@react-native/virtualized-lists": { - "version": "0.72.8", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.72.8.tgz", - "integrity": "sha512-J3Q4Bkuo99k7mu+jPS9gSUSgq+lLRSI/+ahXNwV92XgJ/8UgOTxu2LPwhJnBk/sQKxq7E8WkZBnBiozukQMqrw==", - "license": "MIT", - "peer": true, - "dependencies": { - "invariant": "^2.2.4", - "nullthrows": "^1.1.1" - }, - "peerDependencies": { - "react-native": "*" - } - }, "node_modules/@types/react-reconciler": { "version": "0.28.9", "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.9.tgz", @@ -17726,7 +17556,7 @@ }, "node_modules/@vscode/sudo-prompt": { "version": "9.3.1", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@vue/preload-webpack-plugin": { @@ -18049,7 +17879,7 @@ "version": "8.3.4", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "acorn": "^8.11.0" @@ -18158,7 +17988,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "colorette": "^1.0.7", @@ -18170,7 +18000,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -18180,7 +18010,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -18190,7 +18020,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^3.2.0", @@ -18205,7 +18035,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^4.1.0" @@ -18247,7 +18077,7 @@ }, "node_modules/ansi-styles": { "version": "3.2.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^1.9.0" @@ -18287,7 +18117,7 @@ }, "node_modules/appdirsjs": { "version": "1.2.7", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/are-docs-informative": { @@ -18302,7 +18132,7 @@ }, "node_modules/arg": { "version": "4.1.3", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/argparse": { @@ -19240,7 +19070,7 @@ }, "node_modules/bl": { "version": "4.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "buffer": "^5.5.0", @@ -19250,7 +19080,7 @@ }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -19263,7 +19093,7 @@ }, "node_modules/body-parser": { "version": "1.20.3", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -19286,7 +19116,7 @@ }, "node_modules/body-parser/node_modules/bytes": { "version": "3.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -19294,7 +19124,7 @@ }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -19302,7 +19132,7 @@ }, "node_modules/body-parser/node_modules/iconv-lite": { "version": "0.4.24", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -19313,7 +19143,7 @@ }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/bonjour-service": { @@ -19574,7 +19404,7 @@ }, "node_modules/callsites": { "version": "3.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -19957,7 +19787,7 @@ }, "node_modules/cli-cursor": { "version": "3.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" @@ -20086,7 +19916,7 @@ }, "node_modules/color-convert": { "version": "1.9.3", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -20122,7 +19952,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/combined-stream": { @@ -20142,7 +19972,7 @@ "version": "1.2.9", "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/command-line-args": { @@ -20513,7 +20343,7 @@ }, "node_modules/content-type": { "version": "1.0.5", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -20801,7 +20631,7 @@ }, "node_modules/create-require": { "version": "1.1.1", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/create-storybook": { @@ -21940,7 +21770,7 @@ }, "node_modules/diff": { "version": "4.0.2", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -21996,14 +21826,6 @@ "node": ">=6.0.0" } }, - "node_modules/dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/dom-converter": { "version": "0.2.0", "dev": true, @@ -22243,7 +22065,7 @@ }, "node_modules/env-paths": { "version": "2.2.1", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -22251,7 +22073,7 @@ }, "node_modules/envinfo": { "version": "7.13.0", - "devOptional": true, + "dev": true, "license": "MIT", "bin": { "envinfo": "dist/cli.js" @@ -22262,7 +22084,7 @@ }, "node_modules/error-ex": { "version": "1.3.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" @@ -22277,7 +22099,7 @@ }, "node_modules/errorhandler": { "version": "1.5.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "accepts": "~1.3.7", @@ -23642,7 +23464,7 @@ }, "node_modules/execa": { "version": "5.1.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", @@ -24041,21 +23863,6 @@ "node": ">=8" } }, - "node_modules/expo-modules-autolinking/node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, "node_modules/expo-modules-core": { "version": "55.0.16", "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-55.0.16.tgz", @@ -24786,21 +24593,6 @@ "node": ">=8" } }, - "node_modules/expo/node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, "node_modules/exponential-backoff": { "version": "3.1.1", "license": "Apache-2.0" @@ -24928,14 +24720,6 @@ "version": "3.1.3", "license": "MIT" }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true, - "license": "Apache-2.0", - "peer": true - }, "node_modules/fast-equals": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.4.0.tgz", @@ -24947,7 +24731,7 @@ }, "node_modules/fast-glob": { "version": "3.3.3", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -24976,7 +24760,7 @@ }, "node_modules/fast-xml-parser": { "version": "4.4.1", - "devOptional": true, + "dev": true, "funding": [ { "type": "github", @@ -25005,7 +24789,7 @@ }, "node_modules/fastq": { "version": "1.13.0", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -25255,7 +25039,7 @@ }, "node_modules/find-up": { "version": "5.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "locate-path": "^6.0.0", @@ -25283,7 +25067,7 @@ }, "node_modules/find-up/node_modules/path-exists": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -26169,7 +25953,7 @@ }, "node_modules/glob-parent": { "version": "5.1.2", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -26920,7 +26704,7 @@ }, "node_modules/human-signals": { "version": "2.1.0", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=10.17.0" @@ -27016,7 +26800,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -27031,7 +26815,7 @@ }, "node_modules/import-fresh/node_modules/resolve-from": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -27167,7 +26951,7 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/is-async-function": { @@ -27340,7 +27124,7 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -27393,7 +27177,7 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -27435,7 +27219,7 @@ }, "node_modules/is-interactive": { "version": "1.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -27616,7 +27400,7 @@ }, "node_modules/is-stream": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -27675,7 +27459,7 @@ }, "node_modules/is-unicode-supported": { "version": "0.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -30156,7 +29940,7 @@ }, "node_modules/joi": { "version": "17.13.3", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.3.0", @@ -30520,7 +30304,7 @@ }, "node_modules/launch-editor": { "version": "2.10.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "picocolors": "^1.0.0", @@ -30810,7 +30594,7 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/link": { @@ -30861,7 +30645,7 @@ }, "node_modules/locate-path": { "version": "6.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "p-locate": "^5.0.0" @@ -30900,14 +30684,6 @@ "deprecated": "This package is deprecated. Use structuredClone instead.", "license": "MIT" }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/lodash.debounce": { "version": "4.0.8", "license": "MIT" @@ -30958,7 +30734,7 @@ }, "node_modules/log-symbols": { "version": "4.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.0", @@ -30973,7 +30749,7 @@ }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -30987,7 +30763,7 @@ }, "node_modules/log-symbols/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -31002,7 +30778,7 @@ }, "node_modules/log-symbols/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -31013,12 +30789,12 @@ }, "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -31026,7 +30802,7 @@ }, "node_modules/log-symbols/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -31039,7 +30815,7 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-fragments": "^0.2.1", @@ -31115,17 +30891,6 @@ "node": ">=10" } }, - "node_modules/lz-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "lz-string": "bin/bin.js" - } - }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -31173,7 +30938,7 @@ }, "node_modules/make-error": { "version": "1.3.6", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/make-event-props": { @@ -31274,7 +31039,7 @@ }, "node_modules/media-typer": { "version": "0.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -31369,7 +31134,7 @@ }, "node_modules/merge2": { "version": "1.4.1", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -32356,7 +32121,7 @@ }, "node_modules/mime": { "version": "2.6.0", - "devOptional": true, + "dev": true, "license": "MIT", "bin": { "mime": "cli.js" @@ -32384,7 +32149,7 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -32635,7 +32400,7 @@ }, "node_modules/nocache": { "version": "3.0.4", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=12.0.0" @@ -32730,7 +32495,7 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -32764,7 +32529,7 @@ }, "node_modules/npm-run-path": { "version": "4.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.0.0" @@ -32997,7 +32762,7 @@ }, "node_modules/onetime": { "version": "5.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" @@ -33077,7 +32842,7 @@ }, "node_modules/ora": { "version": "5.4.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "bl": "^4.1.0", @@ -33099,7 +32864,7 @@ }, "node_modules/ora/node_modules/ansi-styles": { "version": "4.3.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -33113,7 +32878,7 @@ }, "node_modules/ora/node_modules/chalk": { "version": "4.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -33128,7 +32893,7 @@ }, "node_modules/ora/node_modules/color-convert": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -33139,12 +32904,12 @@ }, "node_modules/ora/node_modules/color-name": { "version": "1.1.4", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/ora/node_modules/has-flag": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -33152,7 +32917,7 @@ }, "node_modules/ora/node_modules/supports-color": { "version": "7.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -33221,7 +32986,7 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -33235,7 +33000,7 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "p-limit": "^3.0.2" @@ -33289,7 +33054,7 @@ }, "node_modules/parent-module": { "version": "1.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -33310,7 +33075,7 @@ }, "node_modules/parse-json": { "version": "5.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", @@ -34195,7 +33960,7 @@ }, "node_modules/qs": { "version": "6.13.0", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" @@ -34241,7 +34006,7 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "devOptional": true, + "dev": true, "funding": [ { "type": "github", @@ -34262,22 +34027,6 @@ "version": "2.0.0", "license": "ISC" }, - "node_modules/quill-delta": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-5.1.0.tgz", - "integrity": "sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "fast-diff": "^1.3.0", - "lodash.clonedeep": "^4.5.0", - "lodash.isequal": "^4.5.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, "node_modules/randombytes": { "version": "2.1.0", "license": "MIT", @@ -34294,7 +34043,7 @@ }, "node_modules/raw-body": { "version": "2.5.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -34308,7 +34057,7 @@ }, "node_modules/raw-body/node_modules/bytes": { "version": "3.1.2", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -34316,7 +34065,7 @@ }, "node_modules/raw-body/node_modules/iconv-lite": { "version": "0.4.24", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -35691,13 +35440,6 @@ "node": ">=6" } }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "license": "Apache-2.0", - "peer": true - }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -35971,7 +35713,7 @@ }, "node_modules/restore-cursor": { "version": "3.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "onetime": "^5.1.0", @@ -35991,7 +35733,7 @@ }, "node_modules/reusify": { "version": "1.0.4", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -36098,7 +35840,7 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "devOptional": true, + "dev": true, "funding": [ { "type": "github", @@ -36190,7 +35932,7 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/sax": { @@ -36461,7 +36203,7 @@ }, "node_modules/serve-static": { "version": "1.16.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "encodeurl": "~1.0.2", @@ -37360,7 +37102,7 @@ }, "node_modules/string_decoder": { "version": "1.1.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" @@ -37613,7 +37355,7 @@ }, "node_modules/strip-final-newline": { "version": "2.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -37643,7 +37385,7 @@ }, "node_modules/strnum": { "version": "1.0.5", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/structured-headers": { @@ -38600,7 +38342,7 @@ }, "node_modules/ts-node": { "version": "10.9.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -38740,7 +38482,7 @@ }, "node_modules/type-is": { "version": "1.6.18", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "media-typer": "0.3.0", @@ -38838,7 +38580,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -39186,7 +38928,7 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/utila": { @@ -39218,7 +38960,7 @@ }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/v8-to-istanbul": { @@ -40791,7 +40533,7 @@ }, "node_modules/yn": { "version": "3.1.1", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -40799,7 +40541,7 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" From 6daa8c47b219ca2226086085a52846634fc8c224 Mon Sep 17 00:00:00 2001 From: rory Date: Wed, 29 Apr 2026 09:24:32 -0700 Subject: [PATCH 02/38] chore: update Podfile.lock for react-native-screens 4.25.0-beta.1 Made-with: Cursor --- ios/Podfile.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 1383bfb653f0..821871d000fb 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -3971,7 +3971,7 @@ PODS: - RNWorklets - SocketRocket - Yoga - - RNScreens (4.25.0): + - RNScreens (4.25.0-beta.1): - boost - DoubleConversion - fast_float @@ -3998,10 +3998,10 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNScreens/common (= 4.25.0) + - RNScreens/common (= 4.25.0-beta.1) - SocketRocket - Yoga - - RNScreens/common (4.25.0): + - RNScreens/common (4.25.0-beta.1): - boost - DoubleConversion - fast_float @@ -4808,7 +4808,7 @@ SPEC CHECKSUMS: GTMAppAuth: f69bd07d68cd3b766125f7e072c45d7340dea0de GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6 GzipSwift: 893f3e48e597a1a4f62fafcb6514220fcf8287fa - hermes-engine: b39ec807040f5a775de027a4a9647c0f4222c6ef + hermes-engine: 164a2a741070fc695f1930a2d7a5b885a98c32ce libavif: 84bbb62fb232c3018d6f1bab79beea87e35de7b7 libdav1d: 23581a4d8ec811ff171ed5e2e05cd27bad64c39f libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 @@ -4934,8 +4934,8 @@ SPEC CHECKSUMS: RNNitroSQLite: a9b5965d511ed6e99ce903380e64934d043a0d2c RNPermissions: 518f0a0c439acc74e2b9937e0e7d29e5031ae949 RNReactNativeHapticFeedback: 5f1542065f0b24c9252bd8cf3e83bc9c548182e4 - RNReanimated: a0068c25e0b27d5418d66289a915f53eb97380df - RNScreens: 2b6107925ee4e14a9b2eb0dfb52fe25223aa64d7 + RNReanimated: fbcb7fd8da5b0b088401542c58fb5d266388f1cf + RNScreens: f157fcda842dd004cbb55e536d592f20e805fb0b RNSentry: f73f4da92e4c20841ab16e1fa22fc289bc2f9f4e RNShare: 1c1fde2c4134b9cf220ffebbd6df9c414036d382 RNSVG: 74eb75bd44d62ba9969941e80d8f9832971c681f From df1fb2d3dd324f7a1cde21f19f5b32ae665a12ae Mon Sep 17 00:00:00 2001 From: rory Date: Wed, 29 Apr 2026 10:13:16 -0700 Subject: [PATCH 03/38] fix: use npm overrides instead of legacy-peer-deps for beta version npm strict mode excludes pre-release versions from satisfying semver ranges like >=4.0.0, so npm ci was rejecting 4.25.0-beta.1 as a peer dep satisfier. Using npm overrides pins the version explicitly, bypassing ERESOLVE, without changing the global resolution algorithm like legacy-peer-deps=true would. Made-with: Cursor --- .npmrc | 1 - package-lock.json | 646 ++++++++++++++++++++++++++++++++-------------- 2 files changed, 454 insertions(+), 193 deletions(-) diff --git a/.npmrc b/.npmrc index d5831dd51888..b6f27f135954 100644 --- a/.npmrc +++ b/.npmrc @@ -1,2 +1 @@ engine-strict=true -legacy-peer-deps=true diff --git a/package-lock.json b/package-lock.json index 80785de4a648..73572567aec5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4739,7 +4739,7 @@ }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" @@ -4750,7 +4750,7 @@ }, "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", @@ -5900,6 +5900,21 @@ "node": ">=8" } }, + "node_modules/@expo/config/node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/@expo/devcert": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.2.1.tgz", @@ -7564,6 +7579,23 @@ "node": ">=18.0.0" } }, + "node_modules/@firebase/app": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.14.11.tgz", + "integrity": "sha512-yxADFW35LYkP8oSGobGsYIrI42I+GPCvKTNHx4meT9Yq3C950IVz1eANoBk822I9tbKv1wyv9P4Bv1G5TpucFw==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@firebase/component": "0.7.2", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.15.0", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@firebase/app-check": { "version": "0.8.11", "license": "Apache-2.0", @@ -7834,6 +7866,20 @@ "node": ">=18.0.0" } }, + "node_modules/@firebase/component": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.2.tgz", + "integrity": "sha512-iyVDGc6Vjx7Rm0cAdccLH/NG6fADsgJak/XW9IA2lPf8AjIlsemOpFGKczYyPHxm4rnKdR8z6sK4+KEC7NwmEg==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@firebase/util": "1.15.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@firebase/data-connect": { "version": "0.3.0", "license": "Apache-2.0", @@ -8222,6 +8268,19 @@ "@firebase/app-types": "0.x" } }, + "node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@firebase/messaging": { "version": "0.12.16", "license": "Apache-2.0", @@ -8577,6 +8636,20 @@ "node": ">=18.0.0" } }, + "node_modules/@firebase/util": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.15.0.tgz", + "integrity": "sha512-AmWf3cHAOMbrCPG4xdPKQaj5iHnyYfyLKZxwz+Xf55bqKbpAmcYifB4jQinT2W9XhDRHISOoPyBOariJpCG6FA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@firebase/vertexai": { "version": "1.0.4", "license": "Apache-2.0", @@ -8787,12 +8860,12 @@ }, "node_modules/@hapi/hoek": { "version": "9.3.0", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause" }, "node_modules/@hapi/topo": { "version": "5.1.0", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" @@ -10350,7 +10423,7 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -10362,7 +10435,7 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 8" @@ -10370,7 +10443,7 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -11068,7 +11141,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-20.0.0.tgz", "integrity": "sha512-/cMnGl5V1rqnbElY1Fvga1vfw0d3bnqiJLx2+2oh7l9ulnXfVRWb5tU2kgBqiMxuDOKA+DQoifC9q/tvkj5K2w==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native-community/cli-clean": "20.0.0", @@ -11098,7 +11171,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-20.0.0.tgz", "integrity": "sha512-YmdNRcT+Dp8lC7CfxSDIfPMbVPEXVFzBH62VZNbYGxjyakqAvoQUFTYPgM2AyFusAr4wDFbDOsEv88gCDwR3ig==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native-community/cli-tools": "20.0.0", @@ -11111,7 +11184,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -11127,7 +11200,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -11144,7 +11217,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -11157,14 +11230,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@react-native-community/cli-clean/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -11174,7 +11247,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -11187,7 +11260,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-20.0.0.tgz", "integrity": "sha512-5Ky9ceYuDqG62VIIpbOmkg8Lybj2fUjf/5wK4UO107uRqejBgNgKsbGnIZgEhREcaSEOkujWrroJ9gweueLfBg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native-community/cli-tools": "20.0.0", @@ -11202,7 +11275,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-android/-/cli-config-android-20.0.0.tgz", "integrity": "sha512-asv60qYCnL1v0QFWcG9r1zckeFlKG+14GGNyPXY72Eea7RX5Cxdx8Pb6fIPKroWH1HEWjYH9KKHksMSnf9FMKw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native-community/cli-tools": "20.0.0", @@ -11215,7 +11288,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -11231,7 +11304,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -11248,7 +11321,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -11261,14 +11334,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@react-native-community/cli-config-android/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -11278,7 +11351,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -11291,7 +11364,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-config-apple/-/cli-config-apple-20.0.0.tgz", "integrity": "sha512-PS1gNOdpeQ6w7dVu1zi++E+ix2D0ZkGC2SQP6Y/Qp002wG4se56esLXItYiiLrJkhH21P28fXdmYvTEkjSm9/Q==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native-community/cli-tools": "20.0.0", @@ -11304,7 +11377,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -11320,7 +11393,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -11337,7 +11410,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -11350,14 +11423,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@react-native-community/cli-config-apple/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -11367,7 +11440,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -11380,7 +11453,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -11396,14 +11469,14 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, + "devOptional": true, "license": "Python-2.0" }, "node_modules/@react-native-community/cli-config/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -11420,7 +11493,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -11433,14 +11506,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@react-native-community/cli-config/node_modules/cosmiconfig": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "env-paths": "^2.2.1", @@ -11467,7 +11540,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -11477,7 +11550,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -11490,7 +11563,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -11503,7 +11576,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-20.0.0.tgz", "integrity": "sha512-cPHspi59+Fy41FDVxt62ZWoicCZ1o34k8LAl64NVSY0lwPl+CEi78jipXJhtfkVqSTetloA8zexa/vSAcJy57Q==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native-community/cli-config": "20.0.0", @@ -11527,7 +11600,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -11543,7 +11616,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -11560,7 +11633,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -11573,14 +11646,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@react-native-community/cli-doctor/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -11590,7 +11663,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -11603,7 +11676,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-20.0.0.tgz", "integrity": "sha512-th3ji1GRcV6ACelgC0wJtt9daDZ+63/52KTwL39xXGoqczFjml4qERK90/ppcXU0Ilgq55ANF8Pr+UotQ2AB/A==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native-community/cli-config-android": "20.0.0", @@ -11617,7 +11690,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -11633,7 +11706,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -11650,7 +11723,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -11663,14 +11736,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@react-native-community/cli-platform-android/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -11680,7 +11753,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -11693,7 +11766,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-20.0.0.tgz", "integrity": "sha512-rZZCnAjUHN1XBgiWTAMwEKpbVTO4IHBSecdd1VxJFeTZ7WjmstqA6L/HXcnueBgxrzTCRqvkRIyEQXxC1OfhGw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native-community/cli-config-apple": "20.0.0", @@ -11707,7 +11780,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -11723,7 +11796,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -11740,7 +11813,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -11753,14 +11826,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@react-native-community/cli-platform-apple/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -11770,7 +11843,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -11783,7 +11856,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-20.0.0.tgz", "integrity": "sha512-Z35M+4gUJgtS4WqgpKU9/XYur70nmj3Q65c9USyTq6v/7YJ4VmBkmhC9BticPs6wuQ9Jcv0NyVCY0Wmh6kMMYw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native-community/cli-platform-apple": "20.0.0" @@ -11793,7 +11866,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-20.0.0.tgz", "integrity": "sha512-Ves21bXtjUK3tQbtqw/NdzpMW1vR2HvYCkUQ/MXKrJcPjgJnXQpSnTqHXz6ZdBlMbbwLJXOhSPiYzxb5/v4CDg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native-community/cli-tools": "20.0.0", @@ -11812,7 +11885,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -11822,7 +11895,7 @@ "version": "6.4.0", "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-wsl": "^1.1.0" @@ -11835,7 +11908,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-20.0.0.tgz", "integrity": "sha512-akSZGxr1IajJ8n0YCwQoA3DI0HttJ0WB7M3nVpb0lOM+rJpsBN7WG5Ft+8ozb6HyIPX+O+lLeYazxn5VNG/Xhw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@vscode/sudo-prompt": "^9.0.0", @@ -11854,7 +11927,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -11870,7 +11943,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -11887,7 +11960,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -11900,14 +11973,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@react-native-community/cli-tools/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -11917,7 +11990,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -11930,7 +12003,7 @@ "version": "20.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-20.0.0.tgz", "integrity": "sha512-7J4hzGWOPTBV1d30Pf2NidV+bfCWpjfCOiGO3HUhz1fH4MvBM0FbbBmE9LE5NnMz7M8XSRSi68ZGYQXgLBB2Qw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "joi": "^17.2.1" @@ -11938,7 +12011,7 @@ }, "node_modules/@react-native-community/cli/node_modules/ansi-styles": { "version": "4.3.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -11952,7 +12025,7 @@ }, "node_modules/@react-native-community/cli/node_modules/chalk": { "version": "4.1.2", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -11967,7 +12040,7 @@ }, "node_modules/@react-native-community/cli/node_modules/color-convert": { "version": "2.0.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -11978,12 +12051,12 @@ }, "node_modules/@react-native-community/cli/node_modules/color-name": { "version": "1.1.4", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@react-native-community/cli/node_modules/commander": { "version": "9.5.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": "^12.20.0 || >=14" @@ -11991,7 +12064,7 @@ }, "node_modules/@react-native-community/cli/node_modules/fs-extra": { "version": "8.1.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -12004,7 +12077,7 @@ }, "node_modules/@react-native-community/cli/node_modules/has-flag": { "version": "4.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -12012,7 +12085,7 @@ }, "node_modules/@react-native-community/cli/node_modules/jsonfile": { "version": "4.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" @@ -12020,7 +12093,7 @@ }, "node_modules/@react-native-community/cli/node_modules/supports-color": { "version": "7.2.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -12031,7 +12104,7 @@ }, "node_modules/@react-native-community/cli/node_modules/universalify": { "version": "0.1.2", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 4.0.0" @@ -12121,7 +12194,7 @@ "version": "0.83.1", "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.83.1.tgz", "integrity": "sha512-VPj8O3pG1ESjZho9WVKxqiuryrotAECPHGF5mx46zLUYNTWR5u9OMUXYk7LeLy+JLWdGEZ2Gn3KoXeFZbuqE+g==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.3", @@ -12135,7 +12208,7 @@ "version": "0.83.1", "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.83.1.tgz", "integrity": "sha512-xI+tbsD4fXcI6PVU4sauRCh0a5fuLQC849SINmU2J5wP8kzKu4Ye0YkGjUW3mfGrjaZcjkWmF6s33jpyd3gdTw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -12354,7 +12427,7 @@ "version": "0.83.1", "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.83.1.tgz", "integrity": "sha512-fqt6DHWX1GBGDKa5WJOjDtPPy2M9lkYVLn59fBeFQ0GXhBRzNbUh8JzWWI/Q2CLDZ2tgKCcwaiXJ1OHWVd2BCQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -12373,7 +12446,7 @@ "version": "0.83.1", "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.83.1.tgz", "integrity": "sha512-1rjYZf62fCm6QAinHmRAKnJxIypX0VF/zBPd0qWvWABMZugrS0eACuIbk9Wk0StBod4yL8KnwEJyg77ak8xYzQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@react-native/js-polyfills": "0.83.1", @@ -14258,7 +14331,7 @@ }, "node_modules/@sideway/address": { "version": "4.1.5", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" @@ -14266,12 +14339,12 @@ }, "node_modules/@sideway/formula": { "version": "3.0.1", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause" }, "node_modules/@sideway/pinpoint": { "version": "2.0.0", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause" }, "node_modules/@sinclair/typebox": { @@ -15897,6 +15970,76 @@ "url": "https://github.com/sponsors/gregberge" } }, + "node_modules/@testing-library/dom": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@testing-library/dom/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/@testing-library/jest-dom": { "version": "6.9.1", "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", @@ -16167,22 +16310,22 @@ }, "node_modules/@tsconfig/node10": { "version": "1.0.9", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@turf/along": { @@ -16412,6 +16555,14 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/@types/babel__core": { "version": "7.20.5", "license": "MIT", @@ -16838,7 +16989,6 @@ "version": "19.2.14", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", - "dev": true, "license": "MIT", "dependencies": { "csstype": "^3.2.2" @@ -16856,7 +17006,6 @@ "version": "19.2.3", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", - "dev": true, "license": "MIT", "peerDependencies": { "@types/react": "^19.2.0" @@ -16870,6 +17019,17 @@ "@types/react": "*" } }, + "node_modules/@types/react-native": { + "version": "0.72.8", + "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.72.8.tgz", + "integrity": "sha512-St6xA7+EoHN5mEYfdWnfYt0e8u6k2FR0P9s2arYgakQGFgU1f9FlPrIEcj0X24pLCF5c5i3WVuLCUdiCYHmOoA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@react-native/virtualized-lists": "^0.72.4", + "@types/react": "*" + } + }, "node_modules/@types/react-native-web": { "version": "0.19.2", "resolved": "https://registry.npmjs.org/@types/react-native-web/-/react-native-web-0.19.2.tgz", @@ -16881,6 +17041,20 @@ "react-native": "*" } }, + "node_modules/@types/react-native/node_modules/@react-native/virtualized-lists": { + "version": "0.72.8", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.72.8.tgz", + "integrity": "sha512-J3Q4Bkuo99k7mu+jPS9gSUSgq+lLRSI/+ahXNwV92XgJ/8UgOTxu2LPwhJnBk/sQKxq7E8WkZBnBiozukQMqrw==", + "license": "MIT", + "peer": true, + "dependencies": { + "invariant": "^2.2.4", + "nullthrows": "^1.1.1" + }, + "peerDependencies": { + "react-native": "*" + } + }, "node_modules/@types/react-reconciler": { "version": "0.28.9", "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.9.tgz", @@ -17556,7 +17730,7 @@ }, "node_modules/@vscode/sudo-prompt": { "version": "9.3.1", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@vue/preload-webpack-plugin": { @@ -17879,7 +18053,7 @@ "version": "8.3.4", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "acorn": "^8.11.0" @@ -17988,7 +18162,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "colorette": "^1.0.7", @@ -18000,7 +18174,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -18010,7 +18184,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -18020,7 +18194,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^3.2.0", @@ -18035,7 +18209,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-regex": "^4.1.0" @@ -18077,7 +18251,7 @@ }, "node_modules/ansi-styles": { "version": "3.2.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^1.9.0" @@ -18117,7 +18291,7 @@ }, "node_modules/appdirsjs": { "version": "1.2.7", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/are-docs-informative": { @@ -18132,7 +18306,7 @@ }, "node_modules/arg": { "version": "4.1.3", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/argparse": { @@ -19070,7 +19244,7 @@ }, "node_modules/bl": { "version": "4.1.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "buffer": "^5.5.0", @@ -19080,7 +19254,7 @@ }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.2", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -19093,7 +19267,7 @@ }, "node_modules/body-parser": { "version": "1.20.3", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -19116,7 +19290,7 @@ }, "node_modules/body-parser/node_modules/bytes": { "version": "3.1.2", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -19124,7 +19298,7 @@ }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -19132,7 +19306,7 @@ }, "node_modules/body-parser/node_modules/iconv-lite": { "version": "0.4.24", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -19143,7 +19317,7 @@ }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/bonjour-service": { @@ -19404,7 +19578,7 @@ }, "node_modules/callsites": { "version": "3.1.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -19787,7 +19961,7 @@ }, "node_modules/cli-cursor": { "version": "3.1.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" @@ -19916,7 +20090,7 @@ }, "node_modules/color-convert": { "version": "1.9.3", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -19952,7 +20126,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/combined-stream": { @@ -19972,7 +20146,7 @@ "version": "1.2.9", "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/command-line-args": { @@ -20343,7 +20517,7 @@ }, "node_modules/content-type": { "version": "1.0.5", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -20631,7 +20805,7 @@ }, "node_modules/create-require": { "version": "1.1.1", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/create-storybook": { @@ -21770,7 +21944,7 @@ }, "node_modules/diff": { "version": "4.0.2", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -21826,6 +22000,14 @@ "node": ">=6.0.0" } }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/dom-converter": { "version": "0.2.0", "dev": true, @@ -22065,7 +22247,7 @@ }, "node_modules/env-paths": { "version": "2.2.1", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -22073,7 +22255,7 @@ }, "node_modules/envinfo": { "version": "7.13.0", - "dev": true, + "devOptional": true, "license": "MIT", "bin": { "envinfo": "dist/cli.js" @@ -22084,7 +22266,7 @@ }, "node_modules/error-ex": { "version": "1.3.2", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" @@ -22099,7 +22281,7 @@ }, "node_modules/errorhandler": { "version": "1.5.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "accepts": "~1.3.7", @@ -23464,7 +23646,7 @@ }, "node_modules/execa": { "version": "5.1.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", @@ -23863,6 +24045,21 @@ "node": ">=8" } }, + "node_modules/expo-modules-autolinking/node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/expo-modules-core": { "version": "55.0.16", "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-55.0.16.tgz", @@ -24593,6 +24790,21 @@ "node": ">=8" } }, + "node_modules/expo/node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/exponential-backoff": { "version": "3.1.1", "license": "Apache-2.0" @@ -24720,6 +24932,14 @@ "version": "3.1.3", "license": "MIT" }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0", + "peer": true + }, "node_modules/fast-equals": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.4.0.tgz", @@ -24731,7 +24951,7 @@ }, "node_modules/fast-glob": { "version": "3.3.3", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -24760,7 +24980,7 @@ }, "node_modules/fast-xml-parser": { "version": "4.4.1", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -24789,7 +25009,7 @@ }, "node_modules/fastq": { "version": "1.13.0", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -25039,7 +25259,7 @@ }, "node_modules/find-up": { "version": "5.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "locate-path": "^6.0.0", @@ -25067,7 +25287,7 @@ }, "node_modules/find-up/node_modules/path-exists": { "version": "4.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -25953,7 +26173,7 @@ }, "node_modules/glob-parent": { "version": "5.1.2", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -26704,7 +26924,7 @@ }, "node_modules/human-signals": { "version": "2.1.0", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "engines": { "node": ">=10.17.0" @@ -26800,7 +27020,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -26815,7 +27035,7 @@ }, "node_modules/import-fresh/node_modules/resolve-from": { "version": "4.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -26951,7 +27171,7 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/is-async-function": { @@ -27124,7 +27344,7 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -27177,7 +27397,7 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -27219,7 +27439,7 @@ }, "node_modules/is-interactive": { "version": "1.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -27400,7 +27620,7 @@ }, "node_modules/is-stream": { "version": "2.0.1", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -27459,7 +27679,7 @@ }, "node_modules/is-unicode-supported": { "version": "0.1.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=10" @@ -29940,7 +30160,7 @@ }, "node_modules/joi": { "version": "17.13.3", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.3.0", @@ -30304,7 +30524,7 @@ }, "node_modules/launch-editor": { "version": "2.10.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "picocolors": "^1.0.0", @@ -30594,7 +30814,7 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/link": { @@ -30645,7 +30865,7 @@ }, "node_modules/locate-path": { "version": "6.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "p-locate": "^5.0.0" @@ -30684,6 +30904,14 @@ "deprecated": "This package is deprecated. Use structuredClone instead.", "license": "MIT" }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/lodash.debounce": { "version": "4.0.8", "license": "MIT" @@ -30734,7 +30962,7 @@ }, "node_modules/log-symbols": { "version": "4.1.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "chalk": "^4.1.0", @@ -30749,7 +30977,7 @@ }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -30763,7 +30991,7 @@ }, "node_modules/log-symbols/node_modules/chalk": { "version": "4.1.2", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -30778,7 +31006,7 @@ }, "node_modules/log-symbols/node_modules/color-convert": { "version": "2.0.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -30789,12 +31017,12 @@ }, "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.4", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -30802,7 +31030,7 @@ }, "node_modules/log-symbols/node_modules/supports-color": { "version": "7.2.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -30815,7 +31043,7 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-fragments": "^0.2.1", @@ -30891,6 +31119,17 @@ "node": ">=10" } }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -30938,7 +31177,7 @@ }, "node_modules/make-error": { "version": "1.3.6", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/make-event-props": { @@ -31039,7 +31278,7 @@ }, "node_modules/media-typer": { "version": "0.3.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -31134,7 +31373,7 @@ }, "node_modules/merge2": { "version": "1.4.1", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 8" @@ -32121,7 +32360,7 @@ }, "node_modules/mime": { "version": "2.6.0", - "dev": true, + "devOptional": true, "license": "MIT", "bin": { "mime": "cli.js" @@ -32149,7 +32388,7 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -32400,7 +32639,7 @@ }, "node_modules/nocache": { "version": "3.0.4", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=12.0.0" @@ -32495,7 +32734,7 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -32529,7 +32768,7 @@ }, "node_modules/npm-run-path": { "version": "4.0.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "path-key": "^3.0.0" @@ -32762,7 +33001,7 @@ }, "node_modules/onetime": { "version": "5.1.2", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" @@ -32842,7 +33081,7 @@ }, "node_modules/ora": { "version": "5.4.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "bl": "^4.1.0", @@ -32864,7 +33103,7 @@ }, "node_modules/ora/node_modules/ansi-styles": { "version": "4.3.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -32878,7 +33117,7 @@ }, "node_modules/ora/node_modules/chalk": { "version": "4.1.2", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -32893,7 +33132,7 @@ }, "node_modules/ora/node_modules/color-convert": { "version": "2.0.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -32904,12 +33143,12 @@ }, "node_modules/ora/node_modules/color-name": { "version": "1.1.4", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/ora/node_modules/has-flag": { "version": "4.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -32917,7 +33156,7 @@ }, "node_modules/ora/node_modules/supports-color": { "version": "7.2.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -32986,7 +33225,7 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -33000,7 +33239,7 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "p-limit": "^3.0.2" @@ -33054,7 +33293,7 @@ }, "node_modules/parent-module": { "version": "1.0.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -33075,7 +33314,7 @@ }, "node_modules/parse-json": { "version": "5.2.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", @@ -33960,7 +34199,7 @@ }, "node_modules/qs": { "version": "6.13.0", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" @@ -34006,7 +34245,7 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -34027,6 +34266,22 @@ "version": "2.0.0", "license": "ISC" }, + "node_modules/quill-delta": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-5.1.0.tgz", + "integrity": "sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-diff": "^1.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.isequal": "^4.5.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, "node_modules/randombytes": { "version": "2.1.0", "license": "MIT", @@ -34043,7 +34298,7 @@ }, "node_modules/raw-body": { "version": "2.5.2", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -34057,7 +34312,7 @@ }, "node_modules/raw-body/node_modules/bytes": { "version": "3.1.2", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -34065,7 +34320,7 @@ }, "node_modules/raw-body/node_modules/iconv-lite": { "version": "0.4.24", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -35440,6 +35695,13 @@ "node": ">=6" } }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0", + "peer": true + }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -35713,7 +35975,7 @@ }, "node_modules/restore-cursor": { "version": "3.1.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "onetime": "^5.1.0", @@ -35733,7 +35995,7 @@ }, "node_modules/reusify": { "version": "1.0.4", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -35840,7 +36102,7 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -35932,7 +36194,7 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/sax": { @@ -36203,7 +36465,7 @@ }, "node_modules/serve-static": { "version": "1.16.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "encodeurl": "~1.0.2", @@ -37102,7 +37364,7 @@ }, "node_modules/string_decoder": { "version": "1.1.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" @@ -37355,7 +37617,7 @@ }, "node_modules/strip-final-newline": { "version": "2.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -37385,7 +37647,7 @@ }, "node_modules/strnum": { "version": "1.0.5", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/structured-headers": { @@ -38342,7 +38604,7 @@ }, "node_modules/ts-node": { "version": "10.9.2", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -38482,7 +38744,7 @@ }, "node_modules/type-is": { "version": "1.6.18", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "media-typer": "0.3.0", @@ -38580,7 +38842,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -38928,7 +39190,7 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/utila": { @@ -38960,7 +39222,7 @@ }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/v8-to-istanbul": { @@ -40533,7 +40795,7 @@ }, "node_modules/yn": { "version": "3.1.1", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -40541,7 +40803,7 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=10" From 22aa0ca2a6f72362fec2f7e69b24ee56c4c88d93 Mon Sep 17 00:00:00 2001 From: rory Date: Mon, 11 May 2026 17:46:37 -0700 Subject: [PATCH 04/38] chore: upgrade react-native-screens to 4.25.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps from 4.25.0-beta.1 to the stable release. Removes the SafeAreaView.web named export patch — the fix was merged upstream in https://github.com/software-mansion/react-native-screens/pull/3956 and is included in 4.25.0. Co-authored-by: Cursor --- ios/Podfile.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 821871d000fb..1383bfb653f0 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -3971,7 +3971,7 @@ PODS: - RNWorklets - SocketRocket - Yoga - - RNScreens (4.25.0-beta.1): + - RNScreens (4.25.0): - boost - DoubleConversion - fast_float @@ -3998,10 +3998,10 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNScreens/common (= 4.25.0-beta.1) + - RNScreens/common (= 4.25.0) - SocketRocket - Yoga - - RNScreens/common (4.25.0-beta.1): + - RNScreens/common (4.25.0): - boost - DoubleConversion - fast_float @@ -4808,7 +4808,7 @@ SPEC CHECKSUMS: GTMAppAuth: f69bd07d68cd3b766125f7e072c45d7340dea0de GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6 GzipSwift: 893f3e48e597a1a4f62fafcb6514220fcf8287fa - hermes-engine: 164a2a741070fc695f1930a2d7a5b885a98c32ce + hermes-engine: b39ec807040f5a775de027a4a9647c0f4222c6ef libavif: 84bbb62fb232c3018d6f1bab79beea87e35de7b7 libdav1d: 23581a4d8ec811ff171ed5e2e05cd27bad64c39f libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 @@ -4934,8 +4934,8 @@ SPEC CHECKSUMS: RNNitroSQLite: a9b5965d511ed6e99ce903380e64934d043a0d2c RNPermissions: 518f0a0c439acc74e2b9937e0e7d29e5031ae949 RNReactNativeHapticFeedback: 5f1542065f0b24c9252bd8cf3e83bc9c548182e4 - RNReanimated: fbcb7fd8da5b0b088401542c58fb5d266388f1cf - RNScreens: f157fcda842dd004cbb55e536d592f20e805fb0b + RNReanimated: a0068c25e0b27d5418d66289a915f53eb97380df + RNScreens: 2b6107925ee4e14a9b2eb0dfb52fe25223aa64d7 RNSentry: f73f4da92e4c20841ab16e1fa22fc289bc2f9f4e RNShare: 1c1fde2c4134b9cf220ffebbd6df9c414036d382 RNSVG: 74eb75bd44d62ba9969941e80d8f9832971c681f From f0b5d85c6fdf910e71961c3402a2be5cfad1c6f6 Mon Sep 17 00:00:00 2001 From: Nicolas Bonet Date: Tue, 5 May 2026 16:38:59 -0500 Subject: [PATCH 05/38] feat: Add agent editing functionality - Introduced new forms for editing agent name and prompt. - Added routes and screens for editing agent details. - Implemented actions to update agent name and prompt. - Created a delete agent feature with confirmation modal. - Updated translations for new agent editing features in multiple languages. - Enhanced navigation to support new agent editing flows. --- src/ONYXKEYS.ts | 6 + src/ROUTES.ts | 12 ++ src/SCREENS.ts | 3 + src/languages/de.ts | 14 +++ src/languages/en.ts | 14 +++ src/languages/es.ts | 14 +++ src/languages/fr.ts | 14 +++ src/languages/it.ts | 14 +++ src/languages/ja.ts | 14 +++ src/languages/nl.ts | 14 +++ src/languages/pl.ts | 14 +++ src/languages/pt-BR.ts | 14 +++ src/languages/zh-hans.ts | 14 +++ src/libs/API/parameters/DeleteAgentParams.ts | 5 + .../API/parameters/UpdateAgentNameParams.ts | 6 + .../API/parameters/UpdateAgentPromptParams.ts | 6 + src/libs/API/parameters/index.ts | 3 + src/libs/API/types.ts | 6 + .../ModalStackNavigators/index.tsx | 3 + .../RELATIONS/SETTINGS_TO_RHP.ts | 2 +- src/libs/Navigation/linkingConfig/config.ts | 18 +++ src/libs/Navigation/types.ts | 9 ++ src/libs/actions/Agent.ts | 112 +++++++++++++++++- src/pages/settings/Agents/AgentsListRow.tsx | 13 +- src/pages/settings/Agents/EditAgentPage.tsx | 82 +++++++++++++ .../settings/Agents/Fields/EditNamePage.tsx | 86 ++++++++++++++ .../settings/Agents/Fields/EditPromptPage.tsx | 93 +++++++++++++++ src/types/form/EditAgentNameForm.ts | 18 +++ src/types/form/EditAgentPromptForm.ts | 18 +++ src/types/form/index.ts | 2 + 30 files changed, 639 insertions(+), 4 deletions(-) create mode 100644 src/libs/API/parameters/DeleteAgentParams.ts create mode 100644 src/libs/API/parameters/UpdateAgentNameParams.ts create mode 100644 src/libs/API/parameters/UpdateAgentPromptParams.ts create mode 100644 src/pages/settings/Agents/EditAgentPage.tsx create mode 100644 src/pages/settings/Agents/Fields/EditNamePage.tsx create mode 100644 src/pages/settings/Agents/Fields/EditPromptPage.tsx create mode 100644 src/types/form/EditAgentNameForm.ts create mode 100644 src/types/form/EditAgentPromptForm.ts diff --git a/src/ONYXKEYS.ts b/src/ONYXKEYS.ts index c737341e066f..6d05c4c56124 100755 --- a/src/ONYXKEYS.ts +++ b/src/ONYXKEYS.ts @@ -1126,6 +1126,10 @@ const ONYXKEYS = { ADD_AGENT_FORM_DRAFT: 'addAgentFormDraft', CREATE_DOMAIN_GROUP_FORM: 'createDomainGroupForm', CREATE_DOMAIN_GROUP_FORM_DRAFT: 'createDomainGroupFormDraft', + EDIT_AGENT_NAME_FORM: 'editAgentNameForm', + EDIT_AGENT_NAME_FORM_DRAFT: 'editAgentNameFormDraft', + EDIT_AGENT_PROMPT_FORM: 'editAgentPromptForm', + EDIT_AGENT_PROMPT_FORM_DRAFT: 'editAgentPromptFormDraft', }, DERIVED: { REPORT_ATTRIBUTES: 'reportAttributes', @@ -1273,6 +1277,8 @@ type OnyxFormValuesMapping = { [ONYXKEYS.FORMS.EDIT_DOMAIN_GROUP_NAME_FORM]: FormTypes.DomainGroupEditNameForm; [ONYXKEYS.FORMS.ADD_AGENT_FORM]: FormTypes.AddAgentForm; [ONYXKEYS.FORMS.CREATE_DOMAIN_GROUP_FORM]: FormTypes.DomainGroupCreateForm; + [ONYXKEYS.FORMS.EDIT_AGENT_NAME_FORM]: FormTypes.EditAgentNameForm; + [ONYXKEYS.FORMS.EDIT_AGENT_PROMPT_FORM]: FormTypes.EditAgentPromptForm; }; type OnyxFormDraftValuesMapping = { diff --git a/src/ROUTES.ts b/src/ROUTES.ts index b2a8bb07e5f8..9165d25891b8 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -956,6 +956,18 @@ const ROUTES = { SETTINGS_WALLET_TRAVEL_CVV_VERIFY_ACCOUNT: `settings/wallet/travel-cvv/${VERIFY_ACCOUNT}`, SETTINGS_AGENTS: 'settings/agents', SETTINGS_AGENTS_ADD: 'settings/agents/new', + SETTINGS_AGENTS_EDIT: { + route: 'settings/agents/:accountID/edit', + getRoute: (accountID: number) => `settings/agents/${accountID}/edit` as const, + }, + SETTINGS_AGENTS_EDIT_NAME: { + route: 'settings/agents/:accountID/edit/name', + getRoute: (accountID: number) => `settings/agents/${accountID}/edit/name` as const, + }, + SETTINGS_AGENTS_EDIT_PROMPT: { + route: 'settings/agents/:accountID/edit/prompt', + getRoute: (accountID: number) => `settings/agents/${accountID}/edit/prompt` as const, + }, SETTINGS_RULES: 'settings/rules', SETTINGS_RULES_ADD: { route: 'settings/rules/new/:field?/:index?', diff --git a/src/SCREENS.ts b/src/SCREENS.ts index 97732e1b2b16..493f25d6e683 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -177,6 +177,9 @@ const SCREENS = { AGENTS: { ROOT: 'Settings_Agents', ADD: 'Settings_Agents_Add', + EDIT: 'Settings_Agents_Edit', + EDIT_NAME: 'Settings_Agents_Edit_Name', + EDIT_PROMPT: 'Settings_Agents_Edit_Prompt', }, RULES: { diff --git a/src/languages/de.ts b/src/languages/de.ts index 1b8df0e1a6f3..084444f761ad 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -2754,6 +2754,20 @@ ${amount} für ${merchant} – ${date}`, defaultPrompt: 'Lehne Ausgaben ab, die für Glücksspiele, Kinobesuche oder andere offensichtlich nicht geschäftliche Zwecke sind.\n\nErinnere den:die Nutzer:in daran, immer ein Belegfoto beizufügen, auf dem das Trinkgeld klar erkennbar ist.\n\nGenehmige den Bericht, wenn er früheren Berichten derselben Person sehr ähnlich ist.\n\nLehne Berichte mit mehr als 500 $ an Reisekosten ab.', }, + editAgentPage: { + title: 'Agent bearbeiten', + agentName: 'Name der Ansprechperson', + instructions: 'Eigene Anweisungen schreiben', + deleteAgent: 'Agent löschen', + deleteAgentTitle: 'Agent löschen?', + deleteAgentMessage: 'Bist du sicher, dass du diesen Agent löschen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.', + }, + editAgentNamePage: { + title: 'Name der Ansprechperson', + }, + editAgentPromptPage: { + title: 'Eigene Anweisungen schreiben', + }, expenseRulesPage: { title: 'Ausgabenregeln', findRule: 'Regel finden', diff --git a/src/languages/en.ts b/src/languages/en.ts index 2a48fe9d361a..198c27bd2551 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -2810,6 +2810,20 @@ const translations = { defaultPrompt: "Reject expenses that are for gambling, movies, or other obvious non-business reasons.\n\nRemind the user to always include a receipt image that makes the tip clear.\n\nApprove the report if it's very similar to previous reports from the same user.\n\nReject reports with more than $500 in travel expenses.", }, + editAgentPage: { + title: 'Edit agent', + agentName: 'Agent name', + instructions: 'Write custom instructions', + deleteAgent: 'Delete agent', + deleteAgentTitle: 'Delete agent?', + deleteAgentMessage: 'Are you sure you want to delete this agent? This action cannot be undone.', + }, + editAgentNamePage: { + title: 'Agent name', + }, + editAgentPromptPage: { + title: 'Write custom instructions', + }, expenseRulesPage: { title: 'Expense rules', subtitle: 'These rules will apply to your expenses.', diff --git a/src/languages/es.ts b/src/languages/es.ts index 06054625dc18..6a18fc802365 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -2639,6 +2639,20 @@ ${amount} para ${merchant} - ${date}`, defaultPrompt: 'Rechazar gastos por juegos de azar, películas u otras razones claramente no comerciales.\n\nRecordar al usuario que siempre incluya una imagen del recibo que muestre claramente la propina.\n\nAprobar el informe si es muy similar a informes anteriores del mismo usuario.\n\nRechazar informes con más de $500 en gastos de viaje.', }, + editAgentPage: { + title: 'Editar agente', + agentName: 'Nombre del agente', + instructions: 'Escribe instrucciones personalizadas', + deleteAgent: 'Eliminar agente', + deleteAgentTitle: '¿Eliminar agente?', + deleteAgentMessage: '¿Estás seguro de que quieres eliminar este agente? Esta acción no se puede deshacer.', + }, + editAgentNamePage: { + title: 'Nombre del agente', + }, + editAgentPromptPage: { + title: 'Escribe instrucciones personalizadas', + }, expenseRulesPage: { title: 'Reglas de gastos', subtitle: 'Estas reglas se aplicarán a tus gastos.', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 0edb2c9c8b7e..4b92cb7f835a 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -2760,6 +2760,20 @@ ${amount} pour ${merchant} - ${date}`, defaultPrompt: 'Rejeter les dépenses liées aux jeux d’argent, aux films ou à d’autres motifs manifestement non professionnels.\n\nRappeler à l’utilisateur d’inclure systématiquement une image du reçu où le pourboire est clairement visible.\n\nApprouver le rapport s’il est très similaire aux rapports précédents du même utilisateur.\n\nRejeter les rapports contenant plus de 500 $ de frais de déplacement.', }, + editAgentPage: { + title: "Modifier l'agent", + agentName: "Nom de l'agent", + instructions: 'Rédiger des instructions personnalisées', + deleteAgent: "Supprimer l'agent", + deleteAgentTitle: "Supprimer l'agent ?", + deleteAgentMessage: "Êtes-vous sûr de vouloir supprimer cet agent ? Cette action est irréversible.", + }, + editAgentNamePage: { + title: "Nom de l'agent", + }, + editAgentPromptPage: { + title: 'Rédiger des instructions personnalisées', + }, expenseRulesPage: { title: 'Règles de dépenses', findRule: 'Rechercher une règle', diff --git a/src/languages/it.ts b/src/languages/it.ts index 64b85e57ff09..bcbedf9fafca 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -2750,6 +2750,20 @@ ${amount} per ${merchant} - ${date}`, defaultPrompt: "Rifiuta le spese relative a gioco d'azzardo, cinema o altri motivi chiaramente non legati all'attività.\n\nRicorda all'utente di includere sempre un'immagine della ricevuta in cui la mancia sia ben visibile.\n\nApprova il report se è molto simile ai report precedenti dello stesso utente.\n\nRifiuta i report con più di 500 $ di spese di viaggio.", }, + editAgentPage: { + title: 'Modifica agente', + agentName: 'Nome agente', + instructions: 'Scrivi istruzioni personalizzate', + deleteAgent: 'Elimina agente', + deleteAgentTitle: 'Eliminare agente?', + deleteAgentMessage: 'Sei sicuro di voler eliminare questo agente? Questa azione non può essere annullata.', + }, + editAgentNamePage: { + title: 'Nome agente', + }, + editAgentPromptPage: { + title: 'Scrivi istruzioni personalizzate', + }, expenseRulesPage: { title: 'Regole spese', findRule: 'Trova regola', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index eb4fd49b6305..0db757551f82 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -2722,6 +2722,20 @@ ${date} の ${merchant} への ${amount}`, defaultPrompt: 'ギャンブル、映画、またはその他明らかにビジネス目的ではない理由による経費は却下します。\n\nチップの金額が明確にわかるレシート画像を必ず添付するよう、ユーザーにリマインドします。\n\n同じユーザーの過去のレポートと非常によく似ている場合は、そのレポートを承認します。\n\n出張費が500ドルを超えるレポートは却下します。', }, + editAgentPage: { + title: 'エージェントを編集', + agentName: 'エージェント名', + instructions: 'カスタム指示を作成', + deleteAgent: 'エージェントを削除', + deleteAgentTitle: 'エージェントを削除しますか?', + deleteAgentMessage: 'このエージェントを削除してよろしいですか?この操作は元に戻せません。', + }, + editAgentNamePage: { + title: 'エージェント名', + }, + editAgentPromptPage: { + title: 'カスタム指示を作成', + }, expenseRulesPage: { title: '経費ルール', findRule: 'ルールを検索', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 896d6d803e27..de967c3e86fb 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -2746,6 +2746,20 @@ ${amount} voor ${merchant} - ${date}`, defaultPrompt: 'Wijs declaraties af die zijn voor gokken, films of andere duidelijk niet-zakelijke redenen.\n\nHerinner de gebruiker eraan altijd een bonafbeelding toe te voegen waarop de fooi duidelijk is.\n\nKeur het verslag goed als het sterk lijkt op eerdere verslagen van dezelfde gebruiker.\n\nWijs verslagen af met meer dan $500 aan reiskosten.', }, + editAgentPage: { + title: 'Agent bewerken', + agentName: 'Naam medewerker', + instructions: 'Schrijf aangepaste instructies', + deleteAgent: 'Agent verwijderen', + deleteAgentTitle: 'Agent verwijderen?', + deleteAgentMessage: 'Weet je zeker dat je deze agent wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.', + }, + editAgentNamePage: { + title: 'Naam medewerker', + }, + editAgentPromptPage: { + title: 'Schrijf aangepaste instructies', + }, expenseRulesPage: { title: 'Declaratieregels', findRule: 'Regel zoeken', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index c7d875a55935..a756b7ea5a0b 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -2741,6 +2741,20 @@ ${amount} dla ${merchant} - ${date}`, defaultPrompt: 'Odrzucaj wydatki związane z hazardem, filmami lub innymi oczywistymi celami niezwiązanymi z działalnością biznesową.\n\nPrzypominaj użytkownikowi, aby zawsze dołączał zdjęcie paragonu, na którym wysokość napiwku jest wyraźnie widoczna.\n\nZatwierdź raport, jeśli jest bardzo podobny do wcześniejszych raportów tego samego użytkownika.\n\nOdrzucaj raporty zawierające więcej niż 500 USD wydatków na podróże.', }, + editAgentPage: { + title: 'Edytuj agenta', + agentName: 'Nazwa agenta', + instructions: 'Napisz własne instrukcje', + deleteAgent: 'Usuń agenta', + deleteAgentTitle: 'Usunąć agenta?', + deleteAgentMessage: 'Czy na pewno chcesz usunąć tego agenta? Tej operacji nie można cofnąć.', + }, + editAgentNamePage: { + title: 'Nazwa agenta', + }, + editAgentPromptPage: { + title: 'Napisz własne instrukcje', + }, expenseRulesPage: { title: 'Reguły wydatków', findRule: 'Znajdź regułę', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index fda802d5660a..5cf03cdb53b1 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -2741,6 +2741,20 @@ ${amount} para ${merchant} - ${date}`, defaultPrompt: 'Rejeite despesas relacionadas a jogos de azar, cinema ou outros motivos claramente não relacionados ao negócio.\n\nLembre o usuário de sempre incluir uma imagem do recibo em que a gorjeta fique clara.\n\nAprove o relatório se ele for muito semelhante a relatórios anteriores do mesmo usuário.\n\nRejeite relatórios com mais de US$ 500 em despesas de viagem.', }, + editAgentPage: { + title: 'Editar agente', + agentName: 'Nome do agente', + instructions: 'Escrever instruções personalizadas', + deleteAgent: 'Excluir agente', + deleteAgentTitle: 'Excluir agente?', + deleteAgentMessage: 'Tem certeza de que deseja excluir este agente? Esta ação não pode ser desfeita.', + }, + editAgentNamePage: { + title: 'Nome do agente', + }, + editAgentPromptPage: { + title: 'Escrever instruções personalizadas', + }, expenseRulesPage: { title: 'Regras de despesas', findRule: 'Encontrar regra', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 73a14e36394d..546d80ab3bd6 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -2672,6 +2672,20 @@ ${amount},商户:${merchant} - 日期:${date}`, defaultPrompt: '拒绝与赌博、电影或其他明显非商务原因相关的报销。\n\n提醒用户务必附上一张能清楚显示小费金额的收据图片。\n\n如果报销报告与同一用户之前的报告非常相似,则批准该报告。\n\n拒绝包含超过 500 美元差旅费用的报销报告。', }, + editAgentPage: { + title: '编辑代理', + agentName: '代理名称', + instructions: '编写自定义说明', + deleteAgent: '删除代理', + deleteAgentTitle: '删除代理?', + deleteAgentMessage: '确定要删除此代理吗?此操作无法撤销。', + }, + editAgentNamePage: { + title: '代理名称', + }, + editAgentPromptPage: { + title: '编写自定义说明', + }, expenseRulesPage: { title: '报销规则', findRule: '查找规则', diff --git a/src/libs/API/parameters/DeleteAgentParams.ts b/src/libs/API/parameters/DeleteAgentParams.ts new file mode 100644 index 000000000000..c8111af427ba --- /dev/null +++ b/src/libs/API/parameters/DeleteAgentParams.ts @@ -0,0 +1,5 @@ +type DeleteAgentParams = { + accountID: number; +}; + +export default DeleteAgentParams; diff --git a/src/libs/API/parameters/UpdateAgentNameParams.ts b/src/libs/API/parameters/UpdateAgentNameParams.ts new file mode 100644 index 000000000000..3f692bee03b5 --- /dev/null +++ b/src/libs/API/parameters/UpdateAgentNameParams.ts @@ -0,0 +1,6 @@ +type UpdateAgentNameParams = { + accountID: number; + firstName: string; +}; + +export default UpdateAgentNameParams; diff --git a/src/libs/API/parameters/UpdateAgentPromptParams.ts b/src/libs/API/parameters/UpdateAgentPromptParams.ts new file mode 100644 index 000000000000..a3e1b8f58b42 --- /dev/null +++ b/src/libs/API/parameters/UpdateAgentPromptParams.ts @@ -0,0 +1,6 @@ +type UpdateAgentPromptParams = { + accountID: number; + prompt: string; +}; + +export default UpdateAgentPromptParams; diff --git a/src/libs/API/parameters/index.ts b/src/libs/API/parameters/index.ts index 93d23ce137db..90fecec481cd 100644 --- a/src/libs/API/parameters/index.ts +++ b/src/libs/API/parameters/index.ts @@ -528,3 +528,6 @@ export type {default as SetDefaultDomainSecurityGroupParams} from './SetDefaultD export type {default as DeleteDomainSecurityGroupParams} from './DeleteDomainSecurityGroupParams'; export type {default as CreateAgentParams} from './CreateAgentParams'; export type {default as CreateDomainSecurityGroupParams} from './CreateDomainSecurityGroupParams'; +export type {default as UpdateAgentNameParams} from './UpdateAgentNameParams'; +export type {default as UpdateAgentPromptParams} from './UpdateAgentPromptParams'; +export type {default as DeleteAgentParams} from './DeleteAgentParams'; diff --git a/src/libs/API/types.ts b/src/libs/API/types.ts index 077adbbd2d32..937dedc7d18b 100644 --- a/src/libs/API/types.ts +++ b/src/libs/API/types.ts @@ -593,6 +593,9 @@ const WRITE_COMMANDS = { DELETE_DOMAIN_SECURITY_GROUP: 'DeleteDomainSecurityGroup', CREATE_AGENT: 'CreateAgent', CREATE_DOMAIN_SECURITY_GROUP: 'CreateDomainSecurityGroup', + UPDATE_AGENT_NAME: 'UpdateAgentName', + UPDATE_AGENT_PROMPT: 'UpdateAgentPrompt', + DELETE_AGENT: 'DeleteAgent', } as const; type WriteCommand = ValueOf; @@ -1203,6 +1206,9 @@ type WriteCommandParameters = { [WRITE_COMMANDS.SET_DEFAULT_DOMAIN_SECURITY_GROUP]: Parameters.SetDefaultDomainSecurityGroupParams; [WRITE_COMMANDS.DELETE_DOMAIN_SECURITY_GROUP]: Parameters.DeleteDomainSecurityGroupParams; [WRITE_COMMANDS.CREATE_AGENT]: Parameters.CreateAgentParams; + [WRITE_COMMANDS.UPDATE_AGENT_NAME]: Parameters.UpdateAgentNameParams; + [WRITE_COMMANDS.UPDATE_AGENT_PROMPT]: Parameters.UpdateAgentPromptParams; + [WRITE_COMMANDS.DELETE_AGENT]: Parameters.DeleteAgentParams; }; const READ_COMMANDS = { diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index 6d1ecd52e96f..8d01f971fb07 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -477,6 +477,9 @@ const SettingsModalStackNavigator = createModalStackNavigator require('../../../../pages/settings/Wallet/BankAccountPurposePage').default, [SCREENS.SETTINGS.RULES.ROOT]: () => require('../../../../pages/settings/Rules/ExpenseRulesPage').default, [SCREENS.SETTINGS.AGENTS.ADD]: () => require('../../../../pages/settings/Agents/AddAgentPage').default, + [SCREENS.SETTINGS.AGENTS.EDIT]: () => require('../../../../pages/settings/Agents/EditAgentPage').default, + [SCREENS.SETTINGS.AGENTS.EDIT_NAME]: () => require('../../../../pages/settings/Agents/Fields/EditNamePage').default, + [SCREENS.SETTINGS.AGENTS.EDIT_PROMPT]: () => require('../../../../pages/settings/Agents/Fields/EditPromptPage').default, [SCREENS.SETTINGS.RULES.ADD]: () => require('../../../../pages/settings/Rules/AddRulePage').default, [SCREENS.SETTINGS.RULES.ADD_MERCHANT]: () => require('../../../../pages/settings/Rules/Fields/AddMerchantPage').default, [SCREENS.SETTINGS.RULES.ADD_RENAME_MERCHANT]: () => require('../../../../pages/settings/Rules/Fields/AddRenameMerchantPage').default, diff --git a/src/libs/Navigation/linkingConfig/RELATIONS/SETTINGS_TO_RHP.ts b/src/libs/Navigation/linkingConfig/RELATIONS/SETTINGS_TO_RHP.ts index ed14a0fa5eaf..661b6cc0fb43 100755 --- a/src/libs/Navigation/linkingConfig/RELATIONS/SETTINGS_TO_RHP.ts +++ b/src/libs/Navigation/linkingConfig/RELATIONS/SETTINGS_TO_RHP.ts @@ -70,7 +70,7 @@ const SETTINGS_TO_RHP: Partial['config'] = { path: ROUTES.SETTINGS_AGENTS_ADD, exact: true, }, + [SCREENS.SETTINGS.AGENTS.EDIT]: { + path: ROUTES.SETTINGS_AGENTS_EDIT.route, + parse: { + accountID: Number, + }, + }, + [SCREENS.SETTINGS.AGENTS.EDIT_NAME]: { + path: ROUTES.SETTINGS_AGENTS_EDIT_NAME.route, + parse: { + accountID: Number, + }, + }, + [SCREENS.SETTINGS.AGENTS.EDIT_PROMPT]: { + path: ROUTES.SETTINGS_AGENTS_EDIT_PROMPT.route, + parse: { + accountID: Number, + }, + }, [SCREENS.SETTINGS.RULES.ADD]: { path: ROUTES.SETTINGS_RULES_ADD.route, exact: true, diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index b2d1078ec363..d3188398ca1d 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -244,6 +244,15 @@ type SettingsNavigatorParamList = { [SCREENS.SETTINGS.BANK_ACCOUNT_PURPOSE]: undefined; [SCREENS.SETTINGS.ADD_BANK_ACCOUNT_SELECT_COUNTRY_VERIFY_ACCOUNT]: undefined; [SCREENS.SETTINGS.AGENTS.ADD]: undefined; + [SCREENS.SETTINGS.AGENTS.EDIT]: { + accountID: number; + }; + [SCREENS.SETTINGS.AGENTS.EDIT_NAME]: { + accountID: number; + }; + [SCREENS.SETTINGS.AGENTS.EDIT_PROMPT]: { + accountID: number; + }; [SCREENS.SETTINGS.RULES.ADD]: undefined; [SCREENS.SETTINGS.RULES.ADD_MERCHANT]: undefined; [SCREENS.SETTINGS.RULES.ADD_RENAME_MERCHANT]: undefined; diff --git a/src/libs/actions/Agent.ts b/src/libs/actions/Agent.ts index 26454b7cc88f..0ab56cb166a8 100644 --- a/src/libs/actions/Agent.ts +++ b/src/libs/actions/Agent.ts @@ -2,8 +2,10 @@ import Onyx from 'react-native-onyx'; import {read, write} from '@libs/API'; import {READ_COMMANDS, WRITE_COMMANDS} from '@libs/API/types'; import {getMicroSecondOnyxErrorWithTranslationKey} from '@libs/ErrorUtils'; +import Navigation from '@libs/Navigation/Navigation'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; +import ROUTES from '@src/ROUTES'; import type {AnyOnyxUpdate} from '@src/types/onyx/Request'; function openAgentsPage() { @@ -78,4 +80,112 @@ function clearAgentError(optimisticAccountID: number) { Onyx.set(`${ONYXKEYS.COLLECTION.SHARED_NVP_AGENT_PROMPT}${optimisticAccountID}`, null); } -export {openAgentsPage, createAgent, clearAgentError}; +function updateAgentName(accountID: number, firstName: string, originalFirstName: string) { + const optimisticData: AnyOnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.FORMS.EDIT_AGENT_NAME_FORM, + value: {isLoading: true, errors: null}, + }, + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.PERSONAL_DETAILS_LIST, + value: { + [accountID]: {displayName: firstName}, + }, + }, + ]; + + const successData: AnyOnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.FORMS.EDIT_AGENT_NAME_FORM, + value: {isLoading: false}, + }, + ]; + + const failureData: AnyOnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.FORMS.EDIT_AGENT_NAME_FORM, + value: {isLoading: false, errors: getMicroSecondOnyxErrorWithTranslationKey('common.genericErrorMessage')}, + }, + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.PERSONAL_DETAILS_LIST, + value: { + [accountID]: {displayName: originalFirstName}, + }, + }, + ]; + + write(WRITE_COMMANDS.UPDATE_AGENT_NAME, {accountID, firstName}, {optimisticData, successData, failureData}); +} + +function updateAgentPrompt(accountID: number, prompt: string, originalPrompt: string) { + const optimisticData: AnyOnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.FORMS.EDIT_AGENT_PROMPT_FORM, + value: {isLoading: true, errors: null}, + }, + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.SHARED_NVP_AGENT_PROMPT}${accountID}`, + value: {prompt}, + }, + ]; + + const successData: AnyOnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.FORMS.EDIT_AGENT_PROMPT_FORM, + value: {isLoading: false}, + }, + ]; + + const failureData: AnyOnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.FORMS.EDIT_AGENT_PROMPT_FORM, + value: {isLoading: false, errors: getMicroSecondOnyxErrorWithTranslationKey('common.genericErrorMessage')}, + }, + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.SHARED_NVP_AGENT_PROMPT}${accountID}`, + value: {prompt: originalPrompt}, + }, + ]; + + write(WRITE_COMMANDS.UPDATE_AGENT_PROMPT, {accountID, prompt}, {optimisticData, successData, failureData}); +} + +function deleteAgent(accountID: number) { + const optimisticData: AnyOnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.SET, + key: `${ONYXKEYS.COLLECTION.SHARED_NVP_AGENT_PROMPT}${accountID}`, + value: null, + }, + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.PERSONAL_DETAILS_LIST, + value: {[accountID]: null}, + }, + ]; + + const successData: AnyOnyxUpdate[] = []; + + const failureData: AnyOnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.PERSONAL_DETAILS_LIST, + value: {[accountID]: {accountID}}, + }, + ]; + + write(WRITE_COMMANDS.DELETE_AGENT, {accountID}, {optimisticData, successData, failureData}); + Navigation.navigate(ROUTES.SETTINGS_AGENTS); +} + +export {openAgentsPage, createAgent, clearAgentError, updateAgentName, updateAgentPrompt, deleteAgent}; diff --git a/src/pages/settings/Agents/AgentsListRow.tsx b/src/pages/settings/Agents/AgentsListRow.tsx index ee3b1e332f2a..8156499cc48d 100644 --- a/src/pages/settings/Agents/AgentsListRow.tsx +++ b/src/pages/settings/Agents/AgentsListRow.tsx @@ -1,12 +1,15 @@ import React from 'react'; import {View} from 'react-native'; import OfflineWithFeedback from '@components/OfflineWithFeedback'; +import PressableWithFeedback from '@components/Pressable/PressableWithFeedback'; import ReportActionAvatars from '@components/ReportActionAvatars'; import Text from '@components/Text'; import useStyleUtils from '@hooks/useStyleUtils'; import useThemeStyles from '@hooks/useThemeStyles'; +import Navigation from '@libs/Navigation/Navigation'; import variables from '@styles/variables'; import CONST from '@src/CONST'; +import ROUTES from '@src/ROUTES'; import type {Errors, PendingAction} from '@src/types/onyx/OnyxCommon'; type AgentsListRowProps = { @@ -40,7 +43,13 @@ function AgentsListRow({accountID, displayName, login, pendingAction, errors, on onClose={onErrorClose} errorRowStyles={[styles.ph5, styles.pb5]} > - + Navigation.navigate(ROUTES.SETTINGS_AGENTS_EDIT.getRoute(accountID))} + accessibilityLabel={displayName} + role={CONST.ROLE.BUTTON} + sentryLabel="AgentsListRow-Edit" + > - + ); } diff --git a/src/pages/settings/Agents/EditAgentPage.tsx b/src/pages/settings/Agents/EditAgentPage.tsx new file mode 100644 index 000000000000..b35a45ad59ad --- /dev/null +++ b/src/pages/settings/Agents/EditAgentPage.tsx @@ -0,0 +1,82 @@ +import React, {useState} from 'react'; +import ConfirmModal from '@components/ConfirmModal'; +import HeaderWithBackButton from '@components/HeaderWithBackButton'; +import MenuItem from '@components/MenuItem'; +import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription'; +import ScreenWrapper from '@components/ScreenWrapper'; +import ScrollView from '@components/ScrollView'; +import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset'; +import useLocalize from '@hooks/useLocalize'; +import useOnyx from '@hooks/useOnyx'; +import useThemeStyles from '@hooks/useThemeStyles'; +import {deleteAgent} from '@libs/actions/Agent'; +import Navigation from '@libs/Navigation/Navigation'; +import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; +import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; +import ONYXKEYS from '@src/ONYXKEYS'; +import ROUTES from '@src/ROUTES'; +import type SCREENS from '@src/SCREENS'; + +type EditAgentPageProps = PlatformStackScreenProps; + +function EditAgentPage({route}: EditAgentPageProps) { + const {translate} = useLocalize(); + const styles = useThemeStyles(); + const icons = useMemoizedLazyExpensifyIcons(['Trashcan']); + const accountID = route.params.accountID; + const [agent] = useOnyx(`${ONYXKEYS.COLLECTION.SHARED_NVP_AGENT_PROMPT}${accountID}`); + const [personalDetails] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {selector: (list) => list?.[accountID]}); + const [isDeleteModalVisible, setIsDeleteModalVisible] = useState(false); + + const handleDeleteAgent = () => { + setIsDeleteModalVisible(false); + deleteAgent(accountID); + }; + + return ( + + Navigation.goBack()} + /> + + Navigation.navigate(ROUTES.SETTINGS_AGENTS_EDIT_NAME.getRoute(accountID))} + /> + Navigation.navigate(ROUTES.SETTINGS_AGENTS_EDIT_PROMPT.getRoute(accountID))} + numberOfLinesTitle={3} + /> + setIsDeleteModalVisible(true)} + /> + + setIsDeleteModalVisible(false)} + title={translate('editAgentPage.deleteAgentTitle')} + prompt={translate('editAgentPage.deleteAgentMessage')} + confirmText={translate('common.delete')} + cancelText={translate('common.cancel')} + danger + /> + + ); +} + +EditAgentPage.displayName = 'EditAgentPage'; + +export default EditAgentPage; diff --git a/src/pages/settings/Agents/Fields/EditNamePage.tsx b/src/pages/settings/Agents/Fields/EditNamePage.tsx new file mode 100644 index 000000000000..ebd69e3f8474 --- /dev/null +++ b/src/pages/settings/Agents/Fields/EditNamePage.tsx @@ -0,0 +1,86 @@ +import React, {useEffect, useRef} from 'react'; +import FormProvider from '@components/Form/FormProvider'; +import InputWrapper from '@components/Form/InputWrapper'; +import type {FormOnyxValues} from '@components/Form/types'; +import HeaderWithBackButton from '@components/HeaderWithBackButton'; +import ScreenWrapper from '@components/ScreenWrapper'; +import TextInput from '@components/TextInput'; +import useLocalize from '@hooks/useLocalize'; +import useOnyx from '@hooks/useOnyx'; +import useThemeStyles from '@hooks/useThemeStyles'; +import {updateAgentName} from '@libs/actions/Agent'; +import Navigation from '@libs/Navigation/Navigation'; +import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; +import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; +import {clearErrors} from '@userActions/FormActions'; +import CONST from '@src/CONST'; +import ONYXKEYS from '@src/ONYXKEYS'; +import ROUTES from '@src/ROUTES'; +import type SCREENS from '@src/SCREENS'; +import INPUT_IDS from '@src/types/form/EditAgentNameForm'; + +type EditNamePageProps = PlatformStackScreenProps; + +function EditNamePage({route}: EditNamePageProps) { + const {translate} = useLocalize(); + const styles = useThemeStyles(); + const accountID = route.params.accountID; + const [personalDetails] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {selector: (list) => list?.[accountID]}); + const [formIsLoading] = useOnyx(ONYXKEYS.FORMS.EDIT_AGENT_NAME_FORM, {selector: (form) => form?.isLoading}); + const [formErrors] = useOnyx(ONYXKEYS.FORMS.EDIT_AGENT_NAME_FORM, {selector: (form) => form?.errors}); + const hasSubmittedRef = useRef(false); + + useEffect(() => { + clearErrors(ONYXKEYS.FORMS.EDIT_AGENT_NAME_FORM); + }, []); + + useEffect(() => { + if (!hasSubmittedRef.current || formIsLoading || formErrors) { + return; + } + Navigation.goBack(ROUTES.SETTINGS_AGENTS_EDIT.getRoute(accountID)); + hasSubmittedRef.current = false; + }, [formIsLoading, formErrors, accountID]); + + const handleSubmit = (values: FormOnyxValues) => { + hasSubmittedRef.current = true; + updateAgentName(accountID, values[INPUT_IDS.FIRST_NAME].trim(), personalDetails?.displayName ?? ''); + }; + + return ( + + Navigation.goBack(ROUTES.SETTINGS_AGENTS_EDIT.getRoute(accountID))} + /> + + + + + ); +} + +EditNamePage.displayName = 'EditNamePage'; + +export default EditNamePage; diff --git a/src/pages/settings/Agents/Fields/EditPromptPage.tsx b/src/pages/settings/Agents/Fields/EditPromptPage.tsx new file mode 100644 index 000000000000..2ce5de7b09af --- /dev/null +++ b/src/pages/settings/Agents/Fields/EditPromptPage.tsx @@ -0,0 +1,93 @@ +import React, {useEffect, useRef} from 'react'; +import {View} from 'react-native'; +import FormProvider from '@components/Form/FormProvider'; +import InputWrapper from '@components/Form/InputWrapper'; +import type {FormOnyxValues} from '@components/Form/types'; +import HeaderWithBackButton from '@components/HeaderWithBackButton'; +import ScreenWrapper from '@components/ScreenWrapper'; +import TextInput from '@components/TextInput'; +import useLocalize from '@hooks/useLocalize'; +import useOnyx from '@hooks/useOnyx'; +import useThemeStyles from '@hooks/useThemeStyles'; +import {updateAgentPrompt} from '@libs/actions/Agent'; +import Navigation from '@libs/Navigation/Navigation'; +import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; +import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; +import {clearErrors} from '@userActions/FormActions'; +import CONST from '@src/CONST'; +import ONYXKEYS from '@src/ONYXKEYS'; +import ROUTES from '@src/ROUTES'; +import type SCREENS from '@src/SCREENS'; +import INPUT_IDS from '@src/types/form/EditAgentPromptForm'; + +type EditPromptPageProps = PlatformStackScreenProps; + +function EditPromptPage({route}: EditPromptPageProps) { + const {translate} = useLocalize(); + const styles = useThemeStyles(); + const accountID = route.params.accountID; + const [agentPrompt] = useOnyx(`${ONYXKEYS.COLLECTION.SHARED_NVP_AGENT_PROMPT}${accountID}`); + const [formIsLoading] = useOnyx(ONYXKEYS.FORMS.EDIT_AGENT_PROMPT_FORM, {selector: (form) => form?.isLoading}); + const [formErrors] = useOnyx(ONYXKEYS.FORMS.EDIT_AGENT_PROMPT_FORM, {selector: (form) => form?.errors}); + const hasSubmittedRef = useRef(false); + + useEffect(() => { + clearErrors(ONYXKEYS.FORMS.EDIT_AGENT_PROMPT_FORM); + }, []); + + useEffect(() => { + if (!hasSubmittedRef.current || formIsLoading || formErrors) { + return; + } + Navigation.goBack(ROUTES.SETTINGS_AGENTS_EDIT.getRoute(accountID)); + hasSubmittedRef.current = false; + }, [formIsLoading, formErrors, accountID]); + + const handleSubmit = (values: FormOnyxValues) => { + hasSubmittedRef.current = true; + updateAgentPrompt(accountID, values[INPUT_IDS.PROMPT].trim(), agentPrompt?.prompt ?? ''); + }; + + return ( + + Navigation.goBack(ROUTES.SETTINGS_AGENTS_EDIT.getRoute(accountID))} + /> + + + + + + + ); +} + +EditPromptPage.displayName = 'EditPromptPage'; + +export default EditPromptPage; diff --git a/src/types/form/EditAgentNameForm.ts b/src/types/form/EditAgentNameForm.ts new file mode 100644 index 000000000000..8ef3f1db0f72 --- /dev/null +++ b/src/types/form/EditAgentNameForm.ts @@ -0,0 +1,18 @@ +import type {ValueOf} from 'type-fest'; +import type Form from './Form'; + +const INPUT_IDS = { + FIRST_NAME: 'firstName', +} as const; + +type InputID = ValueOf; + +type EditAgentNameForm = Form< + InputID, + { + [INPUT_IDS.FIRST_NAME]: string; + } +>; + +export type {EditAgentNameForm}; +export default INPUT_IDS; diff --git a/src/types/form/EditAgentPromptForm.ts b/src/types/form/EditAgentPromptForm.ts new file mode 100644 index 000000000000..66162595e262 --- /dev/null +++ b/src/types/form/EditAgentPromptForm.ts @@ -0,0 +1,18 @@ +import type {ValueOf} from 'type-fest'; +import type Form from './Form'; + +const INPUT_IDS = { + PROMPT: 'prompt', +} as const; + +type InputID = ValueOf; + +type EditAgentPromptForm = Form< + InputID, + { + [INPUT_IDS.PROMPT]: string; + } +>; + +export type {EditAgentPromptForm}; +export default INPUT_IDS; diff --git a/src/types/form/index.ts b/src/types/form/index.ts index 3825c14894b7..55c575f9ebc3 100644 --- a/src/types/form/index.ts +++ b/src/types/form/index.ts @@ -124,3 +124,5 @@ export type {EditExpensifyCardLimitTypeForm} from './EditExpensifyCardLimitTypeF export type {DomainGroupCreateForm} from './DomainGroupCreateForm'; export type {AddWorkEmailForm} from './AddWorkEmailForm'; export type {AddAgentForm} from './AddAgentForm'; +export type {EditAgentNameForm} from './EditAgentNameForm'; +export type {EditAgentPromptForm} from './EditAgentPromptForm'; From 8437893e40dca4ed08dafccc7f53b2cfd6b3aa30 Mon Sep 17 00:00:00 2001 From: Nicolas Bonet Date: Wed, 6 May 2026 13:01:07 -0500 Subject: [PATCH 06/38] feat: Add generic update error messages for agent actions in multiple languages --- src/languages/de.ts | 1 + src/languages/en.ts | 1 + src/languages/es.ts | 1 + src/languages/fr.ts | 3 +- src/languages/it.ts | 1 + src/languages/ja.ts | 1 + src/languages/nl.ts | 1 + src/languages/pl.ts | 1 + src/languages/pt-BR.ts | 1 + src/languages/zh-hans.ts | 1 + src/libs/actions/Agent.ts | 48 ++++++++----------- src/pages/settings/Agents/AgentsPage.tsx | 16 +++++-- src/pages/settings/Agents/EditAgentPage.tsx | 48 +++++++++++++------ .../settings/Agents/Fields/EditNamePage.tsx | 20 +------- .../settings/Agents/Fields/EditPromptPage.tsx | 20 +------- 15 files changed, 81 insertions(+), 83 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index 084444f761ad..cdf89ef41c6a 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -2742,6 +2742,7 @@ ${amount} für ${merchant} – ${date}`, emptyAgents: {title: 'Keine Agenten erstellt', subtitle: 'Hör auf, Dinge manuell zu erledigen. Weise stattdessen eine:n Agent:in an und spare dir eine Menge Zeit.'}, error: { genericAdd: 'Beim Hinzufügen dieses Agenten ist ein Problem aufgetreten', + genericUpdate: 'Beim Aktualisieren dieses Agenten ist ein Problem aufgetreten', }, }, addAgentPage: { diff --git a/src/languages/en.ts b/src/languages/en.ts index 198c27bd2551..f45ab53e9cfb 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -2798,6 +2798,7 @@ const translations = { }, error: { genericAdd: 'There was a problem adding this agent', + genericUpdate: 'There was a problem updating this agent', }, }, addAgentPage: { diff --git a/src/languages/es.ts b/src/languages/es.ts index 6a18fc802365..965dced30e52 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -2627,6 +2627,7 @@ ${amount} para ${merchant} - ${date}`, }, error: { genericAdd: 'Hubo un problema al agregar este agente', + genericUpdate: 'Hubo un problema al actualizar este agente', }, }, addAgentPage: { diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 4b92cb7f835a..45d13d6067f7 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -2748,6 +2748,7 @@ ${amount} pour ${merchant} - ${date}`, emptyAgents: {title: 'Aucun agent créé', subtitle: 'Arrêtez de faire les choses manuellement. Donnez plutôt des instructions à un agent et gagnez beaucoup de temps.'}, error: { genericAdd: "Un problème est survenu lors de l'ajout de cet agent", + genericUpdate: 'Un problème est survenu lors de la mise à jour de cet agent', }, }, addAgentPage: { @@ -2766,7 +2767,7 @@ ${amount} pour ${merchant} - ${date}`, instructions: 'Rédiger des instructions personnalisées', deleteAgent: "Supprimer l'agent", deleteAgentTitle: "Supprimer l'agent ?", - deleteAgentMessage: "Êtes-vous sûr de vouloir supprimer cet agent ? Cette action est irréversible.", + deleteAgentMessage: 'Êtes-vous sûr de vouloir supprimer cet agent ? Cette action est irréversible.', }, editAgentNamePage: { title: "Nom de l'agent", diff --git a/src/languages/it.ts b/src/languages/it.ts index bcbedf9fafca..0a8033eaeccf 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -2738,6 +2738,7 @@ ${amount} per ${merchant} - ${date}`, emptyAgents: {title: 'Nessun agente creato', subtitle: 'Smetti di fare le cose manualmente. Dai istruzioni a un agente e risparmia un sacco di tempo.'}, error: { genericAdd: "Si è verificato un problema durante l'aggiunta di questo agente", + genericUpdate: "Si è verificato un problema durante l'aggiornamento di questo agente", }, }, addAgentPage: { diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 0db757551f82..5c0bfa541661 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -2710,6 +2710,7 @@ ${date} の ${merchant} への ${amount}`, emptyAgents: {title: 'エージェントは作成されていません', subtitle: '手作業はやめて、代わりにエージェントに指示を出して、時間を大幅に節約しましょう。'}, error: { genericAdd: 'このエージェントの追加中に問題が発生しました', + genericUpdate: 'このエージェントの更新中に問題が発生しました', }, }, addAgentPage: { diff --git a/src/languages/nl.ts b/src/languages/nl.ts index de967c3e86fb..b8e1b109463e 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -2734,6 +2734,7 @@ ${amount} voor ${merchant} - ${date}`, emptyAgents: {title: 'Geen agents aangemaakt', subtitle: 'Stop met dingen handmatig doen. Geef in plaats daarvan een opdracht aan een agent en bespaar jezelf veel tijd.'}, error: { genericAdd: 'Er was een probleem bij het toevoegen van deze agent', + genericUpdate: 'Er was een probleem bij het bijwerken van deze agent', }, }, addAgentPage: { diff --git a/src/languages/pl.ts b/src/languages/pl.ts index a756b7ea5a0b..61e1191ace16 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -2729,6 +2729,7 @@ ${amount} dla ${merchant} - ${date}`, emptyAgents: {title: 'Nie utworzono agentów', subtitle: 'Przestań robić wszystko ręcznie. Zamiast tego wydaj polecenia agentowi i zaoszczędź mnóstwo czasu.'}, error: { genericAdd: 'Wystąpił problem podczas dodawania tego agenta', + genericUpdate: 'Wystąpił problem podczas aktualizowania tego agenta', }, }, addAgentPage: { diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 5cf03cdb53b1..dfe8f807c996 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -2729,6 +2729,7 @@ ${amount} para ${merchant} - ${date}`, emptyAgents: {title: 'Nenhum agente criado', subtitle: 'Pare de fazer tudo manualmente. Instrua um agente e economize muito tempo.'}, error: { genericAdd: 'Houve um problema ao adicionar este agente', + genericUpdate: 'Houve um problema ao atualizar este agente', }, }, addAgentPage: { diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 546d80ab3bd6..f5948be7ed3a 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -2660,6 +2660,7 @@ ${amount},商户:${merchant} - 日期:${date}`, emptyAgents: {title: '尚未创建代理', subtitle: '别再手动处理这些事情了。交给智能代理去执行,为自己节省大量时间。'}, error: { genericAdd: '添加此智能体时出现了问题', + genericUpdate: '更新此智能体时出现了问题', }, }, addAgentPage: { diff --git a/src/libs/actions/Agent.ts b/src/libs/actions/Agent.ts index 0ab56cb166a8..24221997e43e 100644 --- a/src/libs/actions/Agent.ts +++ b/src/libs/actions/Agent.ts @@ -80,42 +80,42 @@ function clearAgentError(optimisticAccountID: number) { Onyx.set(`${ONYXKEYS.COLLECTION.SHARED_NVP_AGENT_PROMPT}${optimisticAccountID}`, null); } +function clearAgentUpdateError(accountID: number) { + Onyx.merge(`${ONYXKEYS.COLLECTION.SHARED_NVP_AGENT_PROMPT}${accountID}`, {errors: null}); +} + function updateAgentName(accountID: number, firstName: string, originalFirstName: string) { const optimisticData: AnyOnyxUpdate[] = [ { onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.FORMS.EDIT_AGENT_NAME_FORM, - value: {isLoading: true, errors: null}, + key: ONYXKEYS.PERSONAL_DETAILS_LIST, + value: {[accountID]: {displayName: firstName}}, }, { onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.PERSONAL_DETAILS_LIST, - value: { - [accountID]: {displayName: firstName}, - }, + key: `${ONYXKEYS.COLLECTION.SHARED_NVP_AGENT_PROMPT}${accountID}`, + value: {pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE, errors: null}, }, ]; const successData: AnyOnyxUpdate[] = [ { onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.FORMS.EDIT_AGENT_NAME_FORM, - value: {isLoading: false}, + key: `${ONYXKEYS.COLLECTION.SHARED_NVP_AGENT_PROMPT}${accountID}`, + value: {pendingAction: null}, }, ]; const failureData: AnyOnyxUpdate[] = [ { onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.FORMS.EDIT_AGENT_NAME_FORM, - value: {isLoading: false, errors: getMicroSecondOnyxErrorWithTranslationKey('common.genericErrorMessage')}, + key: ONYXKEYS.PERSONAL_DETAILS_LIST, + value: {[accountID]: {displayName: originalFirstName}}, }, { onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.PERSONAL_DETAILS_LIST, - value: { - [accountID]: {displayName: originalFirstName}, - }, + key: `${ONYXKEYS.COLLECTION.SHARED_NVP_AGENT_PROMPT}${accountID}`, + value: {pendingAction: null, errors: getMicroSecondOnyxErrorWithTranslationKey('agentsPage.error.genericUpdate')}, }, ]; @@ -124,36 +124,26 @@ function updateAgentName(accountID: number, firstName: string, originalFirstName function updateAgentPrompt(accountID: number, prompt: string, originalPrompt: string) { const optimisticData: AnyOnyxUpdate[] = [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.FORMS.EDIT_AGENT_PROMPT_FORM, - value: {isLoading: true, errors: null}, - }, { onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.SHARED_NVP_AGENT_PROMPT}${accountID}`, - value: {prompt}, + value: {prompt, pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE, errors: null}, }, ]; const successData: AnyOnyxUpdate[] = [ { onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.FORMS.EDIT_AGENT_PROMPT_FORM, - value: {isLoading: false}, + key: `${ONYXKEYS.COLLECTION.SHARED_NVP_AGENT_PROMPT}${accountID}`, + value: {pendingAction: null}, }, ]; const failureData: AnyOnyxUpdate[] = [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.FORMS.EDIT_AGENT_PROMPT_FORM, - value: {isLoading: false, errors: getMicroSecondOnyxErrorWithTranslationKey('common.genericErrorMessage')}, - }, { onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.SHARED_NVP_AGENT_PROMPT}${accountID}`, - value: {prompt: originalPrompt}, + value: {prompt: originalPrompt, pendingAction: null, errors: getMicroSecondOnyxErrorWithTranslationKey('agentsPage.error.genericUpdate')}, }, ]; @@ -188,4 +178,4 @@ function deleteAgent(accountID: number) { Navigation.navigate(ROUTES.SETTINGS_AGENTS); } -export {openAgentsPage, createAgent, clearAgentError, updateAgentName, updateAgentPrompt, deleteAgent}; +export {openAgentsPage, createAgent, clearAgentError, clearAgentUpdateError, updateAgentName, updateAgentPrompt, deleteAgent}; diff --git a/src/pages/settings/Agents/AgentsPage.tsx b/src/pages/settings/Agents/AgentsPage.tsx index a1b0e3198159..ff045197f5b2 100644 --- a/src/pages/settings/Agents/AgentsPage.tsx +++ b/src/pages/settings/Agents/AgentsPage.tsx @@ -16,7 +16,7 @@ import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useThemeStyles from '@hooks/useThemeStyles'; import Navigation from '@libs/Navigation/Navigation'; import NotFoundPage from '@pages/ErrorPage/NotFoundPage'; -import {clearAgentError, openAgentsPage} from '@userActions/Agent'; +import {clearAgentError, clearAgentUpdateError, openAgentsPage} from '@userActions/Agent'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; @@ -68,14 +68,24 @@ function AgentsPage() { }) .filter(Boolean) as AgentItem[]; + const handleErrorClose = (pendingAction: PendingAction | null | undefined, accountID: number) => { + if (pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD) { + clearAgentError(accountID); + } else { + clearAgentUpdateError(accountID); + } + }; + + const isAddPending = (pendingAction: PendingAction | null | undefined) => pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD; + const renderItem = ({item}: {item: AgentItem}) => ( clearAgentError(item.accountID)} + errors={isAddPending(item.pendingAction) ? item.errors : null} + onErrorClose={() => handleErrorClose(item.pendingAction, item.accountID)} /> ); diff --git a/src/pages/settings/Agents/EditAgentPage.tsx b/src/pages/settings/Agents/EditAgentPage.tsx index b35a45ad59ad..2db013f32e9a 100644 --- a/src/pages/settings/Agents/EditAgentPage.tsx +++ b/src/pages/settings/Agents/EditAgentPage.tsx @@ -1,18 +1,24 @@ import React, {useState} from 'react'; +import {View} from 'react-native'; import ConfirmModal from '@components/ConfirmModal'; import HeaderWithBackButton from '@components/HeaderWithBackButton'; import MenuItem from '@components/MenuItem'; import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription'; +import OfflineWithFeedback from '@components/OfflineWithFeedback'; +import ReportActionAvatars from '@components/ReportActionAvatars'; import ScreenWrapper from '@components/ScreenWrapper'; import ScrollView from '@components/ScrollView'; import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; +import useStyleUtils from '@hooks/useStyleUtils'; import useThemeStyles from '@hooks/useThemeStyles'; -import {deleteAgent} from '@libs/actions/Agent'; +import {clearAgentUpdateError, deleteAgent} from '@libs/actions/Agent'; import Navigation from '@libs/Navigation/Navigation'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; +import variables from '@styles/variables'; +import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; @@ -26,6 +32,7 @@ function EditAgentPage({route}: EditAgentPageProps) { const accountID = route.params.accountID; const [agent] = useOnyx(`${ONYXKEYS.COLLECTION.SHARED_NVP_AGENT_PROMPT}${accountID}`); const [personalDetails] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {selector: (list) => list?.[accountID]}); + const StyleUtils = useStyleUtils(); const [isDeleteModalVisible, setIsDeleteModalVisible] = useState(false); const handleDeleteAgent = () => { @@ -44,19 +51,32 @@ function EditAgentPage({route}: EditAgentPageProps) { onBackButtonPress={() => Navigation.goBack()} /> - Navigation.navigate(ROUTES.SETTINGS_AGENTS_EDIT_NAME.getRoute(accountID))} - /> - Navigation.navigate(ROUTES.SETTINGS_AGENTS_EDIT_PROMPT.getRoute(accountID))} - numberOfLinesTitle={3} - /> + + + + clearAgentUpdateError(accountID)} + > + Navigation.navigate(ROUTES.SETTINGS_AGENTS_EDIT_NAME.getRoute(accountID))} + /> + Navigation.navigate(ROUTES.SETTINGS_AGENTS_EDIT_PROMPT.getRoute(accountID))} + /> + list?.[accountID]}); - const [formIsLoading] = useOnyx(ONYXKEYS.FORMS.EDIT_AGENT_NAME_FORM, {selector: (form) => form?.isLoading}); - const [formErrors] = useOnyx(ONYXKEYS.FORMS.EDIT_AGENT_NAME_FORM, {selector: (form) => form?.errors}); - const hasSubmittedRef = useRef(false); - - useEffect(() => { - clearErrors(ONYXKEYS.FORMS.EDIT_AGENT_NAME_FORM); - }, []); - - useEffect(() => { - if (!hasSubmittedRef.current || formIsLoading || formErrors) { - return; - } - Navigation.goBack(ROUTES.SETTINGS_AGENTS_EDIT.getRoute(accountID)); - hasSubmittedRef.current = false; - }, [formIsLoading, formErrors, accountID]); const handleSubmit = (values: FormOnyxValues) => { - hasSubmittedRef.current = true; updateAgentName(accountID, values[INPUT_IDS.FIRST_NAME].trim(), personalDetails?.displayName ?? ''); + Navigation.goBack(ROUTES.SETTINGS_AGENTS_EDIT.getRoute(accountID)); }; return ( diff --git a/src/pages/settings/Agents/Fields/EditPromptPage.tsx b/src/pages/settings/Agents/Fields/EditPromptPage.tsx index 2ce5de7b09af..38d9c9535061 100644 --- a/src/pages/settings/Agents/Fields/EditPromptPage.tsx +++ b/src/pages/settings/Agents/Fields/EditPromptPage.tsx @@ -1,4 +1,4 @@ -import React, {useEffect, useRef} from 'react'; +import React from 'react'; import {View} from 'react-native'; import FormProvider from '@components/Form/FormProvider'; import InputWrapper from '@components/Form/InputWrapper'; @@ -13,7 +13,6 @@ import {updateAgentPrompt} from '@libs/actions/Agent'; import Navigation from '@libs/Navigation/Navigation'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; -import {clearErrors} from '@userActions/FormActions'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; @@ -27,25 +26,10 @@ function EditPromptPage({route}: EditPromptPageProps) { const styles = useThemeStyles(); const accountID = route.params.accountID; const [agentPrompt] = useOnyx(`${ONYXKEYS.COLLECTION.SHARED_NVP_AGENT_PROMPT}${accountID}`); - const [formIsLoading] = useOnyx(ONYXKEYS.FORMS.EDIT_AGENT_PROMPT_FORM, {selector: (form) => form?.isLoading}); - const [formErrors] = useOnyx(ONYXKEYS.FORMS.EDIT_AGENT_PROMPT_FORM, {selector: (form) => form?.errors}); - const hasSubmittedRef = useRef(false); - - useEffect(() => { - clearErrors(ONYXKEYS.FORMS.EDIT_AGENT_PROMPT_FORM); - }, []); - - useEffect(() => { - if (!hasSubmittedRef.current || formIsLoading || formErrors) { - return; - } - Navigation.goBack(ROUTES.SETTINGS_AGENTS_EDIT.getRoute(accountID)); - hasSubmittedRef.current = false; - }, [formIsLoading, formErrors, accountID]); const handleSubmit = (values: FormOnyxValues) => { - hasSubmittedRef.current = true; updateAgentPrompt(accountID, values[INPUT_IDS.PROMPT].trim(), agentPrompt?.prompt ?? ''); + Navigation.goBack(ROUTES.SETTINGS_AGENTS_EDIT.getRoute(accountID)); }; return ( From 8ed0de0b6f6412fda6fb72142f930c9734348d14 Mon Sep 17 00:00:00 2001 From: Nicolas Bonet Date: Wed, 6 May 2026 14:18:06 -0500 Subject: [PATCH 07/38] feat: Integrate AgentInfoRow component into AgentsListRow for improved agent display --- src/pages/settings/Agents/AgentInfoRow.tsx | 46 ++++++++++++++ src/pages/settings/Agents/AgentsListRow.tsx | 67 +++++++++++---------- 2 files changed, 81 insertions(+), 32 deletions(-) create mode 100644 src/pages/settings/Agents/AgentInfoRow.tsx diff --git a/src/pages/settings/Agents/AgentInfoRow.tsx b/src/pages/settings/Agents/AgentInfoRow.tsx new file mode 100644 index 000000000000..f981213e7e60 --- /dev/null +++ b/src/pages/settings/Agents/AgentInfoRow.tsx @@ -0,0 +1,46 @@ +import React from 'react'; +import {View} from 'react-native'; +import ReportActionAvatars from '@components/ReportActionAvatars'; +import Text from '@components/Text'; +import useStyleUtils from '@hooks/useStyleUtils'; +import useThemeStyles from '@hooks/useThemeStyles'; +import variables from '@styles/variables'; +import CONST from '@src/CONST'; + +type AgentInfoRowProps = { + accountID: number; + displayName: string; + login: string; +}; + +function AgentInfoRow({accountID, displayName, login}: AgentInfoRowProps) { + const styles = useThemeStyles(); + const StyleUtils = useStyleUtils(); + + return ( + <> + + + + {displayName} + + + {login} + + + + ); +} + +export default AgentInfoRow; diff --git a/src/pages/settings/Agents/AgentsListRow.tsx b/src/pages/settings/Agents/AgentsListRow.tsx index 8156499cc48d..77c64f1a577d 100644 --- a/src/pages/settings/Agents/AgentsListRow.tsx +++ b/src/pages/settings/Agents/AgentsListRow.tsx @@ -1,16 +1,16 @@ import React from 'react'; import {View} from 'react-native'; +import Button from '@components/Button'; import OfflineWithFeedback from '@components/OfflineWithFeedback'; import PressableWithFeedback from '@components/Pressable/PressableWithFeedback'; -import ReportActionAvatars from '@components/ReportActionAvatars'; -import Text from '@components/Text'; -import useStyleUtils from '@hooks/useStyleUtils'; +import useLocalize from '@hooks/useLocalize'; +import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useThemeStyles from '@hooks/useThemeStyles'; import Navigation from '@libs/Navigation/Navigation'; -import variables from '@styles/variables'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; import type {Errors, PendingAction} from '@src/types/onyx/OnyxCommon'; +import AgentInfoRow from './AgentInfoRow'; type AgentsListRowProps = { /** Account ID of the agent */ @@ -34,7 +34,10 @@ type AgentsListRowProps = { function AgentsListRow({accountID, displayName, login, pendingAction, errors, onErrorClose}: AgentsListRowProps) { const styles = useThemeStyles(); - const StyleUtils = useStyleUtils(); + const {translate} = useLocalize(); + const {shouldUseNarrowLayout} = useResponsiveLayout(); + + const navigateToEdit = () => Navigation.navigate(ROUTES.SETTINGS_AGENTS_EDIT.getRoute(accountID)); return ( - Navigation.navigate(ROUTES.SETTINGS_AGENTS_EDIT.getRoute(accountID))} - accessibilityLabel={displayName} - role={CONST.ROLE.BUTTON} - sentryLabel="AgentsListRow-Edit" - > - - - - {displayName} - - - {login} - + {shouldUseNarrowLayout ? ( + + + + ) : ( + + +