From f6b9b48370aed4f9ca41f5b5b5e89f3f3c241bf6 Mon Sep 17 00:00:00 2001 From: Daniel La Rocque Date: Mon, 28 Apr 2025 10:41:59 -0400 Subject: [PATCH] Add Firebase AI SDK sample app --- ai/ai-react-app/.prettierrc | 1 + ai/ai-react-app/README.md | 33 + ai/ai-react-app/eslint.config.js | 30 + ai/ai-react-app/firebase-icon.svg | 6 + ai/ai-react-app/images/screenshot.png | Bin 0 -> 95990 bytes ai/ai-react-app/index.html | 13 + ai/ai-react-app/package-lock.json | 3647 +++++++++++++++++ ai/ai-react-app/package.json | 33 + ai/ai-react-app/src/App.tsx | 30 + ai/ai-react-app/src/assets/firebase-icon.png | Bin 0 -> 957 bytes .../components/Common/FileUploader.module.css | 71 + .../src/components/Common/FileUploader.tsx | 104 + .../components/Common/PromptInput.module.css | 150 + .../src/components/Common/PromptInput.tsx | 190 + .../Common/ResponseDisplay.module.css | 97 + .../src/components/Common/ResponseDisplay.tsx | 82 + .../components/Layout/LeftSidebar.module.css | 73 + .../src/components/Layout/LeftSidebar.tsx | 83 + .../components/Layout/MainLayout.module.css | 39 + .../src/components/Layout/MainLayout.tsx | 157 + .../components/Layout/RightSidebar.module.css | 255 ++ .../src/components/Layout/RightSidebar.tsx | 472 +++ .../src/components/Layout/TopBar.module.css | 29 + .../src/components/Layout/TopBar.tsx | 22 + .../Specific/ChatMessage.module.css | 49 + .../src/components/Specific/ChatMessage.tsx | 63 + ai/ai-react-app/src/config/firebase-config.ts | 9 + ai/ai-react-app/src/index.css | 87 + ai/ai-react-app/src/main.tsx | 15 + .../src/services/firebaseAIService.ts | 160 + ai/ai-react-app/src/utils/fileUtils.ts | 49 + ai/ai-react-app/src/views/ChatView.module.css | 132 + ai/ai-react-app/src/views/ChatView.tsx | 531 +++ .../src/views/ImagenView.module.css | 105 + ai/ai-react-app/src/views/ImagenView.tsx | 147 + ai/ai-react-app/src/vite-env.d.ts | 1 + ai/ai-react-app/tsconfig.app.json | 26 + ai/ai-react-app/tsconfig.json | 7 + ai/ai-react-app/tsconfig.node.json | 24 + ai/ai-react-app/vite.config.ts | 6 + ai/ai-react-app/yarn.lock | 2206 ++++++++++ scripts/test.sh | 4 +- 42 files changed, 9236 insertions(+), 2 deletions(-) create mode 100644 ai/ai-react-app/.prettierrc create mode 100644 ai/ai-react-app/README.md create mode 100644 ai/ai-react-app/eslint.config.js create mode 100644 ai/ai-react-app/firebase-icon.svg create mode 100644 ai/ai-react-app/images/screenshot.png create mode 100644 ai/ai-react-app/index.html create mode 100644 ai/ai-react-app/package-lock.json create mode 100644 ai/ai-react-app/package.json create mode 100644 ai/ai-react-app/src/App.tsx create mode 100644 ai/ai-react-app/src/assets/firebase-icon.png create mode 100644 ai/ai-react-app/src/components/Common/FileUploader.module.css create mode 100644 ai/ai-react-app/src/components/Common/FileUploader.tsx create mode 100644 ai/ai-react-app/src/components/Common/PromptInput.module.css create mode 100644 ai/ai-react-app/src/components/Common/PromptInput.tsx create mode 100644 ai/ai-react-app/src/components/Common/ResponseDisplay.module.css create mode 100644 ai/ai-react-app/src/components/Common/ResponseDisplay.tsx create mode 100644 ai/ai-react-app/src/components/Layout/LeftSidebar.module.css create mode 100644 ai/ai-react-app/src/components/Layout/LeftSidebar.tsx create mode 100644 ai/ai-react-app/src/components/Layout/MainLayout.module.css create mode 100644 ai/ai-react-app/src/components/Layout/MainLayout.tsx create mode 100644 ai/ai-react-app/src/components/Layout/RightSidebar.module.css create mode 100644 ai/ai-react-app/src/components/Layout/RightSidebar.tsx create mode 100644 ai/ai-react-app/src/components/Layout/TopBar.module.css create mode 100644 ai/ai-react-app/src/components/Layout/TopBar.tsx create mode 100644 ai/ai-react-app/src/components/Specific/ChatMessage.module.css create mode 100644 ai/ai-react-app/src/components/Specific/ChatMessage.tsx create mode 100644 ai/ai-react-app/src/config/firebase-config.ts create mode 100644 ai/ai-react-app/src/index.css create mode 100644 ai/ai-react-app/src/main.tsx create mode 100644 ai/ai-react-app/src/services/firebaseAIService.ts create mode 100644 ai/ai-react-app/src/utils/fileUtils.ts create mode 100644 ai/ai-react-app/src/views/ChatView.module.css create mode 100644 ai/ai-react-app/src/views/ChatView.tsx create mode 100644 ai/ai-react-app/src/views/ImagenView.module.css create mode 100644 ai/ai-react-app/src/views/ImagenView.tsx create mode 100644 ai/ai-react-app/src/vite-env.d.ts create mode 100644 ai/ai-react-app/tsconfig.app.json create mode 100644 ai/ai-react-app/tsconfig.json create mode 100644 ai/ai-react-app/tsconfig.node.json create mode 100644 ai/ai-react-app/vite.config.ts create mode 100644 ai/ai-react-app/yarn.lock diff --git a/ai/ai-react-app/.prettierrc b/ai/ai-react-app/.prettierrc new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/ai/ai-react-app/.prettierrc @@ -0,0 +1 @@ +{} diff --git a/ai/ai-react-app/README.md b/ai/ai-react-app/README.md new file mode 100644 index 000000000..0282f5098 --- /dev/null +++ b/ai/ai-react-app/README.md @@ -0,0 +1,33 @@ +# Firebase AI Sample App + +![Photo of the Firebase AI Sample App](images/screenshot.png) + +This sample application demonstrates features of the Firebase AI SDK for Web (`firebase/ai`), integrated into a web application built with React and TypeScript. + +For more information about the Firebase AI SDK, see the [Firebase AI Logic Docs](https://firebase.google.com/docs/vertex-ai). + +## Setup Instructions + +1. Follow the instructions to create a Firebase project that uses Firebase AI Logic. + +1. Update `src/config/firebase-config.ts` with your Firebase project configuration. + +1. Install dependencies: + + ```bash + yarn + ``` + +1. Start the development server: + + ```bash + yarn dev + ``` + +## Support + +- [Firebase Support](https://firebase.google.com/support/) + +## License + +© Google, 2025. Licensed under an [Apache-2](../LICENSE) diff --git a/ai/ai-react-app/eslint.config.js b/ai/ai-react-app/eslint.config.js new file mode 100644 index 000000000..64f8a4b71 --- /dev/null +++ b/ai/ai-react-app/eslint.config.js @@ -0,0 +1,30 @@ +import js from "@eslint/js"; +import globals from "globals"; +import reactHooks from "eslint-plugin-react-hooks"; +import reactRefresh from "eslint-plugin-react-refresh"; +import tseslint from "typescript-eslint"; +import eslintConfigPrettier from "eslint-config-prettier/flat" + +export default tseslint.config( + { ignores: ["dist"] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ["**/*.{ts,tsx}"], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + "react-hooks": reactHooks, + "react-refresh": reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + "react-refresh/only-export-components": [ + "warn", + { allowConstantExport: true }, + ], + }, + }, + eslintConfigPrettier +); diff --git a/ai/ai-react-app/firebase-icon.svg b/ai/ai-react-app/firebase-icon.svg new file mode 100644 index 000000000..f7515edcb --- /dev/null +++ b/ai/ai-react-app/firebase-icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/ai/ai-react-app/images/screenshot.png b/ai/ai-react-app/images/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..99b9a5265863a635a03e838a42ecca763a5a3026 GIT binary patch literal 95990 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 =W7o1u! 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 literal 0 HcmV?d00001 diff --git a/ai/ai-react-app/index.html b/ai/ai-react-app/index.html new file mode 100644 index 000000000..1d34e7b64 --- /dev/null +++ b/ai/ai-react-app/index.html @@ -0,0 +1,13 @@ + + + + + + + Firebase AI Sample App + + +
+ + + diff --git a/ai/ai-react-app/package-lock.json b/ai/ai-react-app/package-lock.json new file mode 100644 index 000000000..9e500aa05 --- /dev/null +++ b/ai/ai-react-app/package-lock.json @@ -0,0 +1,3647 @@ +{ + "name": "ai", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ai", + "version": "0.0.0", + "dependencies": { + "firebase": "^11.6.0-eap-vertexai-hybgoog.31261ca31", + "immer": "^10.1.1", + "react": "^19.0.0", + "react-dom": "^19.0.0" + }, + "devDependencies": { + "@eslint/js": "^9.22.0", + "@types/react": "^19.0.10", + "@types/react-dom": "^19.0.4", + "@vitejs/plugin-react": "^4.3.4", + "eslint": "^9.22.0", + "eslint-config-prettier": "^10.1.2", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.19", + "globals": "^16.0.0", + "prettier": "^3.5.3", + "typescript": "~5.7.2", + "typescript-eslint": "^8.26.1", + "vite": "^6.3.1" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", + "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.3.tgz", + "integrity": "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.6.1.tgz", + "integrity": "sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", + "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.1.tgz", + "integrity": "sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", + "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.25.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.25.1.tgz", + "integrity": "sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", + "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.13.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@firebase/analytics": { + "version": "0.10.12-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.12-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-MakOfFq0r2HiFIuJLQSra05r6AS8rjj2KhTvM12wITpcs6PBBN8Kh4zUTzThWDR5RX84UQUHJEiHmj2iQY2ZYw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/installations": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/logger": "0.4.4-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.11.4-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/analytics-compat": { + "version": "0.2.18-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.18-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-1ZgKRzMsWopx51D38ge3U2ufQJb/+Qrxl4osL58gYjNaFWmZJ6As35zDIzFaCY42bNfUEvxixIiO8vsorPOnxA==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/analytics": "0.10.12-eap-vertexai-hybgoog.31261ca31", + "@firebase/analytics-types": "0.8.3-eap-vertexai-hybgoog.31261ca31", + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.2.53-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/analytics-types": { + "version": "0.8.3-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.3-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-JY/4YJ7tgIV0vDX2R1rfiBUNzxSftz0Y2VmLUWQmJj+XPRn87I0y/Jk/NyRtzpeB09CrdH2qn228SxuAgYle7g==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/app": { + "version": "0.11.4-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.11.4-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-0uequef8Uv+AJwGCC6cevJ71rfOOVEJpEuTJQQaMHOpsMQDVLmcTCrm6MlCzYVE8ab1PZ3e7eXUQLXL/OCJJvw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/logger": "0.4.4-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/app-check": { + "version": "0.8.13-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.8.13-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-Yp45k9gVRYb9Ru+hi0eRGRnjZtzVKAVkYd7CY2KH33MOMhfLyCH0BDTCUhXnYFiqqlkSLrMeGTb6IQfI+6s3pA==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/logger": "0.4.4-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.11.4-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/app-check-compat": { + "version": "0.3.20-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.20-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-aDiFKhQSnTSrEkenF00/uZXQdugs252cFTZlx+Za2/OrMvK4SQOXTZjLQ+trfvoH/On40meH7a5hSw/3niYTew==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check": "0.8.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/app-check-types": "0.5.3-eap-vertexai-hybgoog.31261ca31", + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/logger": "0.4.4-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.2.53-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/app-check-interop-types": { + "version": "0.3.3-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.3-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-0GYjujhH+ycSJgprfZrJ6Bat1BAcabZVMhFHGWFXaCMmiihq7jMGfS5z3LJsio4TaUEwYd93zEv5Yfdrh8cm4g==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/app-check-types": { + "version": "0.5.3-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.3-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-H+WbJCJEUsbajftNMhYNq3JnxGXyJh1L3D/KUKFdMjXUnqrss2sSz7IcrOa9oyK8UWM0TNF9u6KrmbDC21j9tQ==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/app-compat": { + "version": "0.2.53-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.53-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-tgkIP8q0bQJYwZtbPT6obQqpZuwpRPEKOGCIzglHZYrBirfGD+Ck7+wABBo6Ey0/Km2jpvqWwgDH9XWyNiG+mQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app": "0.11.4-eap-vertexai-hybgoog.31261ca31", + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/logger": "0.4.4-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/app-types": { + "version": "0.9.3-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.3-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-mVlyQK5KmIg9yghBHO0pychkqUDIw2XdcnjE7laD7/2Z2O97ChiuGJwshNupHLXTRpi/XdKLMZ+m5Hj/QvW1mA==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/auth": { + "version": "1.10.0-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.10.0-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-P+fn6qkgybCPH5c11ND86hhC7CbjCulxyX36cbDSM/2hYdKeYiQBYD+hDIEQCtJV9k/pSjeyC7dly+bRvRgtyg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/logger": "0.4.4-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.11.4-eap-vertexai-hybgoog.31261ca31", + "@react-native-async-storage/async-storage": "^1.18.1" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } + } + }, + "node_modules/@firebase/auth-compat": { + "version": "0.5.20-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.5.20-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-1LRjZaPJPQG48skTM3M4Z+mLBkO5PHrqkrFO3ZzW76pEJzbkxtb0MChGMQDP4lUjyKEAYtI8G9fAtpdTPLl7bw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/auth": "1.10.0-eap-vertexai-hybgoog.31261ca31", + "@firebase/auth-types": "0.13.0-eap-vertexai-hybgoog.31261ca31", + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.2.53-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/auth-interop-types": { + "version": "0.2.4-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.4-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-LcAREo9H+4EDmeBfwQNFHKko2zixneoaHuH8oX4t4AZz0F14eTKBvZivDd76a0OB6DYKKm13R4mJm0jw52acpg==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/auth-types": { + "version": "0.13.0-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.13.0-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-geai124QIb2fIh5DjGT/M6Wb3Iv6MK3isYJmKm7EQ4l8JbJN782Pig4xzH0i0u24acgQFkNNjVdNPt0rWbKjRQ==", + "license": "Apache-2.0", + "peerDependencies": { + "@firebase/app-types": "0.9.3-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/component": { + "version": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.13-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-ZkR1Ad454lmjntoAy9L5YHqv25OCFkucbjrU/J1pXQuLm5C7+qjU+EZ6yBIrM+dmpht4m9CZtG5Emdph9SF2JQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/data-connect": { + "version": "0.3.3-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/data-connect/-/data-connect-0.3.3-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-xNbsotpJ72AXLu59KFJ1EprbA0+krJ7r3RNEk+DnDm7eXnvYTxQpkZQI/DwHACTQR/fhWN2ctQADhFUiFI/ONw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/auth-interop-types": "0.2.4-eap-vertexai-hybgoog.31261ca31", + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/logger": "0.4.4-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.11.4-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/database": { + "version": "1.0.14-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.0.14-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-ROraNiTA1QcEKcVBSwO1d2KvQUzDnxjsEwe0N/vCSaMvkbgx/Y2PI0KSlC6dlQurxNXx1vV/iqajowkRxlFHEA==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check-interop-types": "0.3.3-eap-vertexai-hybgoog.31261ca31", + "@firebase/auth-interop-types": "0.2.4-eap-vertexai-hybgoog.31261ca31", + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/logger": "0.4.4-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "faye-websocket": "0.11.4", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/database-compat": { + "version": "2.0.5-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.0.5-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-KnCjeo1JSM4MfKLiBGc0LVOjai54XvrJwCpGSukJcUU88cl8hFQW3Khot0L515A0CK+T6bU6w4xlKwbZiJj52A==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/database": "1.0.14-eap-vertexai-hybgoog.31261ca31", + "@firebase/database-types": "1.0.10-eap-vertexai-hybgoog.31261ca31", + "@firebase/logger": "0.4.4-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/database-types": { + "version": "1.0.10-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.10-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-CjLipg4i6EHKU+LHIY8kNptvd4RYjTLzgn144XMPqIllHyW7I4sPd1gHwuEllAXnbO1Gzs/g3MMDt+m2B2b9+g==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-types": "0.9.3-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/firestore": { + "version": "4.7.10-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.7.10-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-H/oDnr83aJC27zXPC7rUE3oaq44BLy7kXajStylnZKYRiFZfdfI0/RRaHTSz4ZNVebAxHv60D1WiuQYKtEIWsQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/logger": "0.4.4-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "@firebase/webchannel-wrapper": "1.0.3-eap-vertexai-hybgoog.31261ca31", + "@grpc/grpc-js": "~1.9.0", + "@grpc/proto-loader": "^0.7.8", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.11.4-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/firestore-compat": { + "version": "0.3.45-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.45-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-4d5VC5ClEMX4dcal9LX+Rsmdi45jovOOmLDjosTYcXa4dmVJzel14EHmRZtLJEI1iORhdQgJ3NBcVSQ+LtpHSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/firestore": "4.7.10-eap-vertexai-hybgoog.31261ca31", + "@firebase/firestore-types": "3.0.3-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.2.53-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/firestore-types": { + "version": "3.0.3-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-3.0.3-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-k6rJ+xAhwk0y/jtRGjTJrxfuzjgI0eRi+1Sw3BTyHRbbMiHrQjwD/4lcYW2QuuFe0AuFKIciV20BATANqvVv0Q==", + "license": "Apache-2.0", + "peerDependencies": { + "@firebase/app-types": "0.9.3-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/functions": { + "version": "0.12.3-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.12.3-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-H4x9WyC772HuJCxLpUCDt7n2X8p2PPaC69QTqMWXQeBQSx/UIyKMItEUfJbC46Ukh3nlE4RAnTipQEQ4OlPdWg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check-interop-types": "0.3.3-eap-vertexai-hybgoog.31261ca31", + "@firebase/auth-interop-types": "0.2.4-eap-vertexai-hybgoog.31261ca31", + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/messaging-interop-types": "0.2.3-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.11.4-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/functions-compat": { + "version": "0.3.20-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.20-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-KHPgyBmOCpgblZfJuC7p7vEPHwmU7YPrS0R9IBMXkw3aGA8f7IAkRWh4ociTI1CxN+tDHyYSnx3/GQkDaRm6Ug==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/functions": "0.12.3-eap-vertexai-hybgoog.31261ca31", + "@firebase/functions-types": "0.6.3-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.2.53-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/functions-types": { + "version": "0.6.3-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.3-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-isVdOs6RnGHJx7cSr87+uWeAO3x0Q0AbuuROVqwbPrqMn0qbNU5qk56R7oArnONoqpn3TZ46PLFj7iP2Lmcq8Q==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/installations": { + "version": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.13-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-IIwANFEO43FVg6/VkcNeuMY9Z1gk/IbwUiIRKEfdBfY0BGb33xLvsD20n0QHMMZVrWklDLmofVhhpiN//LM9sA==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.11.4-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/installations-compat": { + "version": "0.2.13-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.13-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-XX43r2BDPCrxtIXzeE0UK8Evaty71/OPqIcMvDNLex5ANONSdD+d1UMah0TcTJSv2PN/2H5drpG25ZNkZhqpaQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/installations": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/installations-types": "0.5.3-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.2.53-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/installations-types": { + "version": "0.5.3-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.3-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-nlQiN00/VMASeQ9/c8Mah3BV6/cYrvx/u6CEVvcky+GwEcdGqrpisYBW3B+b0hIqDEha9th5g9Hj9M2b8rOLjg==", + "license": "Apache-2.0", + "peerDependencies": { + "@firebase/app-types": "0.9.3-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/logger": { + "version": "0.4.4-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.4-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-lA4lBPJ3C/Vk1XOPqWBt2qUYZEDQlWoqLpiL31ycas0+nmM9MPgdri2RKJoUn4qQ+jOwi03GwVQuXiyUyYK+7w==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/messaging": { + "version": "0.12.17-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.17-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-ZZPwK9XkuPwN1gBGxjaVqc5WYpV5TXa1s0z3WlrZj1zQVri4ksA5Xbp3it9EFgYISf0xIhHNwNf/iZUc0CRzUQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/installations": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/messaging-interop-types": "0.2.3-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.11.4-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/messaging-compat": { + "version": "0.2.17-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.17-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-sSss7EC44tTxQl+ecdAyBrp92jBc1cpq31aG5iVL3Rf9Lr4eVS1p0swUYJQ8L43cJ1eTftove7LgJW4gl7Nj8g==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/messaging": "0.12.17-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.2.53-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/messaging-interop-types": { + "version": "0.2.3-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.3-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-RUIl6c239McuW1ksCnP0I7mTUQMqN1U8jSav6OIQlNdaMnQRyFjQxoXEalfz5XTQiSZMWLrY4buZZS+0leyaoQ==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/performance": { + "version": "0.7.2-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.7.2-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-nSitcfRA2i5sXS+TTdMVOjCN3RbkfcZvbLniQnuY6uVFfHgEthJ2Y3zGPOvWB7xDY/T1Kf09xZfrDh3N5CT/zg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/installations": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/logger": "0.4.4-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0", + "web-vitals": "^4.2.4" + }, + "peerDependencies": { + "@firebase/app": "0.11.4-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/performance-compat": { + "version": "0.2.15-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.15-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-jSu2cOT1ZP6qEyWf+ZbtI4KzIUckqi8J9cnVIXepVwk1QAj4ST02rRSGq9Z3nzMQGCyy9Ql9+a+84F5YGsZ85Q==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/logger": "0.4.4-eap-vertexai-hybgoog.31261ca31", + "@firebase/performance": "0.7.2-eap-vertexai-hybgoog.31261ca31", + "@firebase/performance-types": "0.2.3-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.2.53-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/performance-types": { + "version": "0.2.3-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.3-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-Wgo1w/AYQeNWL+LmBKJrBPT+OPPgo+i6Yt+30PiUyMEkkJgM1ZJOzKoKEUNrbtgbjGjuoREG269u0IUkLrqLbw==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/remote-config": { + "version": "0.6.0-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.6.0-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-CwYKjoFDVjrTKJ1DcyPhWxyMgebvmUmVDsZihPGIAc4vkU7oJorM9JuE5nyqC3SUtT4lMyUrWV13HJzTHVhRmg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/installations": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/logger": "0.4.4-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.11.4-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/remote-config-compat": { + "version": "0.2.13-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.13-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-DDY8cpG+yjQk0ILHguGJeBpqLqjU301IGNC8n6lorQZVfGy8RlCDJUOoaEJ1PkKzt6P04/fNrSov9dKKkJ841g==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/logger": "0.4.4-eap-vertexai-hybgoog.31261ca31", + "@firebase/remote-config": "0.6.0-eap-vertexai-hybgoog.31261ca31", + "@firebase/remote-config-types": "0.4.0-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.2.53-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/remote-config-types": { + "version": "0.4.0-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.4.0-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-V4fdJaXMl6OIhfUlP7XPZ5D5MRRYhy4AjqVnkcw64GQmzq5zKmCGt8DuXXtf89cZ8kSJkzEBdIBkR+bIS5w7Kg==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/storage": { + "version": "0.13.7-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.13.7-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-iDB+dOOW+Jc2P9cUkMnlzAg9SwuwRn+Ny/TdROqreqE2lsVdGfzqTKLWHgpPdApyJHhbXrLGunvpSmtkUDzPPg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.11.4-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/storage-compat": { + "version": "0.3.17-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.3.17-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-zKQxa4Hkv7GM+UHJVNPIaSdTds4nCwkWWzIlW37EIJBjdISL36i/10k5XoX/ac9ns1Lge2YISPHKCitvi/Xgcg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/storage": "0.13.7-eap-vertexai-hybgoog.31261ca31", + "@firebase/storage-types": "0.8.3-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.2.53-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/storage-types": { + "version": "0.8.3-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.3-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-92m8w+YqP/f6h2FP2411BGxf36eehj0xnCTkW7eSekhyhrrkeieFfFwdwbxsijJWL4ztyslW5FdXImeycPINVQ==", + "license": "Apache-2.0", + "peerDependencies": { + "@firebase/app-types": "0.9.3-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/util": { + "version": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.11.0-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-ABlm9UMgmsjLzMcEEFLCo8HLIHYoPPQWkays8Bs7ZaBgcTYXMCuvQiodYpVgSi8uTvnTOI1EoH1SjMk0FLI6hQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@firebase/vertexai": { + "version": "1.2.1-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/vertexai/-/vertexai-1.2.1-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-WqzZ4dhpS7VzoGBxAS8wDSmZMyrF27z9B/7tTOycU0JzuZJoklDX5H4xR4HXFgs5lvaMdvvivWLGoKezSfibNA==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check-interop-types": "0.3.3-eap-vertexai-hybgoog.31261ca31", + "@firebase/component": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/logger": "0.4.4-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.11.4-eap-vertexai-hybgoog.31261ca31", + "@firebase/app-types": "0.9.3-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/@firebase/webchannel-wrapper": { + "version": "1.0.3-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.3-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-iivaF063PNndl8l9B0n7Av7osm+di++007b6FMWNnJhWZ7uI7lAEgf4f7N+EqVuLhAQJHM+0WggxtlLnQcSrpQ==", + "license": "Apache-2.0" + }, + "node_modules/@grpc/grpc-js": { + "version": "1.9.15", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.15.tgz", + "integrity": "sha512-nqE7Hc0AzI+euzUwDAy0aY5hCp10r734gMGRdU+qOPX0XSceI2ULrcXB5U2xSc5VkWwalCj4M7GzCAygZl2KoQ==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.7.8", + "@types/node": ">=12.12.47" + }, + "engines": { + "node": "^8.13.0 || >=10.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.0.tgz", + "integrity": "sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.14.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz", + "integrity": "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/react": { + "version": "19.1.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.2.tgz", + "integrity": "sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.1.2", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.2.tgz", + "integrity": "sha512-XGJkWF41Qq305SKWEILa1O8vzhb3aOo3ogBlSmiqNko/WmRb6QIaweuZCXjKygVDXpzXb5wyxKTSOsmkuqj+Qw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.31.0.tgz", + "integrity": "sha512-evaQJZ/J/S4wisevDvC1KFZkPzRetH8kYZbkgcTRyql3mcKsf+ZFDV1BVWUGTCAW5pQHoqn5gK5b8kn7ou9aFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.31.0", + "@typescript-eslint/type-utils": "8.31.0", + "@typescript-eslint/utils": "8.31.0", + "@typescript-eslint/visitor-keys": "8.31.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.31.0.tgz", + "integrity": "sha512-67kYYShjBR0jNI5vsf/c3WG4u+zDnCTHTPqVMQguffaWWFs7artgwKmfwdifl+r6XyM5LYLas/dInj2T0SgJyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.31.0", + "@typescript-eslint/types": "8.31.0", + "@typescript-eslint/typescript-estree": "8.31.0", + "@typescript-eslint/visitor-keys": "8.31.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.31.0.tgz", + "integrity": "sha512-knO8UyF78Nt8O/B64i7TlGXod69ko7z6vJD9uhSlm0qkAbGeRUSudcm0+K/4CrRjrpiHfBCjMWlc08Vav1xwcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.31.0", + "@typescript-eslint/visitor-keys": "8.31.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.31.0.tgz", + "integrity": "sha512-DJ1N1GdjI7IS7uRlzJuEDCgDQix3ZVYVtgeWEyhyn4iaoitpMBX6Ndd488mXSx0xah/cONAkEaYyylDyAeHMHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.31.0", + "@typescript-eslint/utils": "8.31.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.31.0.tgz", + "integrity": "sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.31.0.tgz", + "integrity": "sha512-xLmgn4Yl46xi6aDSZ9KkyfhhtnYI15/CvHbpOy/eR5NWhK/BK8wc709KKwhAR0m4ZKRP7h07bm4BWUYOCuRpQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.31.0", + "@typescript-eslint/visitor-keys": "8.31.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.31.0.tgz", + "integrity": "sha512-qi6uPLt9cjTFxAb1zGNgTob4x9ur7xC6mHQJ8GwEzGMGE9tYniublmJaowOJ9V2jUzxrltTPfdG2nKlWsq0+Ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.31.0", + "@typescript-eslint/types": "8.31.0", + "@typescript-eslint/typescript-estree": "8.31.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.31.0.tgz", + "integrity": "sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.31.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.4.1.tgz", + "integrity": "sha512-IpEm5ZmeXAP/osiBXVVP5KjFMzbWOonMs0NaQQl+xYnUAcq4oHUBsF2+p4MgKWG4YMmFYJU8A6sxRPuowllm6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.26.10", + "@babel/plugin-transform-react-jsx-self": "^7.25.9", + "@babel/plugin-transform-react-jsx-source": "^7.25.9", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "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, + "license": "Python-2.0" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001715", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001715.tgz", + "integrity": "sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "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, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.140", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.140.tgz", + "integrity": "sha512-o82Rj+ONp4Ip7Cl1r7lrqx/pXhbp/lh9DpKcMNscFJdh8ebyRofnc7Sh01B4jx403RI0oqTBvlZ7OBIZLMr2+Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.3.tgz", + "integrity": "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.3", + "@esbuild/android-arm": "0.25.3", + "@esbuild/android-arm64": "0.25.3", + "@esbuild/android-x64": "0.25.3", + "@esbuild/darwin-arm64": "0.25.3", + "@esbuild/darwin-x64": "0.25.3", + "@esbuild/freebsd-arm64": "0.25.3", + "@esbuild/freebsd-x64": "0.25.3", + "@esbuild/linux-arm": "0.25.3", + "@esbuild/linux-arm64": "0.25.3", + "@esbuild/linux-ia32": "0.25.3", + "@esbuild/linux-loong64": "0.25.3", + "@esbuild/linux-mips64el": "0.25.3", + "@esbuild/linux-ppc64": "0.25.3", + "@esbuild/linux-riscv64": "0.25.3", + "@esbuild/linux-s390x": "0.25.3", + "@esbuild/linux-x64": "0.25.3", + "@esbuild/netbsd-arm64": "0.25.3", + "@esbuild/netbsd-x64": "0.25.3", + "@esbuild/openbsd-arm64": "0.25.3", + "@esbuild/openbsd-x64": "0.25.3", + "@esbuild/sunos-x64": "0.25.3", + "@esbuild/win32-arm64": "0.25.3", + "@esbuild/win32-ia32": "0.25.3", + "@esbuild/win32-x64": "0.25.3" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.25.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.25.1.tgz", + "integrity": "sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.0", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.13.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.25.1", + "@eslint/plugin-kit": "^0.2.8", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.2.tgz", + "integrity": "sha512-Epgp/EofAUeEpIdZkW60MHKvPyru1ruQJxPL+WIycnaPApuseK0Zpkrh/FwL9oIpQvIhJwV7ptOy0DWUjTlCiA==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", + "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/firebase": { + "version": "11.6.0-eap-vertexai-hybgoog.31261ca31", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-11.6.0-eap-vertexai-hybgoog.31261ca31.tgz", + "integrity": "sha512-AFwDJovC+MtfV1LIDgFJ/1IJQCWl3YatHCmGc8Adk7U6kCiIuNx3ebiUsI8sC7knYmTHUy0Qi0wT7t5SjCVKng==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/analytics": "0.10.12-eap-vertexai-hybgoog.31261ca31", + "@firebase/analytics-compat": "0.2.18-eap-vertexai-hybgoog.31261ca31", + "@firebase/app": "0.11.4-eap-vertexai-hybgoog.31261ca31", + "@firebase/app-check": "0.8.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/app-check-compat": "0.3.20-eap-vertexai-hybgoog.31261ca31", + "@firebase/app-compat": "0.2.53-eap-vertexai-hybgoog.31261ca31", + "@firebase/app-types": "0.9.3-eap-vertexai-hybgoog.31261ca31", + "@firebase/auth": "1.10.0-eap-vertexai-hybgoog.31261ca31", + "@firebase/auth-compat": "0.5.20-eap-vertexai-hybgoog.31261ca31", + "@firebase/data-connect": "0.3.3-eap-vertexai-hybgoog.31261ca31", + "@firebase/database": "1.0.14-eap-vertexai-hybgoog.31261ca31", + "@firebase/database-compat": "2.0.5-eap-vertexai-hybgoog.31261ca31", + "@firebase/firestore": "4.7.10-eap-vertexai-hybgoog.31261ca31", + "@firebase/firestore-compat": "0.3.45-eap-vertexai-hybgoog.31261ca31", + "@firebase/functions": "0.12.3-eap-vertexai-hybgoog.31261ca31", + "@firebase/functions-compat": "0.3.20-eap-vertexai-hybgoog.31261ca31", + "@firebase/installations": "0.6.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/installations-compat": "0.2.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/messaging": "0.12.17-eap-vertexai-hybgoog.31261ca31", + "@firebase/messaging-compat": "0.2.17-eap-vertexai-hybgoog.31261ca31", + "@firebase/performance": "0.7.2-eap-vertexai-hybgoog.31261ca31", + "@firebase/performance-compat": "0.2.15-eap-vertexai-hybgoog.31261ca31", + "@firebase/remote-config": "0.6.0-eap-vertexai-hybgoog.31261ca31", + "@firebase/remote-config-compat": "0.2.13-eap-vertexai-hybgoog.31261ca31", + "@firebase/storage": "0.13.7-eap-vertexai-hybgoog.31261ca31", + "@firebase/storage-compat": "0.3.17-eap-vertexai-hybgoog.31261ca31", + "@firebase/util": "1.11.0-eap-vertexai-hybgoog.31261ca31", + "@firebase/vertexai": "1.2.1-eap-vertexai-hybgoog.31261ca31" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.0.0.tgz", + "integrity": "sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "license": "MIT" + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "license": "ISC" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz", + "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/protobufjs": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.0.tgz", + "integrity": "sha512-Z2E/kOY1QjoMlCytmexzYfDm/w5fKAiRwpSzGtdnXW1zC88Z2yXazHHrOtwCzn+7wSxyE8PYM4rvVcMphF9sOA==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", + "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.0" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.0.tgz", + "integrity": "sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.7" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.40.0", + "@rollup/rollup-android-arm64": "4.40.0", + "@rollup/rollup-darwin-arm64": "4.40.0", + "@rollup/rollup-darwin-x64": "4.40.0", + "@rollup/rollup-freebsd-arm64": "4.40.0", + "@rollup/rollup-freebsd-x64": "4.40.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.40.0", + "@rollup/rollup-linux-arm-musleabihf": "4.40.0", + "@rollup/rollup-linux-arm64-gnu": "4.40.0", + "@rollup/rollup-linux-arm64-musl": "4.40.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.40.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.40.0", + "@rollup/rollup-linux-riscv64-gnu": "4.40.0", + "@rollup/rollup-linux-riscv64-musl": "4.40.0", + "@rollup/rollup-linux-s390x-gnu": "4.40.0", + "@rollup/rollup-linux-x64-gnu": "4.40.0", + "@rollup/rollup-linux-x64-musl": "4.40.0", + "@rollup/rollup-win32-arm64-msvc": "4.40.0", + "@rollup/rollup-win32-ia32-msvc": "4.40.0", + "@rollup/rollup-win32-x64-msvc": "4.40.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "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, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", + "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.31.0.tgz", + "integrity": "sha512-u+93F0sB0An8WEAPtwxVhFby573E8ckdjwUUQUj9QA4v8JAvgtoDdIyYR3XFwFHq2W1KJ1AurwJCO+w+Y1ixyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.31.0", + "@typescript-eslint/parser": "8.31.0", + "@typescript-eslint/utils": "8.31.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.2.tgz", + "integrity": "sha512-ZSvGOXKGceizRQIZSz7TGJ0pS3QLlVY/9hwxVh17W3re67je1RKYzFHivZ/t0tubU78Vkyb9WnHPENSBCzbckg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.3", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.12" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/web-vitals": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.4.tgz", + "integrity": "sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==", + "license": "Apache-2.0" + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/ai/ai-react-app/package.json b/ai/ai-react-app/package.json new file mode 100644 index 000000000..abac8987c --- /dev/null +++ b/ai/ai-react-app/package.json @@ -0,0 +1,33 @@ +{ + "name": "ai", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "firebase": "11.6.0", + "immer": "^10.1.1", + "react": "^19.0.0", + "react-dom": "^19.0.0" + }, + "devDependencies": { + "@eslint/js": "^9.22.0", + "@types/react": "^19.0.10", + "@types/react-dom": "^19.0.4", + "@vitejs/plugin-react": "^4.3.4", + "prettier": "^3.5.3", + "eslint": "^9.22.0", + "eslint-config-prettier": "^10.1.2", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.19", + "globals": "^16.0.0", + "typescript": "~5.7.2", + "typescript-eslint": "^8.26.1", + "vite": "^6.3.1" + } +} diff --git a/ai/ai-react-app/src/App.tsx b/ai/ai-react-app/src/App.tsx new file mode 100644 index 000000000..5e77a25d3 --- /dev/null +++ b/ai/ai-react-app/src/App.tsx @@ -0,0 +1,30 @@ +import { useEffect, useState } from "react"; +import MainLayout from "./components/Layout/MainLayout"; + +// Defines the primary modes or views available in the application. +export type AppMode = "chat" | "imagenGen"; + +function App() { + // State to manage which main view ('chat' or 'imagenGen') is currently active. + const [activeMode, setActiveMode] = useState("chat"); + + useEffect(() => { + const checkConfig = async () => { + // Dynamically import config to avoid potential early errors if placeholders exist + const { firebaseConfig } = await import("./config/firebase-config"); + if ( + firebaseConfig.apiKey === "YOUR_API_KEY" || + !firebaseConfig.projectId + ) { + alert( + "WARNING: Firebase configuration in src/config/firebase-config.ts contains placeholder values. The app may not function correctly. Please replace them with your actual project configuration.", + ); + } + }; + checkConfig(); + }, []); + + return ; +} + +export default App; diff --git a/ai/ai-react-app/src/assets/firebase-icon.png b/ai/ai-react-app/src/assets/firebase-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9f1d267198708e046369362dcca863eabb31b6ff GIT binary patch literal 957 zcmV;u148_XP)Px&cS%G+R9HvFmQQF@R}_c8JBbq%x)9VP7OTvgVxkGUQiNb>v2-IY4Cq#*TD7#a zi@L3d8=(k-XhlSXl+ub_)PhDKizE{j4C2ho*d!)3rZJ8ApG?xpWM;137ZdYl-kWz{ zr1dOk&iS41opbL!NAQkKyiNZ0YAS+od@93{syL~oXe}9_a|@dT85)2!z-7ba^ZyMX zUP*aL5%*suUN@gqz;_{&AN)f2u7Es2p!+&^kbJT@nGj?$g1sL``P~nMZ-A~UjsO>2 zl1vJy37JH7A$$S+xsmsl1?fVv+BJdTsT6DvM|q(G;R~Rvns1Su@e~#`{hMKz&du-z z@T7{kfJ#pQKngB}V;uJK)duL?#HK)iHZQ@P|Bo4_>v^$U^#Q8+G9WqU6CfqwlWF01=KOIh`lp4kTXxDq*k*Ce?5HmMRvMt&cIfIK-&}w-9`mr~4NyK1MPN{eM7m zK%W4pHB5dh4A9K8#Zzvpo+qiw?@;o8>S0)A!aw1(M&<+q@jDPTpOp885P$i void; + /** Standard HTML 'accept' attribute string (e.g., "image/*", ".pdf", "image/png,image/jpeg"). */ + accept: string; + /** Optional text label for the button when no file is selected. */ + label?: string; + /** Disables the uploader if true. */ + disabled?: boolean; +} + +/** + * A simple file uploader component using a styled button + * to trigger a hidden file input. + */ +const FileUploader: React.FC = ({ + onFileSelect, + accept, + label = "Select File", + disabled = false, +}) => { + // State to store the name of the selected file for display purposes. + const [selectedFileName, setSelectedFileName] = useState(null); + // Ref to access the hidden file input element directly. + const fileInputRef = useRef(null); + + // Handles the change event when a file is selected via the input. + const handleFileChange = (event: ChangeEvent) => { + const file = event.target.files?.[0]; + if (file) { + setSelectedFileName(file.name); + onFileSelect(file); // Notify parent component + } else { + // If no file is selected (e.g., user cancels the dialog) + setSelectedFileName(null); + onFileSelect(null); + } + // Reset the input value. This allows selecting the same file again + // if the user clears it and then wants to re-select it immediately. + if (event.target) { + event.target.value = ""; + } + }; + + // Triggers the click event on the hidden file input when the button is clicked. + const handleButtonClick = () => { + fileInputRef.current?.click(); + }; + + // Clears the current file selection. + const handleClearClick = (event: React.MouseEvent) => { + event.stopPropagation(); // Prevent triggering the button click underneath + setSelectedFileName(null); + onFileSelect(null); // Notify parent + // Also clear the hidden input's value + if (fileInputRef.current) { + fileInputRef.current.value = ""; + } + }; + + return ( +
+ {/* Hidden actual file input */} + + {/* The visible button that acts as the file selector */} + + {/* Show clear button only when a file is selected */} + {selectedFileName && ( + + )} +
+ ); +}; + +export default FileUploader; diff --git a/ai/ai-react-app/src/components/Common/PromptInput.module.css b/ai/ai-react-app/src/components/Common/PromptInput.module.css new file mode 100644 index 000000000..2f44d1977 --- /dev/null +++ b/ai/ai-react-app/src/components/Common/PromptInput.module.css @@ -0,0 +1,150 @@ +.promptContainer { + background-color: transparent; + border-top: none; + display: flex; + flex-direction: column; + gap: 10px; + width: 100%; +} + +.suggestionsContainer { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +.suggestionButton { + background-color: var(--fb-gray-30); + color: var(--fb-gray-80); + border: 1px solid var(--fb-gray-40); + padding: 4px 10px; + border-radius: 16px; + cursor: pointer; + font-size: 0.8125rem; + transition: + background-color 0.15s ease, + border-color 0.15s ease, + color 0.15s ease; +} +.suggestionButton:hover:not(:disabled) { + background-color: var(--fb-gray-40); + border-color: var(--fb-gray-50); + color: var(--fb-gray-95); +} +.suggestionButton:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.inputArea { + display: flex; + align-items: flex-end; + background-color: var(--fb-gray-10); + border-radius: 4px; + border: 1px solid var(--fb-gray-40); + padding: 4px 4px 4px 12px; + transition: border-color 0.15s ease; + box-sizing: border-box; +} +.inputArea:focus-within { + border-color: var(--google-blue); +} + +.promptTextarea { + flex-grow: 1; + background-color: transparent; + border: none; + color: var(--fb-gray-90); + resize: none; + outline: none; + font-size: 0.875rem; + line-height: 1.5; + min-height: 36px; + max-height: 150px; + overflow-y: auto; + padding: 8px 0; + margin-right: 8px; +} +.promptTextarea::placeholder { + color: var(--fb-gray-60); +} + +.runButton { + background-color: var(--google-blue); + color: var(--fb-gray-100); + border: none; + padding: 0 16px; + border-radius: 4px; + cursor: pointer; + font-weight: 500; + transition: background-color 0.15s ease; + height: 36px; + line-height: 36px; + align-self: flex-end; + font-size: 0.875rem; + white-space: nowrap; + flex-shrink: 0; +} +.runButton:hover:not(:disabled) { + background-color: var(--google-blue-darker); +} +.runButton:disabled { + background-color: var(--fb-gray-30); + color: var(--fb-gray-50); + cursor: not-allowed; +} + +.tokenCountSection { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + margin-top: 4px; +} + +.countButton { + background-color: var(--fb-gray-30); + color: var(--fb-gray-80); + border: 1px solid var(--fb-gray-40); + padding: 4px 10px; + border-radius: 4px; + cursor: pointer; + font-size: 0.8125rem; + transition: + background-color 0.15s ease, + border-color 0.15s ease, + color 0.15s ease; + white-space: nowrap; + flex-shrink: 0; +} +.countButton:hover:not(:disabled) { + background-color: var(--fb-gray-40); + border-color: var(--fb-gray-50); + color: var(--fb-gray-95); +} +.countButton:disabled { + opacity: 0.5; + cursor: not-allowed; + background-color: var(--fb-gray-20); + border-color: var(--fb-gray-30); +} + +.tokenCountDisplay { + font-size: 0.8125rem; + color: var(--fb-gray-70); + flex-grow: 1; + text-align: right; + min-height: 1.2em; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.tokenError { + color: var(--fb-error-text); + font-style: italic; +} +.tokenPlaceholder { + color: var(--fb-gray-60); + font-style: italic; +} diff --git a/ai/ai-react-app/src/components/Common/PromptInput.tsx b/ai/ai-react-app/src/components/Common/PromptInput.tsx new file mode 100644 index 000000000..93bfc9d6a --- /dev/null +++ b/ai/ai-react-app/src/components/Common/PromptInput.tsx @@ -0,0 +1,190 @@ +import React, { useState, useCallback } from "react"; +import styles from "./PromptInput.module.css"; +import { + AI, + ModelParams, + CountTokensResponse, + Part, + getGenerativeModel, + ImagenModelParams, +} from "firebase/ai"; +import { fileToGenerativePart } from "../../utils/fileUtils"; +import { AppMode } from "../../App"; + +interface PromptInputProps { + prompt: string; + onPromptChange: (value: string) => void; + onSubmit: () => void; + /** isLoading refers to the main submit action loading state */ + isLoading: boolean; + placeholder?: string; + suggestions?: string[]; + onSuggestionClick?: (suggestion: string) => void; + activeMode: AppMode; + aiInstance: AI; + currentParams?: ModelParams; + currentImagenParams?: ImagenModelParams; + selectedFile: File | null; +} + +const PromptInput: React.FC = ({ + prompt, + onPromptChange, + onSubmit, + isLoading, + placeholder = "Type your prompt here...", + suggestions, + onSuggestionClick, + activeMode, + aiInstance, + currentParams, + selectedFile, +}) => { + const [tokenCount, setTokenCount] = useState( + null, + ); + const [isCountingTokens, setIsCountingTokens] = useState(false); + const [tokenCountError, setTokenCountError] = useState(null); + + const handleCountTokensClick = useCallback(async () => { + // Prevent counting if main action is loading or already counting + if (isLoading || isCountingTokens) return; + + setIsCountingTokens(true); + setTokenCount(null); + setTokenCountError(null); + + const currentPromptText = prompt.trim(); + const parts: Part[] = []; + + // Add text part if present + if (currentPromptText) { + parts.push({ text: currentPromptText }); + } + + // Add file part if present + if (selectedFile) { + try { + const filePart = await fileToGenerativePart(selectedFile); + parts.push(filePart); + } catch (err: unknown) { + console.error("Error processing file for token count:", err); + setTokenCountError(`Error processing file`); + setIsCountingTokens(false); + return; + } + } + + // Don't count if there's nothing to count + if (parts.length === 0) { + setTokenCountError("Nothing to count tokens for (no text or file)."); + setIsCountingTokens(false); + return; + } + + try { + if (!currentParams) { + throw Error( + "[PromptInput] currentParams is undefined when counting tokens", + ); + } + console.log("[PromptInput] Counting tokens with params:", currentParams); + const model = getGenerativeModel(aiInstance, currentParams); + + const request = { + contents: [{ role: "user" as const, parts }], + systemInstruction: currentParams.systemInstruction, + tools: currentParams.tools, + }; + console.log("[PromptInput] Calling countTokens with request:", request); + + const result = await model.countTokens(request); + setTokenCount(result); + console.log("[PromptInput] Token count result:", result); + } catch (err: unknown) { + console.error("Error counting tokens:", err); + setTokenCountError(`Token count failed`); + setTokenCount(null); // Clear previous count on error + } finally { + setIsCountingTokens(false); + } + }, [ + prompt, + selectedFile, + aiInstance, + currentParams, + isLoading, + isCountingTokens, + ]); + + return ( +
+ {/* Suggestions */} + {suggestions && suggestions.length > 0 && onSuggestionClick && ( +
+ {suggestions.map((suggestion, index) => ( + + ))} +
+ )} + + {/* Main Input Area */} +
+