diff --git a/.github/workflows/community_code.yml b/.github/workflows/community_code.yml new file mode 100644 index 0000000000..0abdff1460 --- /dev/null +++ b/.github/workflows/community_code.yml @@ -0,0 +1,80 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# CI for the unmaintained samples under samples/community. The folder is +# self-contained: its samples depend on the published @a2ui/* (npm) and +# a2ui-agent-sdk (PyPI) packages rather than on the monorepo workspace. + +name: Community Code CI + +on: + push: + branches: [main] + paths: + - "samples/community/**" + - ".github/workflows/community_code.yml" + pull_request: + paths: + - "samples/community/**" + - ".github/workflows/community_code.yml" + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + web: + runs-on: ubuntu-latest + defaults: + run: + working-directory: samples/community + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-node@v6 + with: + node-version: "22" + - run: corepack enable + - uses: actions/setup-node@v6 + with: + node-version: "22" + cache: "yarn" + cache-dependency-path: samples/community/yarn.lock + - name: Install dependencies + run: yarn install --immutable + - name: Build web samples (Angular a2a-chat-canvas + orchestrator, Lit mcp-apps + personalized_learning) + run: yarn build:web + + python: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: astral-sh/setup-uv@v8.2.0 + with: + enable-cache: true + - name: uv sync each agent under agent/adk + # These samples are runnable apps, not publishable packages (several use a + # flat module layout with no wheel target), so --no-install-project verifies + # that their dependencies resolve and install without building each as a wheel. + run: | + set -euo pipefail + find samples/community/agent/adk -name pyproject.toml -print0 | + while IFS= read -r -d '' manifest; do + dir="$(dirname "$manifest")" + echo "::group::uv sync $dir" + uv sync --no-install-project --project "$dir" + echo "::endgroup::" + done diff --git a/.github/workflows/python_ci.yml b/.github/workflows/python_ci.yml index e904da0630..540df47eb7 100644 --- a/.github/workflows/python_ci.yml +++ b/.github/workflows/python_ci.yml @@ -90,7 +90,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - sample: [orchestrator, restaurant_finder, rizzcharts/python] + sample: [restaurant_finder] steps: - uses: actions/checkout@v6 - uses: ./.github/actions/setup-python diff --git a/renderers/angular/package.json b/renderers/angular/package.json index 4f80d587f8..ab043c1d5a 100644 --- a/renderers/angular/package.json +++ b/renderers/angular/package.json @@ -124,7 +124,7 @@ ] }, "clean": { - "command": "rm -rf dist projects/mcp_calculator/dist projects/orchestrator/dist .tsbuildinfo .wireit" + "command": "rm -rf dist .tsbuildinfo .wireit" } } } diff --git a/samples/agent/adk/pyproject.toml b/samples/agent/adk/pyproject.toml index c62d5c8cf7..8bb05514fe 100644 --- a/samples/agent/adk/pyproject.toml +++ b/samples/agent/adk/pyproject.toml @@ -17,7 +17,7 @@ url = "https://pypi.org/simple" default = true [tool.uv.workspace] -members = ["custom-components-example", "orchestrator", "restaurant_finder", "rizzcharts/python", "mcp_app_proxy"] +members = ["custom-components-example", "restaurant_finder"] [tool.uv.sources] a2ui-agent-sdk = { path = "../../../agent_sdks/python/a2ui_agent", editable = true } diff --git a/samples/agent/adk/rizzcharts/kotlin/kotlin rizzcharts.iml b/samples/agent/adk/rizzcharts/kotlin/kotlin rizzcharts.iml deleted file mode 100644 index 8021953ed9..0000000000 --- a/samples/agent/adk/rizzcharts/kotlin/kotlin rizzcharts.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/samples/agent/adk/tests/test_examples_validation.py b/samples/agent/adk/tests/test_examples_validation.py index 1382415383..6427025e0a 100644 --- a/samples/agent/adk/tests/test_examples_validation.py +++ b/samples/agent/adk/tests/test_examples_validation.py @@ -57,23 +57,6 @@ "schema_modifiers": [remove_strict_validation], "validate": True, }, - { - "name": "rizzcharts", - "path": SAMPLES_DIR / "rizzcharts", - "catalogs": [ - CatalogConfig.from_path( - name="rizzcharts", - catalog_path="catalog_schemas/0.9/rizzcharts_catalog_definition.json", - examples_path="examples/rizzcharts_catalog/0.9", - ), - BasicCatalog.get_config( - version=VERSION_0_9, - examples_path="examples/standard_catalog/0.9", - ), - ], - "schema_modifiers": [remove_strict_validation], - "validate": True, - }, ] diff --git a/samples/agent/adk/uv.lock b/samples/agent/adk/uv.lock index 1670b703c1..bc6c5a7f04 100644 --- a/samples/agent/adk/uv.lock +++ b/samples/agent/adk/uv.lock @@ -10,9 +10,6 @@ resolution-markers = [ members = [ "a2ui-custom-components-example", "a2ui-restaurant-finder", - "mcp-app-proxy", - "orchestrator", - "rizzcharts", ] [manifest.dependency-groups] @@ -1070,41 +1067,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fd/d9/eaa1f80170d2b7c5ba23f3b59f766f3a0bb41155fbc32a69adfa1adaaef9/mcp-1.26.0-py3-none-any.whl", hash = "sha256:904a21c33c25aa98ddbeb47273033c435e595bbacfdb177f4bd87f6dceebe1ca", size = 233615, upload-time = "2026-01-24T19:40:30.652Z" }, ] -[[package]] -name = "mcp-app-proxy" -version = "0.1.0" -source = { editable = "mcp_app_proxy" } -dependencies = [ - { name = "a2a-sdk" }, - { name = "a2ui-agent-sdk" }, - { name = "anyio" }, - { name = "click" }, - { name = "google-adk" }, - { name = "google-genai" }, - { name = "jsonschema" }, - { name = "litellm" }, - { name = "mcp" }, - { name = "python-dotenv" }, - { name = "starlette" }, - { name = "uvicorn" }, -] - -[package.metadata] -requires-dist = [ - { name = "a2a-sdk", specifier = ">=0.3.0" }, - { name = "a2ui-agent-sdk", editable = "../../../agent_sdks/python/a2ui_agent" }, - { name = "anyio" }, - { name = "click", specifier = ">=8.1.8" }, - { name = "google-adk", specifier = ">=1.28.1" }, - { name = "google-genai", specifier = ">=1.27.0" }, - { name = "jsonschema", specifier = ">=4.0.0" }, - { name = "litellm" }, - { name = "mcp" }, - { name = "python-dotenv", specifier = ">=1.1.0" }, - { name = "starlette" }, - { name = "uvicorn" }, -] - [[package]] name = "mdurl" version = "0.1.2" @@ -1263,33 +1225,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/07/90/68152b7465f50285d3ce2481b3aec2f82822e3f52e5152eeeaf516bab841/opentelemetry_semantic_conventions-0.58b0-py3-none-any.whl", hash = "sha256:5564905ab1458b96684db1340232729fce3b5375a06e140e8904c78e4f815b28", size = 207954, upload-time = "2025-09-11T10:28:59.218Z" }, ] -[[package]] -name = "orchestrator" -version = "0.1.0" -source = { editable = "orchestrator" } -dependencies = [ - { name = "a2a-sdk" }, - { name = "a2ui-agent-sdk" }, - { name = "click" }, - { name = "google-adk" }, - { name = "google-genai" }, - { name = "jsonschema" }, - { name = "litellm" }, - { name = "python-dotenv" }, -] - -[package.metadata] -requires-dist = [ - { name = "a2a-sdk", specifier = ">=0.3.0" }, - { name = "a2ui-agent-sdk", editable = "../../../agent_sdks/python/a2ui_agent" }, - { name = "click", specifier = ">=8.1.8" }, - { name = "google-adk", specifier = ">=1.28.1" }, - { name = "google-genai", specifier = ">=1.27.0" }, - { name = "jsonschema", specifier = ">=4.0.0" }, - { name = "litellm" }, - { name = "python-dotenv", specifier = ">=1.1.0" }, -] - [[package]] name = "packaging" version = "26.0" @@ -1807,33 +1742,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ef/45/615f5babd880b4bd7d405cc0dc348234c5ffb6ed1ea33e152ede08b2072d/rich-14.3.2-py3-none-any.whl", hash = "sha256:08e67c3e90884651da3239ea668222d19bea7b589149d8014a21c633420dbb69", size = 309963, upload-time = "2026-02-01T16:20:46.078Z" }, ] -[[package]] -name = "rizzcharts" -version = "0.1.0" -source = { editable = "rizzcharts/python" } -dependencies = [ - { name = "a2a-sdk" }, - { name = "a2ui-agent-sdk" }, - { name = "click" }, - { name = "google-adk" }, - { name = "google-genai" }, - { name = "jsonschema" }, - { name = "litellm" }, - { name = "python-dotenv" }, -] - -[package.metadata] -requires-dist = [ - { name = "a2a-sdk", specifier = ">=0.3.0" }, - { name = "a2ui-agent-sdk", editable = "../../../agent_sdks/python/a2ui_agent" }, - { name = "click", specifier = ">=8.1.8" }, - { name = "google-adk", specifier = ">=1.28.1" }, - { name = "google-genai", specifier = ">=1.27.0" }, - { name = "jsonschema", specifier = ">=4.0.0" }, - { name = "litellm" }, - { name = "python-dotenv", specifier = ">=1.1.0" }, -] - [[package]] name = "rpds-py" version = "0.30.0" diff --git a/samples/client/angular/angular.json b/samples/client/angular/angular.json index f92d24cb22..cfa312ef2b 100644 --- a/samples/client/angular/angular.json +++ b/samples/client/angular/angular.json @@ -103,414 +103,6 @@ } } } - }, - "rizzcharts": { - "projectType": "application", - "schematics": {}, - "root": "projects/rizzcharts", - "sourceRoot": "projects/rizzcharts/src", - "prefix": "app", - "architect": { - "build": { - "builder": "@angular/build:application", - "options": { - "outputPath": "projects/rizzcharts/dist", - "browser": "projects/rizzcharts/src/main.ts", - "tsConfig": "projects/rizzcharts/tsconfig.app.json", - "preserveSymlinks": true, - "assets": [ - { - "glob": "**/*", - "input": "projects/rizzcharts/public" - } - ], - "styles": ["projects/rizzcharts/src/styles.scss"], - "server": "projects/rizzcharts/src/main.server.ts", - "outputMode": "server", - "ssr": { - "entry": "projects/rizzcharts/src/server.ts" - } - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "1.5MB", - "maximumError": "2.5MB" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "4kB", - "maximumError": "8kB" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "builder": "@angular/build:dev-server", - "configurations": { - "production": { - "buildTarget": "rizzcharts:build:production" - }, - "development": { - "buildTarget": "rizzcharts:build:development" - } - }, - "defaultConfiguration": "development" - }, - "extract-i18n": { - "builder": "@angular/build:extract-i18n" - }, - "test": { - "builder": "@angular/build:karma", - "options": { - "tsConfig": "projects/rizzcharts/tsconfig.spec.json", - "assets": [ - { - "glob": "**/*", - "input": "projects/rizzcharts/public" - } - ], - "styles": ["projects/rizzcharts/src/styles.scss"] - } - } - } - }, - - "gallery": { - "projectType": "application", - "schematics": {}, - "root": "projects/gallery", - "sourceRoot": "projects/gallery/src", - "prefix": "app", - "architect": { - "build": { - "builder": "@angular/build:application", - "options": { - "outputPath": "projects/gallery/dist", - "browser": "projects/gallery/src/main.ts", - "tsConfig": "projects/gallery/tsconfig.app.json", - "preserveSymlinks": true, - "assets": [ - { - "glob": "**/*", - "input": "projects/gallery/public" - } - ], - "styles": ["projects/gallery/src/styles.css"] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "1.5MB", - "maximumError": "2.5MB" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "4kB", - "maximumError": "8kB" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "builder": "@angular/build:dev-server", - "configurations": { - "production": { - "buildTarget": "gallery:build:production" - }, - "development": { - "buildTarget": "gallery:build:development" - } - }, - "defaultConfiguration": "development" - }, - "extract-i18n": { - "builder": "@angular/build:extract-i18n" - }, - "test": { - "builder": "@angular/build:karma", - "options": { - "tsConfig": "projects/gallery/tsconfig.spec.json", - "assets": [ - { - "glob": "**/*", - "input": "projects/gallery/public" - } - ], - "styles": ["projects/gallery/src/styles.css"] - } - } - } - }, - "a2a-chat-canvas": { - "projectType": "library", - "root": "projects/a2a-chat-canvas", - "sourceRoot": "projects/a2a-chat-canvas/src", - "prefix": "lib", - "architect": { - "build": { - "builder": "@angular/build:ng-packagr", - "configurations": { - "production": { - "tsConfig": "projects/a2a-chat-canvas/tsconfig.lib.prod.json" - }, - "development": { - "tsConfig": "projects/a2a-chat-canvas/tsconfig.lib.json" - } - }, - "defaultConfiguration": "production" - }, - "test": { - "builder": "@angular/build:karma", - "options": { - "polyfills": ["zone.js", "zone.js/testing"], - "tsConfig": "projects/a2a-chat-canvas/tsconfig.spec.json", - "assets": [ - { - "glob": "**/*", - "input": "projects/a2a-chat-canvas/public" - } - ] - } - } - } - }, - "orchestrator": { - "projectType": "application", - "schematics": { - "@schematics/angular:component": { - "style": "scss", - "skipTests": true - }, - "@schematics/angular:class": { - "skipTests": true - }, - "@schematics/angular:directive": { - "skipTests": true - }, - "@schematics/angular:guard": { - "skipTests": true - }, - "@schematics/angular:interceptor": { - "skipTests": true - }, - "@schematics/angular:pipe": { - "skipTests": true - }, - "@schematics/angular:resolver": { - "skipTests": true - }, - "@schematics/angular:service": { - "skipTests": true - } - }, - "root": "projects/orchestrator", - "sourceRoot": "projects/orchestrator/src", - "prefix": "app", - "architect": { - "build": { - "builder": "@angular/build:application", - "options": { - "outputPath": "projects/orchestrator/dist", - "browser": "projects/orchestrator/src/main.ts", - "tsConfig": "projects/orchestrator/tsconfig.app.json", - "preserveSymlinks": true, - "inlineStyleLanguage": "scss", - "assets": [ - { - "glob": "**/*", - "input": "projects/orchestrator/public" - } - ], - "styles": ["projects/orchestrator/src/styles.scss"], - "server": "projects/orchestrator/src/main.server.ts", - "outputMode": "server", - "ssr": { - "entry": "projects/orchestrator/src/server.ts" - } - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "1.5MB", - "maximumError": "2.5MB" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "4kB", - "maximumError": "8kB" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "builder": "@angular/build:dev-server", - "configurations": { - "production": { - "buildTarget": "orchestrator:build:production" - }, - "development": { - "buildTarget": "orchestrator:build:development" - } - }, - "defaultConfiguration": "development" - }, - "extract-i18n": { - "builder": "@angular/build:extract-i18n" - }, - "test": { - "builder": "@angular/build:karma", - "options": { - "codeCoverage": false, - "tsConfig": "projects/orchestrator/tsconfig.spec.json", - "inlineStyleLanguage": "scss", - "assets": [ - { - "glob": "**/*", - "input": "projects/orchestrator/public" - } - ], - "styles": ["projects/orchestrator/src/styles.scss"] - } - } - } - }, - "mcp_calculator": { - "projectType": "application", - "schematics": { - "@schematics/angular:component": { - "style": "scss", - "skipTests": true - }, - "@schematics/angular:class": { - "skipTests": true - }, - "@schematics/angular:directive": { - "skipTests": true - }, - "@schematics/angular:guard": { - "skipTests": true - }, - "@schematics/angular:interceptor": { - "skipTests": true - }, - "@schematics/angular:pipe": { - "skipTests": true - }, - "@schematics/angular:resolver": { - "skipTests": true - }, - "@schematics/angular:service": { - "skipTests": true - } - }, - "root": "projects/mcp_calculator", - "sourceRoot": "projects/mcp_calculator/src", - "prefix": "app", - "architect": { - "build": { - "builder": "@angular/build:application", - "options": { - "outputPath": "projects/mcp_calculator/dist", - "browser": "projects/mcp_calculator/src/main.ts", - "tsConfig": "projects/mcp_calculator/tsconfig.app.json", - "preserveSymlinks": true, - "inlineStyleLanguage": "scss", - "assets": [ - { - "glob": "**/*", - "input": "projects/mcp_calculator/public" - } - ], - "styles": ["projects/mcp_calculator/src/styles.scss"], - "server": "projects/mcp_calculator/src/main.server.ts", - "outputMode": "server", - "ssr": { - "entry": "projects/mcp_calculator/src/server.ts" - } - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "1.5MB", - "maximumError": "2.5MB" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "4kB", - "maximumError": "8kB" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "builder": "@angular/build:dev-server", - "configurations": { - "production": { - "buildTarget": "mcp_calculator:build:production" - }, - "development": { - "buildTarget": "mcp_calculator:build:development" - } - }, - "defaultConfiguration": "development" - }, - "test": { - "builder": "@angular/build:karma", - "options": { - "codeCoverage": false, - "tsConfig": "projects/mcp_calculator/tsconfig.spec.json", - "inlineStyleLanguage": "scss", - "assets": [ - { - "glob": "**/*", - "input": "projects/mcp_calculator/public" - } - ], - "styles": ["projects/mcp_calculator/src/styles.scss"] - } - } - } } }, "cli": { diff --git a/samples/client/angular/package.json b/samples/client/angular/package.json index 0fd5b58e2c..c5a20aba7d 100644 --- a/samples/client/angular/package.json +++ b/samples/client/angular/package.json @@ -9,14 +9,12 @@ "test": "wireit", "serve:ssr:angular": "node dist/angular/server/server.mjs", "serve:ssr:restaurant": "node dist/restaurant/server/server.mjs", - "serve:ssr:rizzcharts": "node dist/rizzcharts/server/server.mjs", "lint": "eslint .", "lint:fix": "eslint . --fix", "clean": "wireit", "build:renderer": "yarn workspace @a2ui/web_core build && yarn workspace @a2ui/markdown-it build && yarn workspace @a2ui/angular build", "serve:agent:restaurant": "cd ../../agent/adk/restaurant_finder && uv run .", "demo:restaurant": "yarn build:renderer && concurrently -k -n \"AGENT,WEB\" -c \"magenta,blue\" \"yarn serve:agent:restaurant\" \"yarn start -- restaurant\"", - "build:sandbox": "esbuild ../shared/mcp_apps_inner_iframe/sandbox.ts --bundle --outfile=projects/mcp_calculator/public/mcp_apps_inner_iframe/sandbox.js --format=esm --platform=browser --alias:@modelcontextprotocol/ext-apps/app-bridge=./node_modules/@modelcontextprotocol/ext-apps/dist/src/app-bridge.js && cp ../shared/mcp_apps_inner_iframe/sandbox.html projects/mcp_calculator/public/mcp_apps_inner_iframe/sandbox.html", "format": "prettier --write .", "format:check": "prettier --check ." }, @@ -82,7 +80,7 @@ }, "wireit": { "build": { - "command": "ng build restaurant && ng build rizzcharts && ng build orchestrator", + "command": "ng build restaurant", "dependencies": [ "../../../renderers/angular:build" ] diff --git a/samples/client/angular/projects/gallery/package.json b/samples/client/angular/projects/gallery/package.json deleted file mode 100644 index 105d64d573..0000000000 --- a/samples/client/angular/projects/gallery/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "@a2ui/gallery", - "version": "0.1.0", - "private": true, - "scripts": { - "build": "wireit", - "format": "prettier --write .", - "format:check": "prettier --check .", - "lint": "yarn --cwd ../.. lint", - "test": "yarn --cwd ../.. test", - "lint:fix": "yarn --cwd ../.. lint:fix" - }, - "dependencies": { - "@a2ui/angular": "workspace:*", - "@a2ui/web_core": "workspace:*" - }, - "devDependencies": { - "wireit": "^0.15.0-pre.2" - }, - "wireit": { - "build": { - "command": "yarn workspace angular-a2ui ng build gallery", - "dependencies": [ - "../../../../../renderers/angular:build" - ], - "files": [ - "src/**/*", - "tsconfig.app.json" - ], - "output": [ - "dist" - ] - } - } -} diff --git a/samples/client/angular/projects/gallery/src/app/app.config.ts b/samples/client/angular/projects/gallery/src/app/app.config.ts deleted file mode 100644 index 732ddd69a5..0000000000 --- a/samples/client/angular/projects/gallery/src/app/app.config.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {DEFAULT_CATALOG, provideA2UI} from '@a2ui/angular'; -import {IMAGE_CONFIG} from '@angular/common'; -import { - ApplicationConfig, - provideBrowserGlobalErrorListeners, - provideZonelessChangeDetection, -} from '@angular/core'; -import {provideClientHydration, withEventReplay} from '@angular/platform-browser'; -import {theme} from './theme'; - -export const appConfig: ApplicationConfig = { - providers: [ - provideBrowserGlobalErrorListeners(), - provideZonelessChangeDetection(), - provideClientHydration(withEventReplay()), - provideA2UI({ - catalog: DEFAULT_CATALOG, - theme: theme, - }), - { - provide: IMAGE_CONFIG, - useValue: { - disableImageSizeWarning: true, - disableImageLazyLoadWarning: true, - }, - }, - ], -}; diff --git a/samples/client/angular/projects/gallery/src/app/app.css b/samples/client/angular/projects/gallery/src/app/app.css deleted file mode 100644 index 3405a84bc1..0000000000 --- a/samples/client/angular/projects/gallery/src/app/app.css +++ /dev/null @@ -1,56 +0,0 @@ -/* - Copyright 2025 Google LLC - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -.home-page-header { - display: flex; - justify-content: space-between; - align-items: center; - padding: 16px; -} - -.app-nav ul { - list-style: none; - padding: 0; - margin: 0; - display: flex; - gap: 16px; /* Space between items */ -} - -.app-nav li { - padding: 8px 12px; - cursor: pointer; - border-radius: 4px; - transition: background-color 0.3s ease; -} - -.app-nav li:hover { - background-color: #eee; -} -.app-nav li a { - text-decoration: none; - color: inherit; -} -.hero-message { - font-weight: bold; - text-align: center; -} -.hero-message h1 { - font-size: 3rem; -} -.hero-message p { - font-size: 1.5rem; - font-weight: lighter; -} diff --git a/samples/client/angular/projects/gallery/src/app/app.html b/samples/client/angular/projects/gallery/src/app/app.html deleted file mode 100644 index 5a1852dc1e..0000000000 --- a/samples/client/angular/projects/gallery/src/app/app.html +++ /dev/null @@ -1,39 +0,0 @@ - - -
-

A2UI Gallery

- -
-
-
-

A2UI Component Gallery

-

Building blocks and examples for Agent Driven UIs

-
-
- @if (currentView() === 'gallery') { - - } @else { - - } -
-
diff --git a/samples/client/angular/projects/gallery/src/app/app.ts b/samples/client/angular/projects/gallery/src/app/app.ts deleted file mode 100644 index 5ac1df930a..0000000000 --- a/samples/client/angular/projects/gallery/src/app/app.ts +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {ChangeDetectionStrategy, Component, signal} from '@angular/core'; -import {LibraryComponent} from './features/library/library.component'; -import {GalleryComponent} from './features/gallery/gallery.component'; - -@Component({ - selector: 'app-root', - templateUrl: './app.html', - styleUrl: './app.css', - imports: [LibraryComponent, GalleryComponent], - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class App { - readonly currentView = signal<'library' | 'gallery'>('library'); - - setView(view: 'library' | 'gallery') { - this.currentView.set(view); - } -} diff --git a/samples/client/angular/projects/gallery/src/app/features/gallery/gallery.component.ts b/samples/client/angular/projects/gallery/src/app/features/gallery/gallery.component.ts deleted file mode 100644 index 131eb13c1d..0000000000 --- a/samples/client/angular/projects/gallery/src/app/features/gallery/gallery.component.ts +++ /dev/null @@ -1,247 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {ChangeDetectionStrategy, Component, ElementRef, ViewChild} from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {Surface} from '@a2ui/angular'; -import * as Types from '@a2ui/web_core/types/types'; - -interface GallerySample { - id: string; - title: string; - description: string; - surface: Types.Surface; -} - -@Component({ - selector: 'app-gallery', - imports: [CommonModule, Surface], - templateUrl: './gallery.html', - styleUrl: './gallery.css', - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class GalleryComponent { - @ViewChild('dialog') dialog!: ElementRef; - selectedSample: GallerySample | null = null; - activeSection = 'welcome'; - showJsonId: string | null = null; - - samples: GallerySample[] = [ - { - id: 'photo-list', - title: 'List of items', - description: 'List of items with images', - surface: this.createSingleComponentSurface('Card', { - child: this.createComponent('Column', { - children: [ - this.createComponent('Row', { - children: [ - this.createComponent('Image', { - url: {literalString: 'https://picsum.photos/id/11/300/300'}, - }), - this.createComponent('Column', { - children: [ - this.createComponent('Text', { - text: { - literalString: 'A misty, serene natural landscape.', - }, - }), - ], - }), - ], - }), - this.createComponent('Row', { - children: [ - this.createComponent('Image', { - url: {literalString: 'https://picsum.photos/id/12/300/300'}, - }), - this.createComponent('Column', { - children: [ - this.createComponent('Text', { - text: { - literalString: - 'A river flows through marsh toward hazy, forested mountains.', - }, - }), - ], - }), - ], - }), - this.createComponent('Row', { - children: [ - this.createComponent('Image', { - url: {literalString: 'https://picsum.photos/id/13/300/300'}, - }), - this.createComponent('Text', { - text: { - literalString: - 'Large dark rocks overlook sandy beach and ocean with distant islands.', - }, - }), - ], - }), - ], - }), - }), - }, - { - id: 'welcome', - title: 'Welcome Card', - description: 'A simple welcome card with an image and text.', - surface: this.createSingleComponentSurface('Card', { - child: this.createComponent('Column', { - children: [ - this.createComponent('Image', { - url: {literalString: 'https://picsum.photos/id/10/600/300'}, - }), - this.createComponent('Text', { - text: { - literalString: - 'Explore the possibilities of A2UI components with this interactive gallery.', - }, - }), - this.createComponent('Button', { - action: {type: 'submit'}, - child: this.createComponent('Text', {text: {literalString: 'Get Started'}}), - }), - ], - alignment: 'center', - }), - }), - }, - { - id: 'form', - title: 'Contact Form', - description: 'A sample contact form with validation.', - surface: this.createSingleComponentSurface('Card', { - child: this.createComponent('Column', { - children: [ - this.createComponent('Row', { - children: [ - this.createComponent('TextField', { - label: {literalString: 'Name'}, - type: 'text', - text: {literalString: ''}, - }), - ], - }), - this.createComponent('Row', { - children: [ - this.createComponent('TextField', { - label: {literalString: 'Email Address'}, - type: 'email', - text: {literalString: ''}, - }), - ], - }), - this.createComponent('Row', { - children: [ - this.createComponent('TextField', { - label: {literalString: 'Message'}, - text: {literalString: ''}, - }), - ], - }), - this.createComponent('Button', { - action: {type: 'submit'}, - child: this.createComponent('Text', {text: {literalString: 'Send Message'}}), - }), - ], - }), - }), - }, - ]; - - openDialog(sample: GallerySample) { - this.selectedSample = sample; - this.dialog.nativeElement.showModal(); - } - - closeDialog() { - this.dialog.nativeElement.close(); - } - - scrollTo(id: string) { - this.activeSection = id; - const element = document.getElementById('section-' + id); - if (element) { - element.scrollIntoView({behavior: 'smooth', block: 'start'}); - } - } - - onScroll(event: Event) { - const container = event.target as HTMLElement; - const sections = container.querySelectorAll('.component-section'); - - let current = ''; - const containerTop = container.scrollTop; - - for (let i = 0; i < sections.length; i++) { - const section = sections[i] as HTMLElement; - const sectionTop = section.offsetTop - container.offsetTop; - - if (sectionTop <= containerTop + 100) { - const id = section.getAttribute('id'); - if (id) { - current = id.replace('section-', ''); - } - } - } - - if (current && current !== this.activeSection) { - this.activeSection = current; - } - } - - toggleJson(id: string) { - this.showJsonId = this.showJsonId === id ? null : id; - } - - getJson(surface: Types.Surface): string { - return JSON.stringify( - surface, - (key, value) => { - if (key === 'rootComponentId' || key === 'dataModel' || key === 'styles') return undefined; - if (value instanceof Map) return Object.fromEntries(value.entries()); - return value; - }, - 2, - ); - } - - private createSingleComponentSurface(type: string, properties: any): Types.Surface { - const rootId = 'root'; - return { - rootComponentId: rootId, - dataModel: new Map(), - styles: {}, - componentTree: { - id: rootId, - type: type, - properties: properties, - } as any, - components: new Map(), - }; - } - - private createComponent(type: string, properties: any): any { - return { - id: 'generated-' + Math.random().toString(36).substr(2, 9), - type: type, - properties: properties, - }; - } -} diff --git a/samples/client/angular/projects/gallery/src/app/features/gallery/gallery.css b/samples/client/angular/projects/gallery/src/app/features/gallery/gallery.css deleted file mode 100644 index 003307e83f..0000000000 --- a/samples/client/angular/projects/gallery/src/app/features/gallery/gallery.css +++ /dev/null @@ -1,117 +0,0 @@ -/* - Copyright 2025 Google LLC - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -dialog { - min-width: 800px; - min-height: 600px; - padding: 1rem; - border-radius: 8px; - border: none; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); - opacity: 0; - transform: translateY(-20px) scale(0.95); - transition: - opacity 0.2s ease-out, - transform 0.2s ease-out; - display: flex; - flex-direction: column; -} - -dialog[open] { - opacity: 1; - transform: translateY(0) scale(1); - animation: slide-in 0.2s ease-out forwards; -} - -dialog::backdrop { - opacity: 0; - background-color: rgba(0, 0, 0, 0.5); - transition: opacity 0.2s ease-out; -} - -dialog[open]::backdrop { - opacity: 1; - animation: fade-in 0.2s ease-out forwards; -} - -dialog article { - flex-grow: 1; - display: flex; - flex-direction: column; -} - -.sample-widget { - border: solid 1px; - border-radius: 4px; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); - break-inside: avoid; - margin-bottom: 1rem; - border: 1px solid #ccc; - border-radius: 8px; - padding: 1rem; - background: white; -} - -.section-header { - display: flex; - justify-content: space-between; - align-items: center; -} - -.section-title { - font-weight: bold; - font-size: 1.3rem; - margin-top: 2px; -} - -.widget-gallery { - display: flex; - justify-content: space-around; - flex-wrap: wrap; - margin: 0 2em; -} - -dialog .dialog-content-grid { - flex-grow: 1; - display: grid; - grid-template-columns: 1fr 1fr; - gap: 1.5rem; - height: 100%; - align-items: stretch; -} - -dialog .dialog-content-grid > .sample-surface { - margin-right: 10px; - height: 100%; -} - -.json-pane { - height: 100%; - display: flex; - flex-direction: column; -} - -.json-pane pre { - background-color: #272822; - color: #f8f8f2; - padding: 1em; - border-radius: 4px; - flex-grow: 1; - overflow: auto; - height: 100%; - white-space: pre-wrap; - word-break: break-word; -} diff --git a/samples/client/angular/projects/gallery/src/app/features/gallery/gallery.html b/samples/client/angular/projects/gallery/src/app/features/gallery/gallery.html deleted file mode 100644 index a0bbbbfdc5..0000000000 --- a/samples/client/angular/projects/gallery/src/app/features/gallery/gallery.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - -
- @if (selectedSample) { -
-

{{ selectedSample.title }}

- -
-
-
- -
-
-
{{ getJson(selectedSample.surface) }}
-
-
- } @else { -

Please select a component from the gallery

- } -
-
diff --git a/samples/client/angular/projects/gallery/src/app/features/library/library.component.ts b/samples/client/angular/projects/gallery/src/app/features/library/library.component.ts deleted file mode 100644 index d25919b854..0000000000 --- a/samples/client/angular/projects/gallery/src/app/features/library/library.component.ts +++ /dev/null @@ -1,584 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {ChangeDetectionStrategy, Component, ElementRef, ViewChild} from '@angular/core'; -import {Surface} from '@a2ui/angular'; -import * as Types from '@a2ui/web_core/types/types'; - -@Component({ - selector: 'app-library', - imports: [Surface], - templateUrl: './library.html', - styleUrl: './library.css', - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class LibraryComponent { - @ViewChild('dialog') dialog!: ElementRef; - selectedBlock: {name: string; surface: Types.Surface} | null = null; - activeSection = ''; - showJsonId: string | null = null; - - openDialog(block: {name: string; surface: Types.Surface}) { - this.selectedBlock = block; - this.dialog.nativeElement.showModal(); - } - - closeDialog() { - this.dialog.nativeElement.close(); - } - - scrollTo(name: string) { - this.activeSection = name; - const element = document.getElementById('section-' + name); - if (element) { - element.scrollIntoView({behavior: 'smooth', block: 'start'}); - } - } - - onScroll(event: Event) { - const container = event.target as HTMLElement; - const sections = container.querySelectorAll('.component-section'); - - let current = ''; - const containerTop = container.scrollTop; - - // Find the section that is closest to the top of the container - // We add a small offset (e.g. 100px) so it activates slightly before reaching the very top - for (let i = 0; i < sections.length; i++) { - const section = sections[i] as HTMLElement; - const sectionTop = section.offsetTop - container.offsetTop; - - if (sectionTop <= containerTop + 100) { - // This section is above or near the top, so it's a candidate - // Since we iterate in order, the last one matching this condition is the current one - const id = section.getAttribute('id'); - if (id) { - current = id.replace('section-', ''); - } - } - } - - if (current && current !== this.activeSection) { - this.activeSection = current; - } - } - - toggleJson(name: string) { - this.showJsonId = this.showJsonId === name ? null : name; - } - - getJson(surface: Types.Surface): string { - return JSON.stringify( - surface, - (key, value) => { - if (key === 'rootComponentId' || key === 'dataModel' || key === 'styles') return undefined; - if (value instanceof Map) return Object.fromEntries(value.entries()); - return value; - }, - 2, - ); - } - - blocks = [ - { - name: 'Card', - tag: 'Layout', - surface: this.createSingleComponentSurface('Card', { - child: this.createComponent('Text', {text: {literalString: 'Content inside a card'}}), - }), - }, - { - name: 'Column', - tag: 'Layout', - surface: this.createSingleComponentSurface('Column', { - children: [ - this.createComponent('Text', {text: {literalString: 'Item 1'}}), - this.createComponent('Text', {text: {literalString: 'Item 2'}}), - this.createComponent('Text', {text: {literalString: 'Item 3'}}), - ], - alignment: 'center', - distribution: 'space-around', - }), - }, - { - name: 'Divider', - tag: 'Layout', - surface: this.createSingleComponentSurface('Column', { - children: [ - this.createComponent('Text', {text: {literalString: 'Above Divider'}}), - this.createComponent('Divider', {}), - this.createComponent('Text', {text: {literalString: 'Below Divider'}}), - ], - }), - }, - { - name: 'List', - tag: 'Layout', - surface: this.createSingleComponentSurface('List', { - children: [ - this.createComponent('Text', {text: {literalString: 'List Item 1'}}), - this.createComponent('Text', {text: {literalString: 'List Item 2'}}), - this.createComponent('Text', {text: {literalString: 'List Item 3'}}), - ], - direction: 'vertical', - }), - }, - { - name: 'Modal', - tag: 'Layout', - surface: this.createSingleComponentSurface('Modal', { - entryPointChild: this.createComponent('Button', { - action: {type: 'none'}, - child: this.createComponent('Text', {text: {literalString: 'Open Modal'}}), - }), - contentChild: this.createComponent('Card', { - child: this.createComponent('Text', { - text: {literalString: 'This is the modal content.'}, - }), - }), - }), - }, - { - name: 'Row', - tag: 'Layout', - surface: this.createSingleComponentSurface('Row', { - children: [ - this.createComponent('Text', {text: {literalString: 'Left'}}), - this.createComponent('Text', {text: {literalString: 'Center'}}), - this.createComponent('Text', {text: {literalString: 'Right'}}), - ], - alignment: 'center', - distribution: 'space-between', - }), - }, - { - name: 'Tabs', - tag: 'Layout', - surface: this.createSingleComponentSurface('Tabs', { - tabItems: [ - { - title: {literalString: 'Tab 1'}, - child: this.createComponent('Text', {text: {literalString: 'Content for Tab 1'}}), - }, - { - title: {literalString: 'Tab 2'}, - child: this.createComponent('Text', {text: {literalString: 'Content for Tab 2'}}), - }, - ], - }), - }, - { - name: 'Text', - tag: 'Layout', - surface: this.createSingleComponentSurface('Column', { - children: [ - this.createComponent('Heading', {text: {literalString: 'Heading Text'}}), - this.createComponent('Text', {text: {literalString: 'Standard body text.'}}), - this.createComponent('Text', { - text: {literalString: 'Caption text'}, - usageHint: 'caption', - }), - ], - }), - }, - - { - name: 'AudioPlayer', - tag: 'Media', - surface: this.createSingleComponentSurface('AudioPlayer', { - url: {literalString: 'https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3'}, - }), - }, - { - name: 'Icon', - tag: 'Media', - surface: this.createSingleComponentSurface('Row', { - children: [ - this.createComponent('Icon', {name: {literalString: 'home'}}), - this.createComponent('Icon', {name: {literalString: 'favorite'}}), - this.createComponent('Icon', {name: {literalString: 'settings'}}), - ], - distribution: 'space-around', - }), - }, - { - name: 'Image', - tag: 'Media', - surface: this.createSingleComponentSurface('Image', { - url: {literalString: 'https://picsum.photos/id/10/300/200'}, - }), - }, - { - name: 'Video', - tag: 'Media', - surface: this.createSingleComponentSurface('Video', { - url: { - literalString: - 'http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4', - }, - }), - }, - { - name: 'Button', - tag: 'Inputs', - surface: this.createSingleComponentSurface('Row', { - children: [ - this.createComponent('Button', { - label: {literalString: 'Primary'}, - action: {type: 'click'}, - child: this.createComponent('Text', {text: {literalString: 'Primary'}}), - }), - this.createComponent('Button', { - label: {literalString: 'Secondary'}, - action: {type: 'click'}, - child: this.createComponent('Text', {text: {literalString: 'Secondary'}}), - }), - ], - distribution: 'space-around', - }), - }, - { - name: 'CheckBox', - tag: 'Inputs', - surface: this.createSingleComponentSurface('Column', { - children: [ - this.createComponent('CheckBox', { - label: {literalString: 'Unchecked'}, - value: {literalBoolean: false}, - }), - this.createComponent('CheckBox', { - label: {literalString: 'Checked'}, - value: {literalBoolean: true}, - }), - ], - }), - }, - { - name: 'DateTimeInput', - tag: 'Inputs', - surface: this.createSingleComponentSurface('Column', { - children: [ - this.createComponent('DateTimeInput', { - enableDate: true, - enableTime: false, - value: {literalString: '2025-12-09'}, - }), - this.createComponent('DateTimeInput', { - enableDate: true, - enableTime: true, - value: {literalString: '2025-12-09T12:00:00'}, - }), - ], - }), - }, - { - name: 'MultipleChoice', - tag: 'Inputs', - surface: this.createSingleComponentSurface('MultipleChoice', { - options: [ - {value: 'opt1', label: {literalString: 'Option 1'}}, - {value: 'opt2', label: {literalString: 'Option 2'}}, - {value: 'opt3', label: {literalString: 'Option 3'}}, - ], - selections: {literalString: 'opt1'}, - }), - }, - { - name: 'Slider', - tag: 'Inputs', - surface: this.createSingleComponentSurface('Slider', { - value: {literalNumber: 50}, - minValue: 0, - maxValue: 100, - }), - }, - { - name: 'TextField', - tag: 'Inputs', - surface: this.createSingleComponentSurface('Column', { - children: [ - this.createComponent('TextField', { - label: {literalString: 'Standard Input'}, - text: {literalString: 'Some text'}, - }), - this.createComponent('TextField', { - label: {literalString: 'Password'}, - type: 'password', - text: {literalString: ''}, - }), - ], - }), - }, - ]; - - categories = [ - { - name: 'Layout', - samples: [ - { - name: 'Card', - surface: this.createSingleComponentSurface('Card', { - child: this.createComponent('Text', { - text: {literalString: 'Content inside a card'}, - }), - }), - }, - { - name: 'Column', - surface: this.createSingleComponentSurface('Column', { - children: [ - this.createComponent('Text', {text: {literalString: 'Item 1'}}), - this.createComponent('Text', {text: {literalString: 'Item 2'}}), - this.createComponent('Text', {text: {literalString: 'Item 3'}}), - ], - alignment: 'center', - distribution: 'space-around', - }), - }, - { - name: 'Divider', - surface: this.createSingleComponentSurface('Column', { - children: [ - this.createComponent('Text', {text: {literalString: 'Above Divider'}}), - this.createComponent('Divider', {}), - this.createComponent('Text', {text: {literalString: 'Below Divider'}}), - ], - }), - }, - { - name: 'List', - surface: this.createSingleComponentSurface('List', { - children: [ - this.createComponent('Text', {text: {literalString: 'List Item 1'}}), - this.createComponent('Text', {text: {literalString: 'List Item 2'}}), - this.createComponent('Text', {text: {literalString: 'List Item 3'}}), - ], - direction: 'vertical', - }), - }, - { - name: 'Modal', - surface: this.createSingleComponentSurface('Modal', { - entryPointChild: this.createComponent('Button', { - action: {type: 'none'}, - child: this.createComponent('Text', {text: {literalString: 'Open Modal'}}), - }), - contentChild: this.createComponent('Card', { - child: this.createComponent('Text', { - text: {literalString: 'This is the modal content.'}, - }), - }), - }), - }, - { - name: 'Row', - surface: this.createSingleComponentSurface('Row', { - children: [ - this.createComponent('Text', {text: {literalString: 'Left'}}), - this.createComponent('Text', {text: {literalString: 'Center'}}), - this.createComponent('Text', {text: {literalString: 'Right'}}), - ], - alignment: 'center', - distribution: 'space-between', - }), - }, - { - name: 'Tabs', - surface: this.createSingleComponentSurface('Tabs', { - tabItems: [ - { - title: {literalString: 'Tab 1'}, - child: this.createComponent('Text', { - text: {literalString: 'Content for Tab 1'}, - }), - }, - { - title: {literalString: 'Tab 2'}, - child: this.createComponent('Text', { - text: {literalString: 'Content for Tab 2'}, - }), - }, - ], - }), - }, - { - name: 'Text', - surface: this.createSingleComponentSurface('Column', { - children: [ - this.createComponent('Heading', {text: {literalString: 'Heading Text'}}), - this.createComponent('Text', {text: {literalString: 'Standard body text.'}}), - this.createComponent('Text', { - text: {literalString: 'Caption text'}, - usageHint: 'caption', - }), - ], - }), - }, - ], - }, - { - name: 'Media', - samples: [ - { - name: 'AudioPlayer', - surface: this.createSingleComponentSurface('AudioPlayer', { - url: {literalString: 'https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3'}, - }), - }, - { - name: 'Icon', - surface: this.createSingleComponentSurface('Row', { - children: [ - this.createComponent('Icon', {name: {literalString: 'home'}}), - this.createComponent('Icon', {name: {literalString: 'favorite'}}), - this.createComponent('Icon', {name: {literalString: 'settings'}}), - ], - distribution: 'space-around', - }), - }, - { - name: 'Image', - surface: this.createSingleComponentSurface('Image', { - url: {literalString: 'https://picsum.photos/id/10/300/200'}, - }), - }, - { - name: 'Video', - surface: this.createSingleComponentSurface('Video', { - url: { - literalString: - 'http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4', - }, - }), - }, - ], - }, - { - name: 'Inputs', - samples: [ - { - name: 'Button', - surface: this.createSingleComponentSurface('Row', { - children: [ - this.createComponent('Button', { - label: {literalString: 'Primary'}, - action: {type: 'click'}, - child: this.createComponent('Text', {text: {literalString: 'Primary'}}), - }), - this.createComponent('Button', { - label: {literalString: 'Secondary'}, - action: {type: 'click'}, - child: this.createComponent('Text', {text: {literalString: 'Secondary'}}), - }), - ], - distribution: 'space-around', - }), - }, - { - name: 'CheckBox', - surface: this.createSingleComponentSurface('Column', { - children: [ - this.createComponent('CheckBox', { - label: {literalString: 'Unchecked'}, - value: {literalBoolean: false}, - }), - this.createComponent('CheckBox', { - label: {literalString: 'Checked'}, - value: {literalBoolean: true}, - }), - ], - }), - }, - { - name: 'DateTimeInput', - surface: this.createSingleComponentSurface('Column', { - children: [ - this.createComponent('DateTimeInput', { - enableDate: true, - enableTime: false, - value: {literalString: '2025-12-09'}, - }), - this.createComponent('DateTimeInput', { - enableDate: true, - enableTime: true, - value: {literalString: '2025-12-09T12:00:00'}, - }), - ], - }), - }, - { - name: 'MultipleChoice', - surface: this.createSingleComponentSurface('MultipleChoice', { - options: [ - {value: 'opt1', label: {literalString: 'Option 1'}}, - {value: 'opt2', label: {literalString: 'Option 2'}}, - {value: 'opt3', label: {literalString: 'Option 3'}}, - ], - selections: {literalString: 'opt1'}, - }), - }, - { - name: 'Slider', - surface: this.createSingleComponentSurface('Slider', { - value: {literalNumber: 50}, - minValue: 0, - maxValue: 100, - }), - }, - { - name: 'TextField', - surface: this.createSingleComponentSurface('Column', { - children: [ - this.createComponent('TextField', { - label: {literalString: 'Standard Input'}, - text: {literalString: 'Some text'}, - }), - this.createComponent('TextField', { - label: {literalString: 'Password'}, - type: 'password', - text: {literalString: ''}, - }), - ], - }), - }, - ], - }, - ]; - - private createSingleComponentSurface(type: string, properties: any): Types.Surface { - const rootId = 'root'; - - return { - rootComponentId: rootId, - dataModel: new Map(), - styles: {}, - componentTree: { - id: rootId, - type: type, - properties: properties, - } as any, - components: new Map(), - }; - } - - private createComponent(type: string, properties: any): any { - return { - id: 'generated-' + Math.random().toString(36).substr(2, 9), // ID will be overridden by key in map usually, or ignored if inline - type: type, - properties: properties, - }; - } -} diff --git a/samples/client/angular/projects/gallery/src/app/features/library/library.css b/samples/client/angular/projects/gallery/src/app/features/library/library.css deleted file mode 100644 index f1e4e66d1b..0000000000 --- a/samples/client/angular/projects/gallery/src/app/features/library/library.css +++ /dev/null @@ -1,116 +0,0 @@ -/* - Copyright 2025 Google LLC - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -dialog { - min-width: 800px; - min-height: 600px; - padding: 1rem; - border-radius: 8px; - border: none; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); - opacity: 0; - transform: translateY(-20px) scale(0.95); - transition: - opacity 0.2s ease-out, - transform 0.2s ease-out; - display: flex; - flex-direction: column; -} - -dialog[open] { - opacity: 1; - transform: translateY(0) scale(1); - animation: slide-in 0.2s ease-out forwards; -} - -dialog::backdrop { - opacity: 0; - background-color: rgba(0, 0, 0, 0.5); - transition: opacity 0.2s ease-out; -} - -dialog[open]::backdrop { - opacity: 1; - animation: fade-in 0.2s ease-out forwards; -} - -dialog article { - flex-grow: 1; - display: flex; - flex-direction: column; -} - -.block-card { - border: solid 1px; - border-radius: 4px; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); - break-inside: avoid; - margin-bottom: 1rem; - border: 1px solid #ccc; - border-radius: 8px; - padding: 1rem; - background: white; -} - -.block-header { - display: flex; - justify-content: space-between; - align-items: center; -} - -.block-title { - font-weight: bold; - font-size: 1.3rem; - margin-top: 2px; -} - -.block-gallery { - margin: 0 2rem 0 2rem; - column-width: 320px; - column-gap: 1rem; -} - -dialog .dialog-content-grid { - flex-grow: 1; - display: grid; - grid-template-columns: 1fr 1fr; - gap: 1.5rem; - height: 100%; - align-items: stretch; -} - -dialog .dialog-content-grid > .block-surface { - margin-right: 10px; - height: 100%; -} - -.json-pane { - height: 100%; - display: flex; - flex-direction: column; -} - -.json-pane pre { - background-color: #272822; - color: #f8f8f2; - padding: 1em; - border-radius: 4px; - flex-grow: 1; - overflow: auto; - height: 100%; - white-space: pre-wrap; - word-break: break-word; -} diff --git a/samples/client/angular/projects/gallery/src/app/features/library/library.html b/samples/client/angular/projects/gallery/src/app/features/library/library.html deleted file mode 100644 index 4a552744dc..0000000000 --- a/samples/client/angular/projects/gallery/src/app/features/library/library.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - -
- @if (selectedBlock) { -
-

{{ selectedBlock.name }}

- -
-
-
- -
-
-
{{ getJson(selectedBlock.surface) }}
-
-
- } @else { -

Please select a component from the gallery

- } -
-
diff --git a/samples/client/angular/projects/gallery/src/app/theme.ts b/samples/client/angular/projects/gallery/src/app/theme.ts deleted file mode 100644 index a3454b8211..0000000000 --- a/samples/client/angular/projects/gallery/src/app/theme.ts +++ /dev/null @@ -1,464 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as Styles from '@a2ui/web_core/styles/index'; -import * as Types from '@a2ui/web_core/types/types'; - -/** Elements */ - -const a = { - 'typography-f-sf': true, - 'typography-fs-n': true, - 'typography-w-500': true, - 'layout-as-n': true, - 'layout-dis-iflx': true, - 'layout-al-c': true, -}; - -const audio = { - 'layout-w-100': true, -}; - -const body = { - 'typography-f-s': true, - 'typography-fs-n': true, - 'typography-w-400': true, - 'layout-mt-0': true, - 'layout-mb-2': true, - 'typography-sz-bm': true, - 'color-c-n10': true, -}; - -const button = { - 'typography-f-sf': true, - 'typography-fs-n': true, - 'typography-w-500': true, - 'layout-pt-3': true, - 'layout-pb-3': true, - 'layout-pl-5': true, - 'layout-pr-5': true, - 'layout-mb-1': true, - 'border-br-16': true, - 'border-bw-0': true, - 'border-c-n70': true, - 'border-bs-s': true, - 'color-bgc-s30': true, - 'color-c-n100': true, - 'behavior-ho-80': true, -}; - -const heading = { - 'typography-f-sf': true, - 'typography-fs-n': true, - 'typography-w-500': true, - 'layout-mt-0': true, - 'layout-mb-2': true, - 'color-c-n10': true, -}; - -const h1 = { - ...heading, - 'typography-sz-tl': true, -}; - -const h2 = { - ...heading, - 'typography-sz-tm': true, -}; - -const h3 = { - ...heading, - 'typography-sz-ts': true, -}; - -const iframe = { - 'behavior-sw-n': true, -}; - -const input = { - 'typography-f-sf': true, - 'typography-fs-n': true, - 'typography-w-400': true, - 'layout-pl-4': true, - 'layout-pr-4': true, - 'layout-pt-2': true, - 'layout-pb-2': true, - 'border-br-6': true, - 'border-bw-1': true, - 'color-bc-s70': true, - 'border-bs-s': true, - 'layout-as-n': true, - 'color-c-n10': true, -}; - -const p = { - 'typography-f-s': true, - 'typography-fs-n': true, - 'typography-w-400': true, - 'layout-m-0': true, - 'typography-sz-bm': true, - 'layout-as-n': true, - 'color-c-n10': true, -}; - -const orderedList = { - 'typography-f-s': true, - 'typography-fs-n': true, - 'typography-w-400': true, - 'layout-m-0': true, - 'typography-sz-bm': true, - 'layout-as-n': true, -}; - -const unorderedList = { - 'typography-f-s': true, - 'typography-fs-n': true, - 'typography-w-400': true, - 'layout-m-0': true, - 'typography-sz-bm': true, - 'layout-as-n': true, -}; - -const listItem = { - 'typography-f-s': true, - 'typography-fs-n': true, - 'typography-w-400': true, - 'layout-m-0': true, - 'typography-sz-bm': true, - 'layout-as-n': true, -}; - -const pre = { - 'typography-f-c': true, - 'typography-fs-n': true, - 'typography-w-400': true, - 'typography-sz-bm': true, - 'typography-ws-p': true, - 'layout-as-n': true, -}; - -const textarea = { - ...input, - 'layout-r-none': true, - 'layout-fs-c': true, -}; - -const video = { - 'layout-el-cv': true, -}; - -const aLight = Styles.merge(a, {'color-c-p30': true}); -const inputLight = Styles.merge(input, {'color-c-n5': true}); -const textareaLight = Styles.merge(textarea, {'color-c-n5': true}); -const buttonLight = Styles.merge(button, {'color-c-n100': true}); -const h1Light = Styles.merge(h1, {'color-c-n5': true}); -const h2Light = Styles.merge(h2, {'color-c-n5': true}); -const h3Light = Styles.merge(h3, {'color-c-n5': true}); -const bodyLight = Styles.merge(body, {'color-c-n5': true}); -const pLight = Styles.merge(p, {'color-c-n60': true}); -const preLight = Styles.merge(pre, {'color-c-n35': true}); -const orderedListLight = Styles.merge(orderedList, { - 'color-c-n35': true, -}); -const unorderedListLight = Styles.merge(unorderedList, { - 'color-c-n35': true, -}); -const listItemLight = Styles.merge(listItem, { - 'color-c-n35': true, -}); - -export const theme: Types.Theme = { - additionalStyles: { - Card: { - 'min-width': '320px', - }, - Button: { - '--n-60': 'var(--n-100)', - }, - Image: { - 'max-width': '120px', - 'max-height': '120px', - marginLeft: 'auto', - marginRight: 'auto', - }, - }, - components: { - AudioPlayer: {}, - Button: { - 'layout-pt-2': true, - 'layout-pb-2': true, - 'layout-pl-5': true, - 'layout-pr-5': true, - 'border-br-2': true, - 'border-bw-0': true, - 'border-bs-s': true, - 'color-bgc-p30': true, - 'color-c-n100': true, - 'behavior-ho-70': true, - }, - Card: { - 'border-br-4': true, - 'color-bgc-p100': true, - 'color-bc-n90': true, - 'border-bw-1': true, - 'border-bs-s': true, - 'layout-pt-10': true, - 'layout-pb-10': true, - 'layout-pl-4': true, - 'layout-pr-4': true, - }, - CheckBox: { - element: { - 'layout-m-0': true, - 'layout-mr-2': true, - 'layout-p-2': true, - 'border-br-12': true, - 'border-bw-1': true, - 'border-bs-s': true, - 'color-bgc-p100': true, - 'color-bc-p60': true, - 'color-c-n30': true, - 'color-c-p30': true, - }, - label: { - 'color-c-p30': true, - 'typography-f-sf': true, - 'typography-v-r': true, - 'typography-w-400': true, - 'layout-flx-1': true, - 'typography-sz-ll': true, - }, - container: { - 'layout-dsp-iflex': true, - 'layout-al-c': true, - }, - }, - Column: {}, - DateTimeInput: { - container: {}, - label: {}, - element: { - 'layout-pt-2': true, - 'layout-pb-2': true, - 'layout-pl-3': true, - 'layout-pr-3': true, - 'border-br-12': true, - 'border-bw-1': true, - 'border-bs-s': true, - 'color-bgc-p100': true, - 'color-bc-p60': true, - 'color-c-n30': true, - }, - }, - Divider: { - 'color-bgc-n90': true, - 'layout-mt-6': true, - 'layout-mb-6': true, - }, - Image: { - all: { - 'border-br-50pc': true, - 'layout-el-cv': true, - 'layout-w-100': true, - 'layout-h-100': true, - 'layout-dsp-flexhor': true, - 'layout-al-c': true, - 'layout-sp-c': true, - 'layout-mb-3': true, - }, - avatar: {}, - header: {}, - icon: {}, - largeFeature: {}, - mediumFeature: {}, - smallFeature: {}, - }, - Icon: { - 'border-br-1': true, - 'layout-p-2': true, - 'color-bgc-n98': true, - 'layout-dsp-flexhor': true, - 'layout-al-c': true, - 'layout-sp-c': true, - }, - List: { - 'layout-g-4': true, - 'layout-p-2': true, - }, - Modal: { - backdrop: {'color-bbgc-p60_20': true}, - element: { - 'border-br-2': true, - 'color-bgc-p100': true, - 'layout-p-4': true, - 'border-bw-1': true, - 'border-bs-s': true, - 'color-bc-p80': true, - }, - }, - MultipleChoice: { - container: {}, - label: {}, - element: {}, - }, - Row: { - 'layout-g-4': true, - 'layout-mb-3': true, - }, - Slider: { - container: {}, - label: {}, - element: {}, - }, - Tabs: { - container: {}, - controls: {all: {}, selected: {}}, - element: {}, - }, - Text: { - all: { - 'layout-w-100': true, - 'layout-g-2': true, - 'color-c-p30': true, - }, - h1: { - 'typography-f-sf': true, - 'typography-ta-c': true, - 'typography-v-r': true, - 'typography-w-500': true, - 'layout-mt-0': true, - 'layout-mr-0': true, - 'layout-ml-0': true, - 'layout-mb-2': true, - 'layout-p-0': true, - 'typography-sz-tl': true, - }, - h2: { - 'typography-f-sf': true, - 'typography-ta-c': true, - 'typography-v-r': true, - 'typography-w-500': true, - 'layout-mt-0': true, - 'layout-mr-0': true, - 'layout-ml-0': true, - 'layout-mb-2': true, - 'layout-p-0': true, - 'typography-sz-tl': true, - }, - h3: { - 'typography-f-sf': true, - 'typography-ta-c': true, - 'typography-v-r': true, - 'typography-w-500': true, - 'layout-mt-0': true, - 'layout-mr-0': true, - 'layout-ml-0': true, - 'layout-mb-0': true, - 'layout-p-0': true, - 'typography-sz-ts': true, - }, - h4: { - 'typography-f-sf': true, - 'typography-ta-c': true, - 'typography-v-r': true, - 'typography-w-500': true, - 'layout-mt-0': true, - 'layout-mr-0': true, - 'layout-ml-0': true, - 'layout-mb-0': true, - 'layout-p-0': true, - 'typography-sz-bl': true, - }, - h5: { - 'typography-f-sf': true, - 'typography-ta-c': true, - 'typography-v-r': true, - 'typography-w-500': true, - 'layout-mt-0': true, - 'layout-mr-0': true, - 'layout-ml-0': true, - 'layout-mb-0': true, - 'layout-p-0': true, - 'color-c-n30': true, - 'typography-sz-bm': true, - 'layout-mb-1': true, - }, - body: {}, - caption: {}, - }, - TextField: { - container: { - 'typography-sz-bm': true, - 'layout-w-100': true, - 'layout-g-2': true, - 'layout-dsp-flexhor': true, - 'layout-al-c': true, - }, - label: { - 'layout-flx-0': true, - }, - element: { - 'typography-sz-bm': true, - 'layout-pt-2': true, - 'layout-pb-2': true, - 'layout-pl-3': true, - 'layout-pr-3': true, - 'border-br-12': true, - 'border-bw-1': true, - 'border-bs-s': true, - 'color-bgc-p100': true, - 'color-bc-p60': true, - 'color-c-n30': true, - 'color-c-p30': true, - }, - }, - Video: { - 'border-br-5': true, - 'layout-el-cv': true, - }, - }, - elements: { - a: aLight, - audio, - body: bodyLight, - button: buttonLight, - h1: h1Light, - h2: h2Light, - h3: h3Light, - h4: {}, - h5: {}, - iframe, - input: inputLight, - p: pLight, - pre: preLight, - textarea: textareaLight, - video, - }, - markdown: { - p: [...Object.keys(pLight)], - h1: [...Object.keys(h1Light)], - h2: [...Object.keys(h2Light)], - h3: [...Object.keys(h3Light)], - h4: [], - h5: [], - ul: [...Object.keys(unorderedListLight)], - ol: [...Object.keys(orderedListLight)], - li: [...Object.keys(listItemLight)], - a: [...Object.keys(aLight)], - strong: [], - em: [], - }, -}; diff --git a/samples/client/angular/projects/gallery/src/index.html b/samples/client/angular/projects/gallery/src/index.html deleted file mode 100644 index 8a3f5f6ac7..0000000000 --- a/samples/client/angular/projects/gallery/src/index.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - A2UI Gallery - - - - - - - - - - - diff --git a/samples/client/angular/projects/gallery/src/main.ts b/samples/client/angular/projects/gallery/src/main.ts deleted file mode 100644 index 3b50462075..0000000000 --- a/samples/client/angular/projects/gallery/src/main.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {bootstrapApplication} from '@angular/platform-browser'; -import {appConfig} from './app/app.config'; -import {App} from './app/app'; - -bootstrapApplication(App, appConfig).catch(err => console.error(err)); diff --git a/samples/client/angular/projects/gallery/src/styles.css b/samples/client/angular/projects/gallery/src/styles.css deleted file mode 100644 index 06750be00c..0000000000 --- a/samples/client/angular/projects/gallery/src/styles.css +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Global Styles */ -body { - margin: 0; - font-family: Roboto, 'Helvetica Neue', sans-serif; - background-color: #f5f5f5; - color: #333; -} - -html, -body { - height: 100%; -} - -:root { - --n-100: #ffffff; - --n-99: #fcfcfc; - --n-98: #f9f9f9; - --n-95: #f1f1f1; - --n-90: #e2e2e2; - --n-80: #c6c6c6; - --n-70: #ababab; - --n-60: #919191; - --n-50: #777777; - --n-40: #5e5e5e; - --n-35: #525252; - --n-30: #474747; - --n-25: #3b3b3b; - --n-20: #303030; - --n-15: #262626; - --n-10: #1b1b1b; - --n-5: #111111; - --n-0: #000000; - - --p-100: #ffffff; - --p-99: #fffbff; - --p-98: #fcf8ff; - --p-95: #f2efff; - --p-90: #e1e0ff; - --p-80: #c0c1ff; - --p-70: #a0a3ff; - --p-60: #8487ea; - --p-50: #6a6dcd; - --p-40: #5154b3; - --p-35: #4447a6; - --p-30: #383b99; - --p-25: #2c2e8d; - --p-20: #202182; - --p-15: #131178; - --p-10: #06006c; - --p-5: #03004d; - --p-0: #000000; - - --s-100: #ffffff; - --s-99: #fffbff; - --s-98: #fcf8ff; - --s-95: #f2efff; - --s-90: #e2e0f9; - --s-80: #c6c4dd; - --s-70: #aaa9c1; - --s-60: #8f8fa5; - --s-50: #75758b; - --s-40: #5d5c72; - --s-35: #515165; - --s-30: #454559; - --s-25: #393a4d; - --s-20: #2e2f42; - --s-15: #242437; - --s-10: #191a2c; - --s-5: #0f0f21; - --s-0: #000000; - - --t-100: #ffffff; - --t-99: #fffbff; - --t-98: #fff8f9; - --t-95: #ffecf4; - --t-90: #ffd8ec; - --t-80: #e9b9d3; - --t-70: #cc9eb8; - --t-60: #af849d; - --t-50: #946b83; - --t-40: #79536a; - --t-35: #6c475d; - --t-30: #5f3c51; - --t-25: #523146; - --t-20: #46263a; - --t-15: #3a1b2f; - --t-10: #2e1125; - --t-5: #22071a; - --t-0: #000000; - - --nv-100: #ffffff; - --nv-99: #fffbff; - --nv-98: #fcf8ff; - --nv-95: #f2effa; - --nv-90: #e4e1ec; - --nv-80: #c8c5d0; - --nv-70: #acaab4; - --nv-60: #918f9a; - --nv-50: #777680; - --nv-40: #5e5d67; - --nv-35: #52515b; - --nv-30: #46464f; - --nv-25: #3b3b43; - --nv-20: #303038; - --nv-15: #25252d; - --nv-10: #1b1b23; - --nv-5: #101018; - --nv-0: #000000; - - --e-100: #ffffff; - --e-99: #fffbff; - --e-98: #fff8f7; - --e-95: #ffedea; - --e-90: #ffdad6; - --e-80: #ffb4ab; - --e-70: #ff897d; - --e-60: #ff5449; - --e-50: #de3730; - --e-40: #ba1a1a; - --e-35: #a80710; - --e-30: #93000a; - --e-25: #7e0007; - --e-20: #690005; - --e-15: #540003; - --e-10: #410002; - --e-5: #2d0001; - --e-0: #000000; - - --primary: #137fec; - --text-color: #fff; - --background-light: #f6f7f8; - --background-dark: #101922; - --border-color: oklch(from var(--background-light) l c h / calc(alpha * 0.15)); - --elevated-background-light: oklch(from var(--background-light) l c h / calc(alpha * 0.05)); - --bb-grid-size: 4px; - --bb-grid-size-2: calc(var(--bb-grid-size) * 2); - --bb-grid-size-3: calc(var(--bb-grid-size) * 3); - --bb-grid-size-4: calc(var(--bb-grid-size) * 4); - --bb-grid-size-5: calc(var(--bb-grid-size) * 5); - --bb-grid-size-6: calc(var(--bb-grid-size) * 6); - --bb-grid-size-7: calc(var(--bb-grid-size) * 7); - --bb-grid-size-8: calc(var(--bb-grid-size) * 8); - --bb-grid-size-9: calc(var(--bb-grid-size) * 9); - --bb-grid-size-10: calc(var(--bb-grid-size) * 10); - --bb-grid-size-11: calc(var(--bb-grid-size) * 11); - --bb-grid-size-12: calc(var(--bb-grid-size) * 12); - --bb-grid-size-13: calc(var(--bb-grid-size) * 13); - --bb-grid-size-14: calc(var(--bb-grid-size) * 14); - --bb-grid-size-15: calc(var(--bb-grid-size) * 15); - --bb-grid-size-16: calc(var(--bb-grid-size) * 16); -} - -* { - box-sizing: border-box; -} - -html, -body { - --font-family: 'Google Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; - --font-family-flex: 'Google Sans Flex', 'Helvetica Neue', Helvetica, Arial, sans-serif; - --font-family-mono: 'Google Sans Code', 'Helvetica Neue', Helvetica, Arial, sans-serif; - - background: var(--background-light); - font-family: var(--font-family); - margin: 0; - padding: 0; - width: 100svw; - height: 100svh; -} - -@keyframes slide-in { - from { - opacity: 0; - transform: translateY(-20px) scale(0.95); - } - to { - opacity: 1; - transform: translateY(0) scale(1); - } -} - -@keyframes fade-in { - from { - opacity: 0; - } - to { - opacity: 1; - } -} -.fade-in { - animation: fade-in 0.2s ease-out forwards; -} diff --git a/samples/client/angular/projects/gallery/tsconfig.app.json b/samples/client/angular/projects/gallery/tsconfig.app.json deleted file mode 100644 index 76bbc39824..0000000000 --- a/samples/client/angular/projects/gallery/tsconfig.app.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "../../out-tsc/app", - "types": ["node"] - }, - "include": ["src/**/*.ts"], - "exclude": ["src/**/*.spec.ts"] -} diff --git a/samples/client/angular/projects/gallery/tsconfig.spec.json b/samples/client/angular/projects/gallery/tsconfig.spec.json deleted file mode 100644 index 2efe0761c6..0000000000 --- a/samples/client/angular/projects/gallery/tsconfig.spec.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "../../out-tsc/spec", - "types": ["jasmine"] - }, - "include": ["src/**/*.ts"] -} diff --git a/samples/client/angular/projects/mcp_calculator/package.json b/samples/client/angular/projects/mcp_calculator/package.json deleted file mode 100644 index c635820da9..0000000000 --- a/samples/client/angular/projects/mcp_calculator/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "@a2ui/mcp_calculator", - "version": "0.1.0", - "private": true, - "scripts": { - "build": "wireit", - "format": "prettier --write .", - "format:check": "prettier --check .", - "lint": "yarn --cwd ../.. lint", - "test": "yarn --cwd ../.. test", - "lint:fix": "yarn --cwd ../.. lint:fix" - }, - "dependencies": { - "@a2ui/angular": "workspace:*", - "@a2ui/web_core": "workspace:*" - }, - "devDependencies": { - "wireit": "^0.15.0-pre.2" - }, - "wireit": { - "build": { - "command": "yarn workspace angular-a2ui ng build mcp_calculator", - "dependencies": [ - "../../../../../renderers/angular:build" - ], - "files": [ - "src/**/*", - "tsconfig.app.json" - ], - "output": [ - "dist" - ] - } - } -} diff --git a/samples/client/angular/projects/orchestrator/src/app/dummy.spec.ts b/samples/client/angular/projects/orchestrator/src/app/dummy.spec.ts deleted file mode 100644 index c53f443277..0000000000 --- a/samples/client/angular/projects/orchestrator/src/app/dummy.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Copyright 2026 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -describe('Dummy', () => { - it('should pass', () => { - expect(true).toBe(true); - }); -}); diff --git a/samples/client/angular/projects/rizzcharts/README.md b/samples/client/angular/projects/rizzcharts/README.md deleted file mode 100644 index 705cfc7e7a..0000000000 --- a/samples/client/angular/projects/rizzcharts/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# Angular A2UI - RIZZ Charts - -These are sample implementations of A2UI in Angular. - -## Prerequisites - -1. [nodejs](https://nodejs.org/en) -2. GoogleMap API ([How to get the API key](https://developers.google.com/maps/documentation/javascript/get-api-key)) - -## Running - -1. Update the `src/environments/environment.ts` file with your Google Maps API key. -2. Build the shared dependencies by running `yarn install` from the root, then `yarn build` in the `renderers/web_core` directory -3. Install local dependencies: `yarn install` -4. Run the A2A server for the [rizzcharts agent](../../../../agent/adk/rizzcharts/python/) -5. Run the relevant app: - -- `yarn start rizzcharts` - -6. Open http://localhost:4200/ diff --git a/samples/client/angular/projects/rizzcharts/package.json b/samples/client/angular/projects/rizzcharts/package.json deleted file mode 100644 index e02061d261..0000000000 --- a/samples/client/angular/projects/rizzcharts/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "@a2ui/rizzcharts", - "version": "0.1.0", - "private": true, - "scripts": { - "build": "wireit", - "format": "prettier --write .", - "format:check": "prettier --check .", - "lint": "yarn --cwd ../.. lint", - "test": "yarn --cwd ../.. test", - "lint:fix": "yarn --cwd ../.. lint:fix" - }, - "dependencies": { - "@a2ui/angular": "workspace:*", - "@a2ui/markdown-it": "*", - "@a2ui/web_core": "workspace:*" - }, - "devDependencies": { - "wireit": "^0.15.0-pre.2" - }, - "wireit": { - "build": { - "command": "yarn workspace angular-a2ui ng build rizzcharts", - "dependencies": [ - "../../../../../renderers/angular:build" - ], - "files": [ - "src/**/*", - "tsconfig.app.json" - ], - "output": [ - "dist" - ] - } - } -} diff --git a/samples/client/angular/projects/rizzcharts/public/Gradient.png b/samples/client/angular/projects/rizzcharts/public/Gradient.png deleted file mode 100644 index fc0d5965e9..0000000000 Binary files a/samples/client/angular/projects/rizzcharts/public/Gradient.png and /dev/null differ diff --git a/samples/client/angular/projects/rizzcharts/public/avatar.jpg b/samples/client/angular/projects/rizzcharts/public/avatar.jpg deleted file mode 100644 index 05ff891973..0000000000 Binary files a/samples/client/angular/projects/rizzcharts/public/avatar.jpg and /dev/null differ diff --git a/samples/client/angular/projects/rizzcharts/public/favicon.ico b/samples/client/angular/projects/rizzcharts/public/favicon.ico deleted file mode 100644 index 57614f9c96..0000000000 Binary files a/samples/client/angular/projects/rizzcharts/public/favicon.ico and /dev/null differ diff --git a/samples/client/angular/projects/rizzcharts/public/logo-dark.png b/samples/client/angular/projects/rizzcharts/public/logo-dark.png deleted file mode 100644 index 77f58dfc0b..0000000000 Binary files a/samples/client/angular/projects/rizzcharts/public/logo-dark.png and /dev/null differ diff --git a/samples/client/angular/projects/rizzcharts/public/logo-light.png b/samples/client/angular/projects/rizzcharts/public/logo-light.png deleted file mode 100644 index c66f4f86d2..0000000000 Binary files a/samples/client/angular/projects/rizzcharts/public/logo-light.png and /dev/null differ diff --git a/samples/client/angular/projects/rizzcharts/public/rizz-agent.png b/samples/client/angular/projects/rizzcharts/public/rizz-agent.png deleted file mode 100644 index 7ce238c94b..0000000000 Binary files a/samples/client/angular/projects/rizzcharts/public/rizz-agent.png and /dev/null differ diff --git a/samples/client/angular/projects/rizzcharts/src/a2ui-catalog/canvas.ts b/samples/client/angular/projects/rizzcharts/src/a2ui-catalog/canvas.ts deleted file mode 100644 index 301d21dd1f..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/a2ui-catalog/canvas.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {DynamicComponent} from '@a2ui/angular'; -import * as Types from '@a2ui/web_core/types/types'; -import {ChangeDetectionStrategy, Component, computed, inject, OnInit} from '@angular/core'; -import {CanvasService} from '@a2a_chat_canvas/services/canvas-service'; - -@Component({ - selector: 'a2ui-canvas', - changeDetection: ChangeDetectionStrategy.OnPush, - styles: ` - :host { - display: block; - flex: var(--weight); - min-height: 0; - overflow: auto; - } - - section { - display: flex; - justify-content: space-between; - flex-direction: row; - } - `, - template: '
', -}) -export class Canvas extends DynamicComponent implements OnInit { - private readonly canvasService = inject(CanvasService); - - readonly isCanvasOpened = computed(() => this.canvasService.surfaceId() === this.surfaceId()); - - ngOnInit(): void { - this.openCanvas(); - } - - protected closeCanvas() { - this.canvasService.surfaceId.set(null); - } - - protected openCanvas() { - this.canvasService.openSurfaceInCanvas( - this.surfaceId()!, - this.component().properties['children'] as Types.AnyComponentNode[], - ); - } -} diff --git a/samples/client/angular/projects/rizzcharts/src/a2ui-catalog/catalog.ts b/samples/client/angular/projects/rizzcharts/src/a2ui-catalog/catalog.ts deleted file mode 100644 index 51d2d5d02e..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/a2ui-catalog/catalog.ts +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {Catalog, DEFAULT_CATALOG} from '@a2ui/angular'; -import {inputBinding} from '@angular/core'; - -export const RIZZ_CHARTS_CATALOG = { - ...DEFAULT_CATALOG, - Canvas: () => import('./canvas').then(r => r.Canvas), - Chart: { - type: () => import('./chart').then(r => r.Chart), - bindings: ({properties}) => [ - inputBinding('type', () => ('type' in properties && properties['type']) || undefined), - inputBinding('title', () => ('title' in properties && properties['title']) || undefined), - inputBinding( - 'chartData', - () => ('chartData' in properties && properties['chartData']) || undefined, - ), - ], - }, - GoogleMap: { - type: () => import('./google-map').then(r => r.GoogleMap), - bindings: ({properties}) => [ - inputBinding('zoom', () => ('zoom' in properties && properties['zoom']) || 8), - inputBinding('center', () => ('center' in properties && properties['center']) || undefined), - inputBinding('pins', () => ('pins' in properties && properties['pins']) || undefined), - inputBinding('title', () => ('title' in properties && properties['title']) || undefined), - ], - }, - YouTube: { - type: () => import('./youtube').then(r => r.YouTube), - bindings: ({properties}) => [ - inputBinding( - 'videoId', - () => ('videoId' in properties && properties['videoId']) || undefined, - ), - inputBinding('title', () => ('title' in properties && properties['title']) || undefined), - inputBinding( - 'autoplay', - () => ('autoplay' in properties && properties['autoplay']) || undefined, - ), - ], - }, -} as Catalog; diff --git a/samples/client/angular/projects/rizzcharts/src/a2ui-catalog/chart.ts b/samples/client/angular/projects/rizzcharts/src/a2ui-catalog/chart.ts deleted file mode 100644 index 5a22315af4..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/a2ui-catalog/chart.ts +++ /dev/null @@ -1,281 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {DynamicComponent} from '@a2ui/angular'; -import * as Primitives from '@a2ui/web_core/types/primitives'; -import * as Types from '@a2ui/web_core/types/types'; -import { - ChangeDetectionStrategy, - Component, - computed, - input, - Signal, - signal, - ViewChild, -} from '@angular/core'; -import {MatIconButton} from '@angular/material/button'; -import {MatIcon} from '@angular/material/icon'; -import {ChartData, ChartEvent, ChartOptions, ChartType, LegendItem} from 'chart.js'; -import {BaseChartDirective} from 'ng2-charts'; - -@Component({ - selector: 'a2ui-chart', - imports: [BaseChartDirective, MatIconButton, MatIcon], - changeDetection: ChangeDetectionStrategy.OnPush, - styles: ` - :host { - display: block; - flex: var(--weight); - padding: 20px; - } - - .chart-box-container { - background-color: var(--mat-sys-surface-container); /* Dark background for the box */ - border-radius: 8px; - border: 1px solid #444; /* Subtle border for dark theme */ - padding: 20px; - margin: 20px auto; /* Center the box */ - max-width: 800px; /* Limit width for better appearance */ - } - - /* Combined header for title and icon */ - .chart-header { - display: flex; - justify-content: space-between; /* Pushes title to left, icon to right */ - align-items: start; /* Vertically centers title and icon */ - margin-bottom: 15px; /* Space below the header */ - } - - .chart-header h2 { - margin: 0; /* Remove default margin from h2 */ - font-size: 24px; - color: var(--mat-sys-on-surface-container); /* Light text for title */ - } - - .header-icon { - cursor: pointer; - line-height: 0; /* Helps with vertical alignment of SVG */ - } - - .chart-container { - width: 100%; - display: flex; - flex-direction: column; - font-family: Arial, sans-serif; - color: #ccc; /* Light text for dark theme */ - } - - .chart-container p { - margin-bottom: 10px; - color: #ccc; /* Light text for dark theme */ - } - `, - template: ` -
- -
-
-

{{ resolvedTitle() }}

- @if (isDrillDown()) { -

{{ selectedCategory() }}

- } -
- -
- - -
-
-
- @if (isDrillDown()) { - - } - - -
-
- `, -}) -export class Chart extends DynamicComponent { - readonly type = input.required(); - protected readonly chartType = computed(() => this.type() as ChartType); - - readonly title = input(); - protected readonly resolvedTitle: Signal = computed(() => - super.resolvePrimitive(this.title() ?? null), - ); - - readonly chartData = input.required(); - protected readonly resolvedPieChartData: Signal< - Map> | undefined - > = computed(() => { - const chartDataPathPrefix = this.chartData(); - const chartType = this.chartType(); - if (chartDataPathPrefix === null) { - return undefined; - } - if (chartType === 'pie' || chartType === 'doughnut') { - return this.resolvePieChartData(chartDataPathPrefix); - } - console.error('Unsupported chart type specified:', chartType); - return undefined; - }); - - protected readonly selectedCategory = signal('root'); - protected readonly isDrillDown = computed(() => this.selectedCategory() !== 'root'); - protected readonly currentData: Signal | undefined> = computed( - () => { - const selectedCategory: string = this.selectedCategory(); - const allData = this.resolvedPieChartData(); - if (!allData) { - return undefined; - } - return {...allData.get(selectedCategory)} as ChartData<'pie', number[], string>; - }, - ); - - @ViewChild(BaseChartDirective) chart?: BaseChartDirective; - protected chartOptions: ChartOptions = { - responsive: true, - plugins: { - legend: { - display: true, - position: 'right', - labels: { - color: '#166a8f', - font: { - size: 14, - }, - }, - onClick: (e: ChartEvent, legendItem: LegendItem) => { - this.updateChartWithCategory(legendItem.text); - }, - }, - datalabels: { - formatter: (value: number, ctx: any) => { - const total = (ctx.chart.data.datasets[0].data as number[]).reduce((a, b) => a + b, 0); - const percentage = Math.round((value / total) * 100); - return `${percentage.toFixed(1)}%`; - }, - color: 'white', - font: { - size: 16, - }, - }, - }, - }; - - private resolvePieChartData( - pathPrefix: Primitives.StringValue, - ): Map> | undefined { - const dataMap = new Map>(); - const labels: string[] = []; - const data: number[] = []; - if (pathPrefix?.path) { - for (let index: number = 0; index < 500; index++) { - const itemPrefix = `${pathPrefix.path}[${index}]`; - const labelPath: Primitives.StringValue = {path: `${itemPrefix}.label`}; - const valuePath: Primitives.NumberValue = {path: `${itemPrefix}.value`}; - const label = super.resolvePrimitive(labelPath); - const value = super.resolvePrimitive(valuePath); - if (label === null || value === null) { - break; - } - labels.push(label); - data.push(value); - - const drilldownLabels: string[] = []; - const drilldownData: number[] = []; - const drilldownPathPrefix = `${itemPrefix}.drillDown`; - for (let jindex: number = 0; jindex < 500; jindex++) { - const drilldownItemPrefix = `${drilldownPathPrefix}[${jindex}]`; - const drilldownLabelPath: Primitives.StringValue = { - path: `${drilldownItemPrefix}.label`, - }; - const drilldownValuePath: Primitives.NumberValue = { - path: `${drilldownItemPrefix}.value`, - }; - const drilldownLabel = super.resolvePrimitive(drilldownLabelPath); - const drilldownValue = super.resolvePrimitive(drilldownValuePath); - if (drilldownLabel === null || drilldownValue === null) { - break; - } - drilldownLabels.push(drilldownLabel); - drilldownData.push(drilldownValue); - } - - const drilldownChartData: ChartData<'pie', number[], string> = { - labels: drilldownLabels, - datasets: [ - { - data: drilldownData, - }, - ], - }; - dataMap.set(label, drilldownChartData); - } - } - - const rootData: ChartData<'pie', number[], string> = { - labels, - datasets: [ - { - data, - }, - ], - }; - dataMap.set('root', rootData); - return dataMap; - } - - public restoreOriginalView() { - this.selectedCategory.set('root'); - } - - protected onClick(e: {event?: ChartEvent; active?: any[] | undefined}) { - const active = e.active; - if (!active || active.length === 0) return; - - // active[0] for pie chart contains the data index that was clicked - const dataIndex: number | undefined = (active[0] as any).index; - const labels = [...(this.currentData()?.labels ?? [])]; - const label = labels && typeof dataIndex === 'number' ? labels[dataIndex] : undefined; - if (label) { - this.updateChartWithCategory(label); - } - } - - private updateChartWithCategory(label: string) { - const currentCategory = this.selectedCategory(); - if (currentCategory !== 'root') { - console.error('Cannot drilldown further'); - return; - } - this.selectedCategory.set(label); - } -} diff --git a/samples/client/angular/projects/rizzcharts/src/a2ui-catalog/google-map.ts b/samples/client/angular/projects/rizzcharts/src/a2ui-catalog/google-map.ts deleted file mode 100644 index 569a87346b..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/a2ui-catalog/google-map.ts +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {DynamicComponent} from '@a2ui/angular'; -import * as Primitives from '@a2ui/web_core/types/primitives'; -import * as Types from '@a2ui/web_core/types/types'; -import {ChangeDetectionStrategy, Component, computed, input} from '@angular/core'; -import {GoogleMapsModule} from '@angular/google-maps'; -import {MatIconButton} from '@angular/material/button'; -import {MatIcon} from '@angular/material/icon'; - -// --- Location Definitions --- -interface Pin { - lat: number; - lng: number; - name: string; - description: string | null; - pinElement: google.maps.marker.PinElement; -} - -export interface CustomProperties { - path: string; -} - -@Component({ - selector: 'a2ui-map', - imports: [GoogleMapsModule, MatIconButton, MatIcon], - changeDetection: ChangeDetectionStrategy.OnPush, - styles: ` - :host { - display: block; - flex: var(--weight); - padding: 20px; - } - - .map-box-container { - background-color: var(--mat-sys-surface-container); /* Dark background for the box */ - border-radius: 8px; - border: 1px solid var(--mat-sys-surface-container-high); /* Subtle border for dark theme */ - padding: 20px; - margin: 20px auto; /* Center the box */ - max-width: 800px; /* Limit width for better appearance */ - } - - /* Combined header for title and icon */ - .map-header { - display: flex; - justify-content: space-between; /* Pushes title to left, icon to right */ - align-items: center; /* Vertically centers title and icon */ - margin-bottom: 15px; /* Space below the header */ - } - - .map-header h2 { - margin: 0; /* Remove default margin from h2 */ - font-size: 24px; - color: var(--mat-sys-on-surface-container); /* Light text for title */ - } - - .header-icon { - cursor: pointer; - line-height: 0; /* Helps with vertical alignment of SVG */ - } - - .map-container { - width: 100%; - display: flex; - flex-direction: column; - font-family: Arial, sans-serif; - color: #ccc; /* Light text for dark theme */ - } - - .map-container p { - margin-bottom: 10px; - color: #ccc; /* Light text for dark theme */ - } - - google-map { - border: 1px solid #555; /* Dark theme border around the map */ - border-radius: 4px; - overflow: hidden; /* Ensures border-radius applies to map content */ - } - `, - template: ` - @let resolvedZoom = this.resolvedZoom(); - - @if (resolvedZoom) { -
- -
-

{{ resolvedTitle() }}

-
- - -
-
- -
- - @for (pin of resolvedPins(); track pin) { - - - } - -
-
- } - `, -}) -export class GoogleMap extends DynamicComponent { - private readonly maxPinCount = 100; - private readonly defaultCenter: google.maps.LatLngLiteral = { - lat: 34.0626, - lng: -118.3759, - }; - - mapId = '4506f1f5f5e6e8e2'; - - readonly title = input(); - protected resolvedTitle = computed(() => super.resolvePrimitive(this.title() ?? null)); - - readonly zoom = input.required(); - protected resolvedZoom = computed(() => super.resolvePrimitive(this.zoom())); - - readonly center = input.required(); - protected resolvedCenter = computed(() => this.resolveLatLng(this.center())); - - readonly pins = input(); - protected readonly resolvedPins = computed(() => this.resolveLocations(this.pins())); - - constructor() { - super(); - } - - private resolveLocations(value: CustomProperties | undefined): Pin[] { - const locations: Pin[] = []; - if (value?.path) { - for (let index: number = 0; index < this.maxPinCount; index++) { - const locationPath = `${value.path}[${index}]`; - const pin = this.resolveLocation(locationPath); - // Stop iterating if no more locations can be found at the `locationPath`. - if (!pin) { - break; - } - locations.push(pin); - } - } - return locations; - } - - private resolveLocation(value: string | null): Pin | null { - if (!value) { - return null; - } - - const latValue: Primitives.NumberValue = {path: `${value}.lat`}; - const lngValue: Primitives.NumberValue = {path: `${value}.lng`}; - const nameValue: Primitives.StringValue = {path: `${value}.name`}; - const descriptionValue: Primitives.StringValue = {path: `${value}.description`}; - const backgroundValue: Primitives.StringValue = {path: `${value}.background`}; - const borderColorValue: Primitives.StringValue = {path: `${value}.borderColor`}; - const glyphColorValue: Primitives.StringValue = {path: `${value}.glyphColor`}; - - const lat = this.resolvePrimitive(latValue); - const lng = this.resolvePrimitive(lngValue); - const name = this.resolvePrimitive(nameValue); - const description = this.resolvePrimitive(descriptionValue); - const background = this.resolvePrimitive(backgroundValue); - const borderColor = this.resolvePrimitive(borderColorValue); - const glyphColor = this.resolvePrimitive(glyphColorValue); - - // TODO: This logic should be implemented in the `guard.ts` by making the data model typed upstream. - if (lat === null || lng === null || name === null) { - // The location is invalid. - return null; - } - - return { - lat, - lng, - name, - // TODO: Description is currently not used in the Maps. - description, - pinElement: new google.maps.marker.PinElement({ - background, - borderColor, - glyphColor, - }), - }; - } - - private resolveLatLng(value: CustomProperties | null): google.maps.LatLngLiteral { - if (value?.path) { - const latValue: Primitives.NumberValue = {path: `${value.path}.lat`}; - const lngValue: Primitives.NumberValue = {path: `${value.path}.lng`}; - const lat = this.resolvePrimitive(latValue)!; - const lng = this.resolvePrimitive(lngValue)!; - return { - lat, - lng, - }; - } - - return this.defaultCenter; - } -} diff --git a/samples/client/angular/projects/rizzcharts/src/a2ui-catalog/youtube.ts b/samples/client/angular/projects/rizzcharts/src/a2ui-catalog/youtube.ts deleted file mode 100644 index d7d6b739b6..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/a2ui-catalog/youtube.ts +++ /dev/null @@ -1,122 +0,0 @@ -/* - Copyright 2025 Google LLC - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -import {DynamicComponent} from '@a2ui/angular'; -import * as Primitives from '@a2ui/web_core/types/primitives'; -import * as Types from '@a2ui/web_core/types/types'; -import {ChangeDetectionStrategy, Component, computed, input} from '@angular/core'; -import {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser'; - -@Component({ - selector: 'a2ui-youtube', - changeDetection: ChangeDetectionStrategy.OnPush, - styles: ` - :host { - display: block; - flex: var(--weight); - padding: 8px; - } - - .youtube-container { - background-color: var(--mat-sys-surface-container); - border-radius: 8px; - border: 1px solid var(--mat-sys-surface-container-high); - padding: 16px; - max-width: 800px; - } - - .youtube-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 12px; - } - - .youtube-header h3 { - margin: 0; - font-size: 18px; - color: var(--mat-sys-on-surface); - } - - .video-wrapper { - position: relative; - width: 100%; - padding-bottom: 56.25%; /* 16:9 aspect ratio */ - border-radius: 8px; - overflow: hidden; - } - - iframe { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - border: none; - } - `, - template: ` - @if (resolvedVideoId()) { -
- @if (resolvedTitle()) { -
-

{{ resolvedTitle() }}

-
- } -
- -
-
- } - `, -}) -export class YouTube extends DynamicComponent { - readonly videoId = input.required(); - protected readonly resolvedVideoId = computed(() => this.resolvePrimitive(this.videoId())); - - readonly title = input(); - protected readonly resolvedTitle = computed(() => this.resolvePrimitive(this.title() ?? null)); - - readonly autoplay = input(); - protected readonly resolvedAutoplay = computed(() => - this.resolvePrimitive(this.autoplay() ?? null), - ); - - private static readonly YOUTUBE_ID_REGEX = /^[a-zA-Z0-9_-]{11}$/; - - protected readonly safeUrl = computed((): SafeResourceUrl | null => { - const id = this.resolvedVideoId(); - if (!id) return null; - - // Validate video ID format before constructing URL - if (!YouTube.YOUTUBE_ID_REGEX.test(id)) { - console.error('Invalid YouTube video ID received from agent:', id); - return null; - } - - const autoplay = this.resolvedAutoplay() ? '1' : '0'; - const url = `https://www.youtube.com/embed/${encodeURIComponent(id)}?autoplay=${autoplay}&rel=0`; - return this.sanitizer.bypassSecurityTrustResourceUrl(url); - }); - - constructor(private sanitizer: DomSanitizer) { - super(); - } -} diff --git a/samples/client/angular/projects/rizzcharts/src/app/app.config.server.ts b/samples/client/angular/projects/rizzcharts/src/app/app.config.server.ts deleted file mode 100644 index 3f3c547199..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/app/app.config.server.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {mergeApplicationConfig, ApplicationConfig} from '@angular/core'; -import {provideServerRendering, withRoutes} from '@angular/ssr'; -import {appConfig} from './app.config'; -import {serverRoutes} from './app.routes.server'; - -const serverConfig: ApplicationConfig = { - providers: [provideServerRendering(withRoutes(serverRoutes))], -}; - -export const config = mergeApplicationConfig(appConfig, serverConfig); diff --git a/samples/client/angular/projects/rizzcharts/src/app/app.config.ts b/samples/client/angular/projects/rizzcharts/src/app/app.config.ts deleted file mode 100644 index d1bd293ac9..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/app/app.config.ts +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - configureChatCanvasFeatures, - usingA2aService, - usingA2uiRenderers, - usingMarkdownRenderer, -} from '@a2a_chat_canvas/config'; -import { - ApplicationConfig, - provideBrowserGlobalErrorListeners, - provideZonelessChangeDetection, -} from '@angular/core'; -import {provideRouter} from '@angular/router'; -import {RIZZ_CHARTS_CATALOG} from '@rizzcharts/a2ui-catalog/catalog'; -import {provideCharts, withDefaultRegisterables} from 'ng2-charts'; -import {A2aService} from '../services/a2a_service'; -import {RizzchartsMarkdownRendererService} from '../services/markdown-renderer.service'; -import {theme} from './theme'; - -import {provideClientHydration, withEventReplay} from '@angular/platform-browser'; -import {routes} from './app.routes'; -import {provideMarkdownRenderer} from '@a2ui/angular'; -import {renderMarkdown} from '@a2ui/markdown-it'; - -export const appConfig: ApplicationConfig = { - providers: [ - provideBrowserGlobalErrorListeners(), - provideZonelessChangeDetection(), - provideRouter(routes), - provideClientHydration(withEventReplay()), - provideCharts(withDefaultRegisterables()), - provideMarkdownRenderer(renderMarkdown), - configureChatCanvasFeatures( - usingA2aService(A2aService), - usingA2uiRenderers(RIZZ_CHARTS_CATALOG, theme), - usingMarkdownRenderer(RizzchartsMarkdownRendererService), - ), - ], -}; diff --git a/samples/client/angular/projects/rizzcharts/src/app/app.html b/samples/client/angular/projects/rizzcharts/src/app/app.html deleted file mode 100644 index 5ce1d071b8..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/app/app.html +++ /dev/null @@ -1,63 +0,0 @@ - - -
- - - -
-
-
-
- Rizz agent icon -
-
-
- {{ agentName() }} -
-
-
- -

- I help you understand and visualize sales pipelines and analyze customer performance data. -

-
- - - -
-
-
-
- - diff --git a/samples/client/angular/projects/rizzcharts/src/app/app.routes.server.ts b/samples/client/angular/projects/rizzcharts/src/app/app.routes.server.ts deleted file mode 100644 index 417bd7b43d..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/app/app.routes.server.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {RenderMode, ServerRoute} from '@angular/ssr'; - -export const serverRoutes: ServerRoute[] = [ - { - path: '**', - renderMode: RenderMode.Prerender, - }, -]; diff --git a/samples/client/angular/projects/rizzcharts/src/app/app.routes.ts b/samples/client/angular/projects/rizzcharts/src/app/app.routes.ts deleted file mode 100644 index 1cbd92c87a..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/app/app.routes.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {Routes} from '@angular/router'; - -export const routes: Routes = []; diff --git a/samples/client/angular/projects/rizzcharts/src/app/app.scss b/samples/client/angular/projects/rizzcharts/src/app/app.scss deleted file mode 100644 index abfa95cbde..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/app/app.scss +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -main { - height: calc(100vh - 64px); -} - -.empty-history { - display: block; - padding-bottom: 8rem; - background-image: url('/Gradient.png'); - background-size: contain; - background-repeat: no-repeat; - background-position-y: bottom; - background-position-x: right; -} - -.empty-history-text { - margin: 0; - font: var(--mat-sys-display-small); - // These values are not from the spec, but UX wants them for the gradient. - background: linear-gradient(90deg, #217bfe 28.03%, #078efb 49.56%, #ac87eb 71.1%); - background-clip: text; - color: transparent; -} - -.chat-history-items { - width: 100%; - height: 100%; - box-sizing: border-box; -} - -.chat-history-message-container { - width: 100%; - margin-block-end: 1rem; -} - -.turn-container { - width: 100%; - box-sizing: border-box; - - &:last-of-type { - // Using min-height ensures that the size is 100% plus the padding. - min-height: 100%; - padding-block-end: 56px; - } -} - -.large-icon { - width: 32px; - height: 32px; - font-size: 32px; - border-radius: var(--mat-sys-corner-extra-large); - vertical-align: top; -} - -.agent-header { - display: flex; - align-items: center; - flex-flow: row wrap; -} -.agent-header-part { - margin-inline-end: 1.25rem; - margin-block: 8px; -} - -.suggestion-chips { - display: flex; - flex-wrap: wrap; - gap: 8px; - justify-content: center; - margin-top: 32px; -} - -.chip { - // Override Material button styles to look like a chip - border-radius: 100px !important; // Force pill shape - padding: 10px 16px !important; - display: inline-flex !important; - align-items: center !important; - height: auto !important; - line-height: 25px !important; // Match icon height - .material-icons-outlined { - font-size: 20px; - margin-right: 8px; - line-height: 1; // Prevent icon from affecting line height - position: relative; - top: 4px; // Move icon down slightly to match text - } -} diff --git a/samples/client/angular/projects/rizzcharts/src/app/app.spec.ts b/samples/client/angular/projects/rizzcharts/src/app/app.spec.ts deleted file mode 100644 index 9c32d234fe..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/app/app.spec.ts +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {provideZonelessChangeDetection, signal} from '@angular/core'; -import {TestBed} from '@angular/core/testing'; -import {ChatService} from '@a2a_chat_canvas/services/chat-service'; -import {A2aService} from '@rizzcharts/services/a2a_service'; - -import {App} from './app'; - -describe('App', () => { - let mockChatService: any; - let mockA2aService: any; - - beforeEach(async () => { - mockChatService = { - sendMessage: jasmine.createSpy('sendMessage'), - history: signal([]), - isA2aStreamOpen: signal(false), - }; - - mockA2aService = { - getAgentCard: jasmine - .createSpy('getAgentCard') - .and.returnValue(Promise.resolve({name: 'Mock Agent'})), - }; - - await TestBed.configureTestingModule({ - imports: [App], - providers: [ - provideZonelessChangeDetection(), - {provide: ChatService, useValue: mockChatService}, - {provide: A2aService, useValue: mockA2aService}, - ], - }).compileComponents(); - }); - - it('should create the app', () => { - const fixture = TestBed.createComponent(App); - const app = fixture.componentInstance; - expect(app).toBeTruthy(); - }); - - it('should render agent name', async () => { - const fixture = TestBed.createComponent(App); - fixture.detectChanges(); - await fixture.whenStable(); - fixture.detectChanges(); - const compiled = fixture.nativeElement as HTMLElement; - expect(compiled.querySelector('.agent-name')?.textContent).toContain('Mock Agent'); - }); -}); diff --git a/samples/client/angular/projects/rizzcharts/src/app/app.ts b/samples/client/angular/projects/rizzcharts/src/app/app.ts deleted file mode 100644 index 991366344e..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/app/app.ts +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - ChangeDetectionStrategy, - Component, - Inject, - OnInit, - Renderer2, - inject, - signal, -} from '@angular/core'; -import {DOCUMENT} from '@angular/common'; -import {RouterOutlet} from '@angular/router'; -import {MatButtonModule} from '@angular/material/button'; -import {A2aChatCanvas} from '@a2a_chat_canvas/a2a-chat-canvas'; -import {ChatService} from '@a2a_chat_canvas/services/chat-service'; -import {Toolbar} from '@rizzcharts/components/toolbar/toolbar'; -import {environment} from '@rizzcharts/environments/environment'; -import {A2aService} from '@rizzcharts/services/a2a_service'; - -@Component({ - selector: 'app-root', - imports: [A2aChatCanvas, RouterOutlet, Toolbar, MatButtonModule], - templateUrl: './app.html', - styleUrl: './app.scss', - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class App implements OnInit { - protected readonly agentName = signal(''); - readonly chatService = inject(ChatService); - private readonly a2aService = inject(A2aService); - - constructor( - private _renderer2: Renderer2, - @Inject(DOCUMENT) private _document: Document, - ) {} - - ngOnInit() { - const script = this._renderer2.createElement('script'); - script.src = `https://maps.googleapis.com/maps/api/js?key=${environment.googleMapsApiKey}&callback=initMap&libraries=marker`; - script.async = true; - script.defer = true; - this._renderer2.appendChild(this._document.body, script); - this.a2aService.getAgentCard().then(card => { - this.agentName.set(card.name); - }); - } - - sendMessage(text: string) { - this.chatService.sendMessage(text); - } -} diff --git a/samples/client/angular/projects/rizzcharts/src/app/theme.ts b/samples/client/angular/projects/rizzcharts/src/app/theme.ts deleted file mode 100644 index 54f1d383db..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/app/theme.ts +++ /dev/null @@ -1,375 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as Styles from '@a2ui/web_core/styles/index'; -import * as Types from '@a2ui/web_core/types/types'; - -/** Elements */ - -const a = { - 'typography-f-sf': true, - 'typography-fs-n': true, - 'typography-w-500': true, - 'layout-as-n': true, - 'layout-dis-iflx': true, - 'layout-al-c': true, -}; - -const audio = { - 'layout-w-100': true, -}; - -const body = { - 'typography-f-s': true, - 'typography-fs-n': true, - 'typography-w-400': true, - 'layout-mt-0': true, - 'layout-mb-2': true, - 'typography-sz-bm': true, - 'color-c-n10': true, -}; - -const button = { - 'typography-f-sf': true, - 'typography-fs-n': true, - 'typography-w-500': true, - 'layout-pt-3': true, - 'layout-pb-3': true, - 'layout-pl-5': true, - 'layout-pr-5': true, - 'layout-mb-1': true, - 'border-br-16': true, - 'border-bw-0': true, - 'border-c-n70': true, - 'border-bs-s': true, - 'color-bgc-s30': true, - 'color-c-n100': true, - 'behavior-ho-80': true, -}; - -const heading = { - 'typography-f-sf': true, - 'typography-fs-n': true, - 'typography-w-500': true, - 'layout-mt-0': true, - 'layout-mb-2': true, - 'color-c-n10': true, -}; - -const h1 = { - ...heading, - 'typography-sz-tl': true, -}; - -const h2 = { - ...heading, - 'typography-sz-tm': true, -}; - -const h3 = { - ...heading, - 'typography-sz-ts': true, -}; - -const iframe = { - 'behavior-sw-n': true, -}; - -const input = { - 'typography-f-sf': true, - 'typography-fs-n': true, - 'typography-w-400': true, - 'layout-pl-4': true, - 'layout-pr-4': true, - 'layout-pt-2': true, - 'layout-pb-2': true, - 'border-br-6': true, - 'border-bw-1': true, - 'color-bc-s70': true, - 'border-bs-s': true, - 'layout-as-n': true, - 'color-c-n10': true, -}; - -const p = { - 'typography-f-s': true, - 'typography-fs-n': true, - 'typography-w-400': true, - 'layout-m-0': true, - 'typography-sz-bm': true, - 'layout-as-n': true, - 'color-c-n10': true, -}; - -const orderedList = { - 'typography-f-s': true, - 'typography-fs-n': true, - 'typography-w-400': true, - 'layout-m-0': true, - 'typography-sz-bm': true, - 'layout-as-n': true, -}; - -const unorderedList = { - 'typography-f-s': true, - 'typography-fs-n': true, - 'typography-w-400': true, - 'layout-m-0': true, - 'typography-sz-bm': true, - 'layout-as-n': true, -}; - -const listItem = { - 'typography-f-s': true, - 'typography-fs-n': true, - 'typography-w-400': true, - 'layout-m-0': true, - 'typography-sz-bm': true, - 'layout-as-n': true, -}; - -const pre = { - 'typography-f-c': true, - 'typography-fs-n': true, - 'typography-w-400': true, - 'typography-sz-bm': true, - 'typography-ws-p': true, - 'layout-as-n': true, -}; - -const textarea = { - ...input, - 'layout-r-none': true, - 'layout-fs-c': true, -}; - -const video = { - 'layout-el-cv': true, -}; - -const aLight = Styles.merge(a, {'color-c-n5': true}); -const inputLight = Styles.merge(input, {'color-c-n5': true}); -const textareaLight = Styles.merge(textarea, {'color-c-n5': true}); -const buttonLight = Styles.merge(button, {'color-c-n100': true}); -const h1Light = Styles.merge(h1, {'color-c-n5': true}); -const h2Light = Styles.merge(h2, {'color-c-n5': true}); -const h3Light = Styles.merge(h3, {'color-c-n5': true}); -const bodyLight = Styles.merge(body, {'color-c-n5': true}); -const pLight = Styles.merge(p, {'color-c-n35': true}); -const preLight = Styles.merge(pre, {'color-c-n35': true}); -const orderedListLight = Styles.merge(orderedList, { - 'color-c-n35': true, -}); -const unorderedListLight = Styles.merge(unorderedList, { - 'color-c-n35': true, -}); -const listItemLight = Styles.merge(listItem, { - 'color-c-n35': true, -}); - -export const theme: Types.Theme = { - additionalStyles: { - Button: { - '--n-35': 'var(--n-100)', - }, - }, - components: { - AudioPlayer: {}, - Button: { - 'layout-pt-2': true, - 'layout-pb-2': true, - 'layout-pl-3': true, - 'layout-pr-3': true, - 'border-br-12': true, - 'border-bw-0': true, - 'border-bs-s': true, - 'color-bgc-p30': true, - 'color-c-n100': true, - 'behavior-ho-70': true, - }, - Card: {'border-br-9': true, 'color-bgc-p100': true, 'layout-p-4': true}, - CheckBox: { - element: { - 'layout-m-0': true, - 'layout-mr-2': true, - 'layout-p-2': true, - 'border-br-12': true, - 'border-bw-1': true, - 'border-bs-s': true, - 'color-bgc-p100': true, - 'color-bc-p60': true, - 'color-c-n30': true, - 'color-c-p30': true, - }, - label: { - 'color-c-p30': true, - 'typography-f-sf': true, - 'typography-v-r': true, - 'typography-w-400': true, - 'layout-flx-1': true, - 'typography-sz-ll': true, - }, - container: { - 'layout-dsp-iflex': true, - 'layout-al-c': true, - }, - }, - Column: { - 'layout-g-2': true, - }, - DateTimeInput: { - container: {}, - label: {}, - element: { - 'layout-pt-2': true, - 'layout-pb-2': true, - 'layout-pl-3': true, - 'layout-pr-3': true, - 'border-br-12': true, - 'border-bw-1': true, - 'border-bs-s': true, - 'color-bgc-p100': true, - 'color-bc-p60': true, - 'color-c-n30': true, - 'color-c-p30': true, - }, - }, - Divider: {}, - Image: { - all: { - 'border-br-5': true, - 'layout-el-cv': true, - 'layout-w-100': true, - 'layout-h-100': true, - }, - avatar: {}, - header: {}, - icon: {}, - largeFeature: {}, - mediumFeature: {}, - smallFeature: {}, - }, - Icon: {}, - List: { - 'layout-g-4': true, - 'layout-p-2': true, - }, - Modal: { - backdrop: {'color-bbgc-p60_20': true}, - element: { - 'border-br-2': true, - 'color-bgc-p100': true, - 'layout-p-4': true, - 'border-bw-1': true, - 'border-bs-s': true, - 'color-bc-p80': true, - }, - }, - MultipleChoice: { - container: {}, - label: {}, - element: {}, - }, - Row: { - 'layout-g-4': true, - }, - Slider: { - container: {}, - label: {}, - element: {}, - }, - Tabs: { - container: {}, - controls: {all: {}, selected: {}}, - element: {}, - }, - Text: { - all: { - 'layout-w-100': true, - 'layout-g-2': true, - 'color-c-p30': true, - }, - h1: {}, - h2: {}, - h3: {}, - h4: {}, - h5: {}, - caption: {}, - body: {}, - }, - TextField: { - container: { - 'typography-sz-bm': true, - 'layout-w-100': true, - 'layout-g-2': true, - 'layout-dsp-flexhor': true, - 'layout-al-c': true, - }, - label: { - 'layout-flx-0': true, - }, - element: { - 'typography-sz-bm': true, - 'layout-pt-2': true, - 'layout-pb-2': true, - 'layout-pl-3': true, - 'layout-pr-3': true, - 'border-br-12': true, - 'border-bw-1': true, - 'border-bs-s': true, - 'color-bgc-p100': true, - 'color-bc-p60': true, - 'color-c-n30': true, - 'color-c-p30': true, - }, - }, - Video: { - 'border-br-5': true, - 'layout-el-cv': true, - }, - }, - elements: { - a: aLight, - audio, - body: bodyLight, - button: buttonLight, - h1: h1Light, - h2: h2Light, - h3: h3Light, - h4: {}, - h5: {}, - iframe, - input: inputLight, - p: pLight, - pre: preLight, - textarea: textareaLight, - video, - }, - markdown: { - p: [...Object.keys(pLight)], - h1: [...Object.keys(h1Light)], - h2: [...Object.keys(h2Light)], - h3: [...Object.keys(h3Light)], - h4: [], - h5: [], - ul: [...Object.keys(unorderedListLight)], - ol: [...Object.keys(orderedListLight)], - li: [...Object.keys(listItemLight)], - a: [...Object.keys(aLight)], - strong: [], - em: [], - }, -}; diff --git a/samples/client/angular/projects/rizzcharts/src/components/toolbar/toolbar.html b/samples/client/angular/projects/rizzcharts/src/components/toolbar/toolbar.html deleted file mode 100644 index ec78476ec5..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/components/toolbar/toolbar.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - A2UI Component Catalog - - @for (option of catalogs; track option) { - {{ option.viewValue }} - } - - - - - - diff --git a/samples/client/angular/projects/rizzcharts/src/components/toolbar/toolbar.scss b/samples/client/angular/projects/rizzcharts/src/components/toolbar/toolbar.scss deleted file mode 100644 index 3f64870208..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/components/toolbar/toolbar.scss +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2025 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -.example-spacer { - flex: 1 1 auto; -} - -.logo { -} - -.profile-photo { - width: 40px; - height: 40px; - font-size: 40px; - border-radius: var(--mat-sys-corner-extra-large); - vertical-align: top; - margin-right: 0.5rem; -} - -.logo-dark { - display: block; - height: 50px; -} - -.logo-light { - display: none; - height: 24px; - margin-left: 20px; -} - -@media (prefers-color-scheme: dark) { - .logo-light { - display: block; - } - - .logo-dark { - display: none; - } -} - -mat-toolbar { - background-color: transparent; -} - -mat-form-field { - width: 350px; -} diff --git a/samples/client/angular/projects/rizzcharts/src/components/toolbar/toolbar.spec.ts b/samples/client/angular/projects/rizzcharts/src/components/toolbar/toolbar.spec.ts deleted file mode 100644 index 12bd46f70e..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/components/toolbar/toolbar.spec.ts +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {ComponentFixture, TestBed} from '@angular/core/testing'; - -import {Toolbar} from './toolbar'; - -describe('Toolbar', () => { - let component: Toolbar; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [Toolbar], - }).compileComponents(); - - fixture = TestBed.createComponent(Toolbar); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/samples/client/angular/projects/rizzcharts/src/components/toolbar/toolbar.ts b/samples/client/angular/projects/rizzcharts/src/components/toolbar/toolbar.ts deleted file mode 100644 index bbf4e1032a..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/components/toolbar/toolbar.ts +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {inject, Component, ChangeDetectionStrategy} from '@angular/core'; -import {CatalogService} from '../../services/catalog_service'; -import {MatButtonModule} from '@angular/material/button'; -import {MatIconModule} from '@angular/material/icon'; -import {MatToolbarModule} from '@angular/material/toolbar'; - -import {MatInputModule} from '@angular/material/input'; -import {MatSelectModule} from '@angular/material/select'; -import {MatFormFieldModule} from '@angular/material/form-field'; -import {FormsModule} from '@angular/forms'; - -@Component({ - selector: 'app-toolbar', - imports: [ - MatButtonModule, - MatIconModule, - MatToolbarModule, - MatSelectModule, - MatFormFieldModule, - MatInputModule, - FormsModule, - ], - templateUrl: './toolbar.html', - styleUrl: './toolbar.scss', - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class Toolbar { - catalogService = inject(CatalogService); - selectedCatalogs: string[] = []; - - catalogs = [ - { - value: 'https://a2ui.org/specification/v0_8/standard_catalog_definition.json', - viewValue: 'Standard', - }, - { - value: - 'https://github.com/a2ui-project/a2ui/blob/main/samples/agent/adk/rizzcharts/rizzcharts_catalog_definition.json', - viewValue: 'Rizzcharts Custom', - }, - ]; - - ngOnInit() { - this.selectedCatalogs = this.catalogs.map(c => c.value); - this.updateCatalogService(); - } - - updateCatalogService() { - this.catalogService.catalogUris = this.selectedCatalogs; - } -} diff --git a/samples/client/angular/projects/rizzcharts/src/environments/environment.ts b/samples/client/angular/projects/rizzcharts/src/environments/environment.ts deleted file mode 100644 index eb25a48faa..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/environments/environment.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export const environment = { - googleMapsApiKey: 'YOUR_API_KEY_HERE', -}; diff --git a/samples/client/angular/projects/rizzcharts/src/index.html b/samples/client/angular/projects/rizzcharts/src/index.html deleted file mode 100644 index 5355f072aa..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/index.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - RIZZCharts - - - - - - - - - - - diff --git a/samples/client/angular/projects/rizzcharts/src/main.server.ts b/samples/client/angular/projects/rizzcharts/src/main.server.ts deleted file mode 100644 index 5bad09f44e..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/main.server.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {BootstrapContext, bootstrapApplication} from '@angular/platform-browser'; -import {App} from './app/app'; -import {config} from './app/app.config.server'; - -const bootstrap = (context: BootstrapContext) => bootstrapApplication(App, config, context); - -export default bootstrap; diff --git a/samples/client/angular/projects/rizzcharts/src/main.ts b/samples/client/angular/projects/rizzcharts/src/main.ts deleted file mode 100644 index 796e8b29ee..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/main.ts +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {bootstrapApplication} from '@angular/platform-browser'; -import {appConfig} from './app/app.config'; -import {App} from './app/app'; -import {Chart, registerables} from 'chart.js'; -import ChartDataLabels from 'chartjs-plugin-datalabels'; - -Chart.register(...registerables, ChartDataLabels); - -bootstrapApplication(App, appConfig).catch(err => console.error(err)); diff --git a/samples/client/angular/projects/rizzcharts/src/pipes/markdown.pipe.spec.ts b/samples/client/angular/projects/rizzcharts/src/pipes/markdown.pipe.spec.ts deleted file mode 100644 index a40eb172db..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/pipes/markdown.pipe.spec.ts +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {TestBed} from '@angular/core/testing'; -import {DomSanitizer} from '@angular/platform-browser'; -import {MarkdownPipe} from './markdown.pipe'; - -describe('MarkdownPipe', () => { - let pipe: MarkdownPipe; - let _sanitizer: DomSanitizer; - - beforeEach(() => { - TestBed.configureTestingModule({ - providers: [ - MarkdownPipe, - { - provide: DomSanitizer, - useValue: { - bypassSecurityTrustHtml: (val: string) => val, - }, - }, - ], - }); - pipe = TestBed.inject(MarkdownPipe); - _sanitizer = TestBed.inject(DomSanitizer); - }); - - it('create an instance', () => { - expect(pipe).toBeTruthy(); - }); - - it('should render markdown to html', () => { - const markdown = '**bold**'; - const result = pipe.transform(markdown); - expect(result).toContain('bold'); - }); - - it('should open links in new tab', () => { - const markdown = '[link](http://example.com)'; - const result = pipe.transform(markdown); - expect(result).toContain('target="_blank"'); - expect(result).toContain('rel="noopener noreferrer"'); - }); -}); diff --git a/samples/client/angular/projects/rizzcharts/src/pipes/markdown.pipe.ts b/samples/client/angular/projects/rizzcharts/src/pipes/markdown.pipe.ts deleted file mode 100644 index abc6b39328..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/pipes/markdown.pipe.ts +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {Pipe, PipeTransform, inject} from '@angular/core'; -import {DomSanitizer, SafeHtml} from '@angular/platform-browser'; -import markdownit from 'markdown-it'; - -@Pipe({name: 'markdown'}) -export class MarkdownPipe implements PipeTransform { - private readonly sanitizer = inject(DomSanitizer); - private readonly md = markdownit({ - html: false, - linkify: true, - typographer: true, - }); - - constructor() { - this.configureRenderer(); - } - - transform(value: string | null | undefined): SafeHtml { - if (!value) { - return ''; - } - const rendered = this.md.render(value); - return this.sanitizer.bypassSecurityTrustHtml(rendered); - } - - private configureRenderer() { - // Open links in new tab - const defaultLinkOpenRender = - this.md.renderer.rules['link_open'] || - ((tokens, idx, options, env, self) => self.renderToken(tokens, idx, options)); - - this.md.renderer.rules['link_open'] = (tokens, idx, options, env, self) => { - const token = tokens[idx]; - token.attrSet('target', '_blank'); - token.attrSet('rel', 'noopener noreferrer'); - return defaultLinkOpenRender(tokens, idx, options, env, self); - }; - } -} diff --git a/samples/client/angular/projects/rizzcharts/src/server.ts b/samples/client/angular/projects/rizzcharts/src/server.ts deleted file mode 100644 index c4cc3f8c8d..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/server.ts +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - AngularNodeAppEngine, - createNodeRequestHandler, - isMainModule, - writeResponseToNodeResponse, -} from '@angular/ssr/node'; -import express from 'express'; -import {join} from 'node:path'; -import {v4 as uuidv4} from 'uuid'; -import {A2AClient} from '@a2a-js/sdk/client'; -import {MessageSendParams, Part} from '@a2a-js/sdk'; - -const browserDistFolder = join(import.meta.dirname, '../browser'); -const app = express(); -const angularApp = new AngularNodeAppEngine(); -let client: A2AClient | null = null; - -app.use( - express.static(browserDistFolder, { - maxAge: '1y', - index: false, - redirect: false, - }), -); - -app.post('/a2a', (req, res) => { - let originalBody = ''; - - req.on('data', chunk => { - originalBody += chunk.toString(); - }); - - req.on('end', async () => { - const data = JSON.parse(originalBody); - - console.log('[a2a-middleware] Received data:', originalBody); - - const parts: Part[] = data['parts']; - const metadata: Record = data['metadata']; - const contextId: string | undefined = data['contextId']; - - const sendParams: MessageSendParams = { - message: { - messageId: uuidv4(), - contextId, - role: 'user', - parts, - kind: 'message', - metadata: metadata, - }, - }; - - const client = await createOrGetClient(); - const response = await client.sendMessage(sendParams); - - res.set('Cache-Control', 'no-store'); - - if ('error' in response) { - console.error('Error:', response.error.message); - res.status(500).json({error: response.error.message}); - return; - } - - res.json(response); - }); -}); - -app.get('/a2a/agent-card', async (req, res) => { - try { - const response = await fetchWithCustomHeader( - 'http://localhost:10002/.well-known/agent-card.json', - ); - if (!response.ok) { - res.status(response.status).json({error: 'Failed to fetch agent card'}); - return; - } - const card = await response.json(); - res.json(card); - } catch (error) { - console.error('Error fetching agent card:', error); - res.status(500).json({error: 'Internal server error'}); - } -}); - -app.use((req, res, next) => { - angularApp - .handle(req) - .then(response => (response ? writeResponseToNodeResponse(response, res) : next())) - .catch(next); -}); - -if (isMainModule(import.meta.url) || process.env['pm_id']) { - const port = process.env['PORT'] || 4000; - app.listen(port, error => { - if (error) { - throw error; - } - - console.log(`Node Express server listening on http://localhost:${port}`); - }); -} - -async function fetchWithCustomHeader(url: string | URL | Request, init?: RequestInit) { - const headers = new Headers(init?.headers); - headers.set('X-A2A-Extensions', 'https://a2ui.org/a2a-extension/a2ui/v0.8'); - const newInit = {...init, headers}; - return fetch(url, newInit); -} - -async function createOrGetClient() { - // Create a client pointing to the agent's Agent Card URL. - client ??= await A2AClient.fromCardUrl('http://localhost:10002/.well-known/agent-card.json', { - fetchImpl: fetchWithCustomHeader, - }); - - return client; -} - -function _isJson(str: string): boolean { - try { - const parsed = JSON.parse(str); - return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed); - } catch (err) { - console.warn(err); - return false; - } -} - -export const reqHandler = createNodeRequestHandler(app); diff --git a/samples/client/angular/projects/rizzcharts/src/services/a2a_service.ts b/samples/client/angular/projects/rizzcharts/src/services/a2a_service.ts deleted file mode 100644 index 3bb72e6398..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/services/a2a_service.ts +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {AgentCard, Part, SendMessageSuccessResponse} from '@a2a-js/sdk'; -import {A2aService as A2aServiceInterface} from '@a2a_chat_canvas/interfaces/a2a-service'; -import {Inject, Injectable, PLATFORM_ID} from '@angular/core'; -import {isPlatformBrowser} from '@angular/common'; -import {CatalogService} from './catalog_service'; - -@Injectable({providedIn: 'root'}) -export class A2aService implements A2aServiceInterface { - private contextId?: string; - private isBrowser: boolean; - - constructor( - @Inject(PLATFORM_ID) platformId: object, - private catalogService: CatalogService, - ) { - this.isBrowser = isPlatformBrowser(platformId); - } - - async sendMessage(parts: Part[], signal?: AbortSignal): Promise { - const currentCatalogUris = this.catalogService.catalogUris; - console.log('Attaching supported A2UI catalogs to message: ', currentCatalogUris); - const response = await fetch('/a2a', { - body: JSON.stringify({ - parts: parts, - metadata: { - a2uiClientCapabilities: { - supportedCatalogIds: currentCatalogUris, - }, - }, - contextId: this.contextId, - }), - method: 'POST', - signal, - }); - - if (response.ok) { - const json = (await response.json()) as SendMessageSuccessResponse & {contextId?: string}; - if (json.contextId || json.result?.contextId) { - this.contextId = json.contextId || json.result?.contextId; - } - return json; - } - - const error = (await response.json()) as {error: string}; - throw new Error(error.error); - } - - async getAgentCard(): Promise { - if (!this.isBrowser) { - return {iconUrl: 'rizz-agent.png'} as AgentCard; - } - const response = await fetch('/a2a/agent-card'); - if (!response.ok) { - throw new Error('Failed to fetch agent card'); - } - const card = (await response.json()) as AgentCard; - // Override iconUrl to use local asset - card.iconUrl = 'rizz-agent.png'; - return card; - } -} diff --git a/samples/client/angular/projects/rizzcharts/src/services/catalog_service.ts b/samples/client/angular/projects/rizzcharts/src/services/catalog_service.ts deleted file mode 100644 index dafb4a64a9..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/services/catalog_service.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {Injectable} from '@angular/core'; - -@Injectable({providedIn: 'root'}) -export class CatalogService { - public catalogUris: string[] = []; -} diff --git a/samples/client/angular/projects/rizzcharts/src/services/markdown-renderer.service.spec.ts b/samples/client/angular/projects/rizzcharts/src/services/markdown-renderer.service.spec.ts deleted file mode 100644 index 5d598d9462..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/services/markdown-renderer.service.spec.ts +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {TestBed} from '@angular/core/testing'; -import {DomSanitizer} from '@angular/platform-browser'; -import {RizzchartsMarkdownRendererService} from './markdown-renderer.service'; - -describe('RizzchartsMarkdownRendererService', () => { - let service: RizzchartsMarkdownRendererService; - - beforeEach(() => { - TestBed.configureTestingModule({ - providers: [ - RizzchartsMarkdownRendererService, - { - provide: DomSanitizer, - useValue: { - bypassSecurityTrustHtml: (val: string) => val, - }, - }, - ], - }); - service = TestBed.inject(RizzchartsMarkdownRendererService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); - - it('should render markdown to html', async () => { - const markdown = '**bold**'; - const result = await service.render(markdown); - expect(result).toContain('bold'); - }); - - it('should open links in new tab', async () => { - const markdown = '[link](http://example.com)'; - const result = await service.render(markdown); - expect(result).toContain('target="_blank"'); - expect(result).toContain('rel="noopener noreferrer"'); - }); -}); diff --git a/samples/client/angular/projects/rizzcharts/src/services/markdown-renderer.service.ts b/samples/client/angular/projects/rizzcharts/src/services/markdown-renderer.service.ts deleted file mode 100644 index 3b5fab7725..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/services/markdown-renderer.service.ts +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {MarkdownRendererService} from '@a2a_chat_canvas/interfaces/markdown-renderer-service'; -import {inject, Injectable} from '@angular/core'; -import {DomSanitizer, SafeHtml} from '@angular/platform-browser'; -import markdownit from 'markdown-it'; - -@Injectable({ - providedIn: 'root', -}) -export class RizzchartsMarkdownRendererService implements MarkdownRendererService { - private readonly sanitizer = inject(DomSanitizer); - private readonly md = markdownit({ - html: false, - linkify: true, - typographer: true, - }); - - constructor() { - this.configureRenderer(); - } - - render(markdown: string): Promise { - const rendered = this.md.render(markdown); - return Promise.resolve(this.sanitizer.bypassSecurityTrustHtml(rendered)); - } - - private configureRenderer() { - // Open links in new tab - const defaultLinkOpenRender = - this.md.renderer.rules['link_open'] || - ((tokens, idx, options, env, self) => self.renderToken(tokens, idx, options)); - - this.md.renderer.rules['link_open'] = (tokens, idx, options, env, self) => { - const token = tokens[idx]; - token.attrSet('target', '_blank'); - token.attrSet('rel', 'noopener noreferrer'); - return defaultLinkOpenRender(tokens, idx, options, env, self); - }; - } -} diff --git a/samples/client/angular/projects/rizzcharts/src/styles.scss b/samples/client/angular/projects/rizzcharts/src/styles.scss deleted file mode 100644 index 7238c36f68..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/styles.scss +++ /dev/null @@ -1,207 +0,0 @@ -// Copyright 2025 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// You can add global styles to this file, and also import other style files -@use '@angular/material' as mat; - -@mixin styled-scrollbar { - ::-webkit-scrollbar { - width: 0.5rem; - height: 0.5rem; - background: transparent; - } - - ::-webkit-scrollbar-track { - background: var(--mat-sys-container-low); - border-radius: 0.25rem; - } - - ::-webkit-scrollbar-thumb { - background: var(--mat-sys-outline-variant); - border-radius: 0.25rem; - } - - ::-webkit-scrollbar-thumb:hover { - background: var(--mat-sys-outline); - } -} - -html { - color-scheme: light dark; - @include mat.theme( - ( - color: mat.$blue-palette, - typography: Roboto, - density: 0, - ) - ); - - @include styled-scrollbar; -} - -:root { - --n-100: #ffffff; - --n-99: #fcfcfc; - --n-98: #f9f9f9; - --n-95: #f1f1f1; - --n-90: #e2e2e2; - --n-80: #c6c6c6; - --n-70: #ababab; - --n-60: #919191; - --n-50: #777777; - --n-40: #5e5e5e; - --n-35: #525252; - --n-30: #474747; - --n-25: #3b3b3b; - --n-20: #303030; - --n-15: #262626; - --n-10: #1b1b1b; - --n-5: #111111; - --n-0: #000000; - - --p-100: #ffffff; - --p-99: #fffbff; - --p-98: #fcf8ff; - --p-95: #f2efff; - --p-90: #e1e0ff; - --p-80: #c0c1ff; - --p-70: #a0a3ff; - --p-60: #8487ea; - --p-50: #6a6dcd; - --p-40: #5154b3; - --p-35: #4447a6; - --p-30: #383b99; - --p-25: #2c2e8d; - --p-20: #202182; - --p-15: #131178; - --p-10: #06006c; - --p-5: #03004d; - --p-0: #000000; - - --s-100: #ffffff; - --s-99: #fffbff; - --s-98: #fcf8ff; - --s-95: #f2efff; - --s-90: #e2e0f9; - --s-80: #c6c4dd; - --s-70: #aaa9c1; - --s-60: #8f8fa5; - --s-50: #75758b; - --s-40: #5d5c72; - --s-35: #515165; - --s-30: #454559; - --s-25: #393a4d; - --s-20: #2e2f42; - --s-15: #242437; - --s-10: #191a2c; - --s-5: #0f0f21; - --s-0: #000000; - - --t-100: #ffffff; - --t-99: #fffbff; - --t-98: #fff8f9; - --t-95: #ffecf4; - --t-90: #ffd8ec; - --t-80: #e9b9d3; - --t-70: #cc9eb8; - --t-60: #af849d; - --t-50: #946b83; - --t-40: #79536a; - --t-35: #6c475d; - --t-30: #5f3c51; - --t-25: #523146; - --t-20: #46263a; - --t-15: #3a1b2f; - --t-10: #2e1125; - --t-5: #22071a; - --t-0: #000000; - - --nv-100: #ffffff; - --nv-99: #fffbff; - --nv-98: #fcf8ff; - --nv-95: #f2effa; - --nv-90: #e4e1ec; - --nv-80: #c8c5d0; - --nv-70: #acaab4; - --nv-60: #918f9a; - --nv-50: #777680; - --nv-40: #5e5d67; - --nv-35: #52515b; - --nv-30: #46464f; - --nv-25: #3b3b43; - --nv-20: #303038; - --nv-15: #25252d; - --nv-10: #1b1b23; - --nv-5: #101018; - --nv-0: #000000; - - --e-100: #ffffff; - --e-99: #fffbff; - --e-98: #fff8f7; - --e-95: #ffedea; - --e-90: #ffdad6; - --e-80: #ffb4ab; - --e-70: #ff897d; - --e-60: #ff5449; - --e-50: #de3730; - --e-40: #ba1a1a; - --e-35: #a80710; - --e-30: #93000a; - --e-25: #7e0007; - --e-20: #690005; - --e-15: #540003; - --e-10: #410002; - --e-5: #2d0001; - --e-0: #000000; - - --primary: #137fec; - --text-color: #fff; - --background-light: #f6f7f8; - --background-dark: #101922; - --border-color: oklch(from var(--background-light) l c h / calc(alpha * 0.15)); - --elevated-background-light: oklch(from var(--background-light) l c h / calc(alpha * 0.05)); - --bb-grid-size: 4px; - --bb-grid-size-2: calc(var(--bb-grid-size) * 2); - --bb-grid-size-3: calc(var(--bb-grid-size) * 3); - --bb-grid-size-4: calc(var(--bb-grid-size) * 4); - --bb-grid-size-5: calc(var(--bb-grid-size) * 5); - --bb-grid-size-6: calc(var(--bb-grid-size) * 6); - --bb-grid-size-7: calc(var(--bb-grid-size) * 7); - --bb-grid-size-8: calc(var(--bb-grid-size) * 8); - --bb-grid-size-9: calc(var(--bb-grid-size) * 9); - --bb-grid-size-10: calc(var(--bb-grid-size) * 10); - --bb-grid-size-11: calc(var(--bb-grid-size) * 11); - --bb-grid-size-12: calc(var(--bb-grid-size) * 12); - --bb-grid-size-13: calc(var(--bb-grid-size) * 13); - --bb-grid-size-14: calc(var(--bb-grid-size) * 14); - --bb-grid-size-15: calc(var(--bb-grid-size) * 15); - --bb-grid-size-16: calc(var(--bb-grid-size) * 16); -} - -* { - box-sizing: border-box; -} - -html, -body { - --font-family: 'Google Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; - --font-family-flex: 'Google Sans Flex', 'Helvetica Neue', Helvetica, Arial, sans-serif; - --font-family-mono: 'Google Sans Code', 'Helvetica Neue', Helvetica, Arial, sans-serif; - - font-family: var(--font-family); - margin: 0; - padding: 0; - width: 100svw; - height: 100svh; -} diff --git a/samples/client/angular/projects/rizzcharts/src/utils/utils.ts b/samples/client/angular/projects/rizzcharts/src/utils/utils.ts deleted file mode 100644 index cfd9eed17d..0000000000 --- a/samples/client/angular/projects/rizzcharts/src/utils/utils.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {Part} from '@a2a-js/sdk'; - -/** - * Returns true if the part is a thought. - * - * @param part The part to check. - * @return True if the part is a thought, false otherwise. - */ -export function isAgentThought(part: Part): boolean { - if (!part.metadata) { - return false; - } - - const metadata = part.metadata as {adk_thought: boolean}; - return metadata.adk_thought; -} diff --git a/samples/client/angular/projects/rizzcharts/tsconfig.app.json b/samples/client/angular/projects/rizzcharts/tsconfig.app.json deleted file mode 100644 index 6c6f9b1d1b..0000000000 --- a/samples/client/angular/projects/rizzcharts/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ -/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "../../out-tsc/app", - "types": ["node"] - }, - "include": ["src/**/*.ts"], - "exclude": ["src/**/*.spec.ts"] -} diff --git a/samples/client/angular/projects/rizzcharts/tsconfig.spec.json b/samples/client/angular/projects/rizzcharts/tsconfig.spec.json deleted file mode 100644 index 43ba0b186a..0000000000 --- a/samples/client/angular/projects/rizzcharts/tsconfig.spec.json +++ /dev/null @@ -1,10 +0,0 @@ -/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ -/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "../../out-tsc/spec", - "types": ["jasmine"] - }, - "include": ["src/**/*.ts"] -} diff --git a/samples/client/angular/tsconfig.json b/samples/client/angular/tsconfig.json index 82d560e639..3ec275872e 100644 --- a/samples/client/angular/tsconfig.json +++ b/samples/client/angular/tsconfig.json @@ -7,9 +7,7 @@ "paths": { "@a2ui/angular-sample-lib": ["./projects/lib/src/public-api.ts"], "@a2ui/angular": ["../../../renderers/angular/dist"], - "@a2ui/angular/*": ["../../../renderers/angular/dist/*"], - "@a2a_chat_canvas/*": ["./projects/a2a-chat-canvas/src/lib/*"], - "@rizzcharts/*": ["./projects/rizzcharts/src/*"] + "@a2ui/angular/*": ["../../../renderers/angular/dist/*"] }, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, @@ -40,15 +38,6 @@ }, { "path": "./projects/restaurant/tsconfig.spec.json" - }, - { - "path": "./projects/rizzcharts/tsconfig.app.json" - }, - { - "path": "./projects/rizzcharts/tsconfig.spec.json" - }, - { - "path": "./projects/gallery/tsconfig.app.json" } ] } diff --git a/samples/client/lit/custom-components-example/.env.example b/samples/client/lit/custom-components-example/.env.example deleted file mode 100644 index cab6d7740e..0000000000 --- a/samples/client/lit/custom-components-example/.env.example +++ /dev/null @@ -1,18 +0,0 @@ -# Configuration for MCP Apps Double-Iframe Sandbox in Production -# INSTRUCTION: Copy the contents of this file to a new file named `.env` in this directory to apply these settings. - -# Example: If your main A2UI GenUI app is hosted at https://app.mycompany.com -# VITE_ALLOWED_HOST_ORIGIN=https://app.mycompany.com - -# Example: Then this MUST be hosted on a separate origin to comply with the MCP double-sandbox spec -# VITE_MCP_SANDBOX_URL=https://sandbox.mycompany.com/sandbox.html - -# ----------------------------------------------------------------------------------------- -# Localhost Development -# ----------------------------------------------------------------------------------------- -# For local development without needing a second server, you can leverage the browser's -# definition of origin isolation by using 127.0.0.1 for the sandbox while the host is localhost. -# By default, the code falls back to this behavior if the variables above are commented out. -# -# VITE_ALLOWED_HOST_ORIGIN=http://localhost:5173 -# VITE_MCP_SANDBOX_URL=http://127.0.0.1:5173/sandbox.html diff --git a/samples/client/lit/custom-components-example/README.md b/samples/client/lit/custom-components-example/README.md deleted file mode 100644 index d06f9f536c..0000000000 --- a/samples/client/lit/custom-components-example/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# A2UI Generator - -This is a UI to generate and visualize A2UI responses. - -## Prerequisites - -1. [nodejs](https://nodejs.org/en) - -## Running - -This sample depends on the Lit renderer. Before running this sample, you need to build the renderer. - -1. **Install and build dependencies:** - From the repository root, install dependencies and build all packages: - - ```bash - yarn install - yarn build:all - ``` - -2. **Run this sample:** - - ```bash - cd samples/client/lit/custom-components-example - ``` - -3. **Run the servers:** - - Run the [A2A server](../../../agent/adk/custom-components-example/) - - By default, the server uses the `McpAppsCustomComponent` which wraps MCP Apps in a secure, isolated double-iframe sandbox (`sandbox.html`) communicating strictly via JSON-RPC. - - Optionally run the server using `USE_MCP_SANDBOX=false uv run .` to bypass this security and use the standard `WebFrame` element. - - **Observing the difference**: Search for "Alex Jordan" in the UI and click the Location button to open the floor plan. If you inspect the DOM using your browser's Developer Tools, you will see that `McpAppsCustomComponent` securely points the iframe `src` to the local proxy (`/sandbox.html`). In contrast, `WebFrame` directly injects the untrusted HTML via a data blob/srcdoc, lacking defense-in-depth origin isolation. - - Run the dev server: `yarn dev` - -After starting the dev server, you can open http://localhost:5173/ to view the sample. - -## Available Custom Components - -This sample showcases several custom components that go beyond standard A2UI rendering: - -- **MCP Apps (`mcp-apps-component.ts`)**: Sandboxed UI widgets using the MCP protocol, communicating securely via a JSON-RPC channel. -- **Secure iFrame Web Frame (`web-frame.ts`)**: Powerful component that allows rendering raw HTML in an isolated context (used for the Office Floor Plan). -- **Org Chart (`org-chart.ts`)**: A custom tree structure visualization component. - -## Mix and Match A2UI Surfaces - -This sample demonstrates how standard A2UI surfaces (such as contact profile cards using standard `Card` and list items) can live on the same canvas as custom extensions. -The A2UI renderer library seamlessly manages the standard component catalog, while custom components (like the Org Chart or iframe-based floor plans) hook into the same event lifecycle. You can swap between standard profile views and rich custom widgets using a unified routing layer. diff --git a/samples/client/lit/custom-components-example/README_CUSTOM_COMPONENTS.md b/samples/client/lit/custom-components-example/README_CUSTOM_COMPONENTS.md deleted file mode 100644 index 46cdc28408..0000000000 --- a/samples/client/lit/custom-components-example/README_CUSTOM_COMPONENTS.md +++ /dev/null @@ -1,74 +0,0 @@ -# A2UI Custom Components & Client Architecture Guide - -This guide explains how the **Contact Client** works in tandem with the **Contact Multiple Surfaces Agent** to define and render rich, custom user interfaces. - -## Client-First Extension Model - -This sample demonstrates a powerful pattern where the **Client** controls the capabilities of the agent: - -1. **Component Definition**: This client defines custom components (`OrgChart`, `WebFrame`) in `ui/custom-components/`. -2. **Schema Generation**: Each custom component has an associated JSON schema. -3. **Handshake**: When connecting to the agent, the client sends these schemas in the `metadata.inlineCatalog` field of the initial request. -4. **Dynamic Support**: This allows _any_ A2UI agent (that supports inline catalogs) to immediately start using these components without prior knowledge. - -## Custom Components Implemented - -### 1. `OrgChart` - -_Located in: `ui/custom-components/org-chart.ts`_ -A visual tree illustrating the organizational hierarchy. - -- **Implementation**: A standard LitElement component. -- **Interaction**: Emits `chart_node_click` events when nodes are clicked, which are sent back to the agent as A2UI Actions. - -### 2. `WebFrame` (Interactive Iframe) - -_Located in: `ui/custom-components/web-frame.ts`_ -A tailored iframe wrapper for embedding external content or static HTML tools. - -- **Use Case**: Used here to render the "Office Floor Plan" map. -- **Security**: Uses `sandbox` attributes to restrict script execution while allowing necessary interactions. -- **Bridge**: Includes a `postMessage` bridge to allow the embedded content (the map) to trigger A2UI actions in the main application. - -## Multiple Surfaces - -The client is designed to render multiple A2UI "Surfaces" simultaneously. Instead of a single chat stream, the `contact.ts` shell manages: - -- **Main Profile (`contact-card`)**: The primary view. -- **Side Panel (`org-chart-view`)**: A persistent side view for context. -- **Overlay (`location-surface`)**: A temporary surface for specific tasks like map viewing. - -## How to Run in Tandem - -To see this full experience, you must run this client with the specific `contact_multiple_surfaces` agent. - -### 1. Start the Agent - -The agent serves the backend logic and the static assets (like the floor plan HTML). - -```bash -cd ../../../agent/adk/contact_multiple_surfaces -uv run . -``` - -_Runs on port 10004._ - -### 2. Start this Client - -The client connects to the agent and renders the UI. - -```bash -# In this directory (samples/client/lit/custom-components-example) -yarn install -yarn dev -``` - -_The client acts as a shell, connecting to localhost:10004 by default._ - -## Configuration - -The connection to the agent is configured in `middleware/a2a.ts`. If you need to change the agent port, update the URL in that file: - -```typescript -const agentUrl = 'http://localhost:10004'; -``` diff --git a/samples/client/lit/custom-components-example/client.ts b/samples/client/lit/custom-components-example/client.ts deleted file mode 100644 index 9cc9c6ff3e..0000000000 --- a/samples/client/lit/custom-components-example/client.ts +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {v0_8} from '@a2ui/lit'; -import {registerContactComponents} from './ui/custom-components/register-components.js'; - -import {componentRegistry} from '@a2ui/lit/ui'; - -export class A2UIClient { - #ready: Promise = Promise.resolve(); - #contextId?: string; - - get ready() { - return this.#ready; - } - - async send( - message: v0_8.Types.A2UIClientEventMessage, - onChunk?: (messages: v0_8.Types.ServerToClientMessage[]) => void, - ): Promise { - const catalog = componentRegistry.getInlineCatalog(); - const finalMessage = { - ...message, - metadata: { - a2uiClientCapabilities: { - inlineCatalogs: [catalog], - }, - }, - }; - - const response = await fetch('/a2a', { - body: JSON.stringify({ - event: finalMessage, - contextId: this.#contextId, - }), - method: 'POST', - }); - - if (!response.ok) { - const error = (await response.json()) as {error: string}; - throw new Error(error.error); - } - - const contentType = response.headers.get('content-type'); - const messages: v0_8.Types.ServerToClientMessage[] = []; - - if (contentType?.includes('text/event-stream')) { - const reader = response.body?.getReader(); - if (!reader) throw new Error('No response body'); - const decoder = new TextDecoder(); - let buffer = ''; - - while (true) { - const {done, value} = await reader.read(); - if (done) break; - - buffer += decoder.decode(value, {stream: true}); - const lines = buffer.split('\n\n'); - buffer = lines.pop() || ''; - - for (const line of lines) { - if (line.startsWith('data: ')) { - const jsonStr = line.replace(/^data:\s*/, ''); - try { - const responseData = JSON.parse(jsonStr); - if (responseData.error) { - throw new Error(responseData.error); - } else { - if (responseData.contextId) { - this.#contextId = responseData.contextId; - } - const parts = responseData.parts || responseData; - const chunkMessages = this.#extractMessages(parts); - if (chunkMessages.length > 0) { - messages.push(...chunkMessages); - onChunk?.(chunkMessages); - } - } - } catch (e) { - console.error('Error parsing SSE data:', e, jsonStr); - } - } - } - } - return messages; - } - - const responseData = (await response.json()) as any; - if (responseData && typeof responseData === 'object' && 'error' in responseData) { - throw new Error(responseData.error); - } else { - if (responseData.contextId) { - this.#contextId = responseData.contextId; - } - const parts = responseData.parts || responseData; - const extracted = this.#extractMessages(parts); - messages.push(...extracted); - if (messages.length > 0) { - onChunk?.(messages); - } - } - return messages; - } - - #extractMessages(data: any): v0_8.Types.ServerToClientMessage[] { - let items: any[] = []; - if (data.messages && Array.isArray(data.messages)) { - items = data.messages; - } else { - items = Array.isArray(data) - ? data - : data.kind === 'message' && Array.isArray(data.parts) - ? data.parts - : [data]; - } - - const messages: v0_8.Types.ServerToClientMessage[] = []; - for (const item of items) { - if (item.kind === 'message' && Array.isArray(item.parts)) { - for (const part of item.parts) { - if (part.data) { - messages.push(part.data); - } - } - } else { - if (item.kind === 'text') continue; - if (item.data) { - messages.push(item.data); - } - } - } - return messages; - } -} -registerContactComponents(); diff --git a/samples/client/lit/custom-components-example/contact.ts b/samples/client/lit/custom-components-example/contact.ts deleted file mode 100644 index 44841666fb..0000000000 --- a/samples/client/lit/custom-components-example/contact.ts +++ /dev/null @@ -1,438 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {SignalWatcher} from '@lit-labs/signals'; -import {provide} from '@lit/context'; -import {LitElement, html, css, nothing, HTMLTemplateResult, unsafeCSS} from 'lit'; -import {customElement, state} from 'lit/decorators.js'; -import {theme as uiTheme} from './theme/theme.js'; -import {A2UIClient} from './client.js'; -import {SnackbarAction, SnackbarMessage, SnackbarUUID, SnackType} from './types/types.js'; -import {type Snackbar} from './ui/snackbar.js'; -import {repeat} from 'lit/directives/repeat.js'; -import {v0_8} from '@a2ui/lit'; -import * as UI from '@a2ui/lit/ui'; - -// Demo elements. -import './ui/ui.js'; -import {registerContactComponents} from './ui/custom-components/register-components.js'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore - optional peer dependency -import {renderMarkdown} from '@a2ui/markdown-it'; - -// Register custom components for the contact app -registerContactComponents(); - -@customElement('a2ui-contact') -export class A2UIContactFinder extends SignalWatcher(LitElement) { - connectedCallback() { - super.connectedCallback(); - } - - @provide({context: UI.Context.themeContext}) - accessor theme: v0_8.Types.Theme = uiTheme; - - @provide({context: UI.Context.markdown}) - accessor markdownRenderer: v0_8.Types.MarkdownRenderer = async (text, options) => { - return renderMarkdown(text, options); - }; - - @state() - accessor #requesting = false; - - @state() - accessor #error: string | null = null; - - @state() - accessor renderVersion = 0; - - @state() - accessor #lastMessages: v0_8.Types.ServerToClientMessage[] = []; - - static styles = [ - unsafeCSS(v0_8.Styles.structuralStyles), - css` - :host { - display: block; - max-width: 640px; - margin: 0 auto; - min-height: 100%; - } - - #surfaces { - display: flex; - flex-direction: row; - gap: 16px; - width: 100%; - padding: var(--bb-grid-size-3) 0; - animation: fadeIn 1s cubic-bezier(0, 0, 0.3, 1) 0.3s backwards; - align-items: flex-start; - - & a2ui-surface { - width: 100%; - flex: 1; - } - } - - form { - display: flex; - flex-direction: column; - flex: 1; - gap: 16px; - align-items: center; - padding: 16px 0; - animation: fadeIn 1s cubic-bezier(0, 0, 0.3, 1) 1s backwards; - - & > div { - display: flex; - flex: 1; - gap: 16px; - align-items: center; - width: 100%; - - & > input { - display: block; - flex: 1; - border-radius: 32px; - padding: 16px 24px; - border: 1px solid var(--p-60); - font-size: 16px; - } - - & > button { - display: flex; - align-items: center; - background: var(--p-40); - color: var(--n-100); - border: none; - padding: 8px 16px; - border-radius: 32px; - opacity: 0.5; - - &:not([disabled]) { - cursor: pointer; - opacity: 1; - } - } - } - } - - .rotate { - animation: spin 1s linear infinite; - } - - .pending { - width: 100%; - min-height: 200px; - display: flex; - align-items: center; - justify-content: center; - animation: fadeIn 1s cubic-bezier(0, 0, 0.3, 1) 0.3s backwards; - - & .g-icon { - margin-right: 8px; - } - } - - .error { - color: var(--e-40); - background-color: var(--e-95); - border: 1px solid var(--e-80); - padding: 16px; - border-radius: 8px; - } - - @keyframes fadeIn { - from { - opacity: 0; - } - - to { - opacity: 1; - } - } - - .spinner { - width: 48px; - height: 48px; - border: 4px solid rgba(255, 255, 255, 0.1); - border-left-color: var(--p-60); - border-radius: 50%; - animation: spin 1s linear infinite; - } - - .rendering-indicator { - display: flex; - align-items: center; - justify-content: center; - padding: 16px; - color: var(--p-40); - font-size: 14px; - border-top: 1px solid var(--n-90); - margin-top: 16px; - width: 100%; - - & .g-icon { - margin-right: 8px; - font-size: 16px; - } - } - - @keyframes spin { - to { - transform: rotate(360deg); - } - } - - @keyframes pulse { - 0% { - opacity: 0.6; - } - 50% { - opacity: 1; - } - 100% { - opacity: 0.6; - } - } - `, - ]; - - #processor = v0_8.Data.createSignalA2uiMessageProcessor(); - #a2uiClient = new A2UIClient(); - #snackbar: Snackbar | undefined = undefined; - #pendingSnackbarMessages: Array<{ - message: SnackbarMessage; - replaceAll: boolean; - }> = []; - - render() { - return [this.#maybeRenderForm(), this.#maybeRenderData(), this.#maybeRenderError()]; - } - - #maybeRenderError() { - if (!this.#error) return nothing; - - return html`
${this.#error}
`; - } - - #maybeRenderForm() { - if (this.#requesting) return nothing; - if (this.#lastMessages.length > 0) return nothing; - return html`
{ - evt.preventDefault(); - if (!(evt.target instanceof HTMLFormElement)) { - return; - } - const data = new FormData(evt.target); - const body = data.get('body') ?? null; - if (!body) { - return; - } - const message: v0_8.Types.A2UIClientEventMessage = { - request: body, - }; - await this.#sendAndProcessMessage(message); - }} - > -

Contact Finder

-
- - -
-
`; - } - - #maybeRenderData() { - if (this.#requesting && this.#processor.getSurfaces().size === 0) { - return html`
-
-
Awaiting an answer...
-
`; - } - - const surfacesMap = new Map(this.#processor.getSurfaces()); - const surfaces = Array.from(surfacesMap.entries()).sort(([a], [b]) => { - // "org-chart-view" comes first (left), "contact-card" second (right) - if (a === 'org-chart-view') return -1; - if (b === 'org-chart-view') return 1; - return a.localeCompare(b); - }); - - if (surfaces.length === 0) { - return nothing; - } - - return html` ${this.#requesting - ? html`
- progress_activity - Rendering UI... -
` - : nothing} -
- ${repeat( - surfaces, - ([surfaceId]) => surfaceId, - ([surfaceId, surface]) => { - return html`
- ) => { - const [target] = evt.composedPath(); - if (!(target instanceof HTMLElement)) { - return; - } - - const context: v0_8.Types.A2UIClientEventMessage['userAction']['context'] = {}; - if (evt.detail.action.context) { - const srcContext = evt.detail.action.context; - for (const item of srcContext) { - if (item.value.literalBoolean) { - context[item.key] = item.value.literalBoolean; - } else if (item.value.literalNumber) { - context[item.key] = item.value.literalNumber; - } else if (item.value.literalString) { - context[item.key] = item.value.literalString; - } else if (item.value.path) { - const path = this.#processor.resolvePath( - item.value.path, - evt.detail.dataContextPath, - ); - const value = this.#processor.getData( - evt.detail.sourceComponent, - path, - surfaceId, - ); - context[item.key] = value; - } - } - } - - const message: v0_8.Types.A2UIClientEventMessage = { - userAction: { - surfaceId: surfaceId, - name: 'ACTION: ' + evt.detail.action.name, - sourceComponentId: target.id, - timestamp: new Date().toISOString(), - context, - }, - }; - - await this.#sendAndProcessMessage(message); - }} - .surfaceId=${surfaceId} - .processor=${this.#processor} - .enableCustomElements=${true} - > -
`; - }, - )} -
`; - } - - async #sendAndProcessMessage(request: v0_8.Types.A2UIClientEventMessage) { - this.#requesting = true; - const messages = await this.#sendMessage(request); - - this.#lastMessages = messages; - - this.renderVersion++; // Force re-render of surfaces - this.requestUpdate(); - - const cardSurface = this.#processor.getSurfaces().get('contact-card'); - if (cardSurface) { - // Deeply log the data model for the card - } - } - - async #sendMessage( - message: v0_8.Types.A2UIClientEventMessage, - ): Promise { - try { - this.#requesting = true; - const response = await this.#a2uiClient.send(message, chunkMessages => { - this.#processor.processMessages(chunkMessages); - this.renderVersion++; - this.requestUpdate(); - }); - - this.#requesting = false; - - return response; - } catch (err) { - this.snackbar(err as string, SnackType.ERROR); - } finally { - this.#requesting = false; - } - - return []; - } - - snackbar( - message: string | HTMLTemplateResult, - type: SnackType, - actions: SnackbarAction[] = [], - persistent = false, - id = globalThis.crypto.randomUUID(), - replaceAll = false, - ) { - if (!this.#snackbar) { - this.#pendingSnackbarMessages.push({ - message: { - id, - message, - type, - persistent, - actions, - }, - replaceAll, - }); - return; - } - - return this.#snackbar.show( - { - id, - message, - type, - persistent, - actions, - }, - replaceAll, - ); - } - - unsnackbar(id?: SnackbarUUID) { - if (!this.#snackbar) { - return; - } - - this.#snackbar.hide(id); - } -} diff --git a/samples/client/lit/custom-components-example/index.html b/samples/client/lit/custom-components-example/index.html deleted file mode 100644 index c907d7169a..0000000000 --- a/samples/client/lit/custom-components-example/index.html +++ /dev/null @@ -1,255 +0,0 @@ - - - - - - - - Contact Finder Agent - - - - - - - - - - diff --git a/samples/client/lit/custom-components-example/middleware/a2a.ts b/samples/client/lit/custom-components-example/middleware/a2a.ts deleted file mode 100644 index 06caaa0c6e..0000000000 --- a/samples/client/lit/custom-components-example/middleware/a2a.ts +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {IncomingMessage, ServerResponse} from 'http'; -import {Plugin, ViteDevServer} from 'vite'; -import {A2AClient} from '@a2a-js/sdk/client'; -import {MessageSendParams, Part, SendMessageSuccessResponse, Task} from '@a2a-js/sdk'; -import {v4 as uuidv4} from 'uuid'; - -const A2UI_MIME_TYPE = 'application/a2ui+json'; -const enableStreaming = process.env['ENABLE_STREAMING'] === 'true'; - -const fetchWithCustomHeader: typeof fetch = async (url, init) => { - const headers = new Headers(init?.headers); - headers.set('X-A2A-Extensions', 'https://a2ui.org/a2a-extension/a2ui/v0.8'); - - const newInit = {...init, headers}; - return fetch(url, newInit); -}; - -const isJson = (str: string) => { - try { - const parsed = JSON.parse(str); - return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed); - } catch (err) { - console.warn(err); - return false; - } -}; - -let client: A2AClient | null = null; -const createOrGetClient = async () => { - if (!client) { - // Create a client pointing to the agent's Agent Card URL. - client = await A2AClient.fromCardUrl('http://localhost:10004/.well-known/agent-card.json', { - fetchImpl: fetchWithCustomHeader, - }); - } - - return client; -}; - -export const plugin = (): Plugin => { - return { - name: 'a2a-handler', - configureServer(server: ViteDevServer) { - server.middlewares.use( - '/a2a', - async (req: IncomingMessage, res: ServerResponse, next: () => void) => { - if (req.method === 'POST') { - let originalBody = ''; - - req.on('data', chunk => { - originalBody += chunk.toString(); - }); - - req.on('end', async () => { - let sendParams: MessageSendParams; - - if (isJson(originalBody)) { - console.log('[a2a-middleware] Received JSON UI event:', originalBody); - - const requestData = JSON.parse(originalBody); - const contextId = requestData.contextId; - const clientEvent = requestData.event || requestData; // fallback if it's old format - - sendParams = { - message: { - messageId: uuidv4(), - contextId, - role: 'user', - parts: [ - { - kind: 'data', - data: clientEvent, - metadata: {mimeType: A2UI_MIME_TYPE}, - } as Part, - ], - kind: 'message', - }, - }; - } else { - console.log('[a2a-middleware] Received text query:', originalBody); - sendParams = { - message: { - messageId: uuidv4(), - role: 'user', - parts: [ - { - kind: 'text', - text: originalBody, - }, - ], - kind: 'message', - }, - }; - } - - const client = await createOrGetClient(); - - try { - if (enableStreaming) { - const stream = await client.sendMessageStream(sendParams); - res.statusCode = 200; - res.setHeader('Content-Type', 'text/event-stream'); - res.setHeader('Cache-Control', 'no-cache'); - res.setHeader('Connection', 'keep-alive'); - - for await (const chunk of stream) { - // A2AClient unpacks the JSON-RPC, so chunk is an A2AStreamEventData - let parts: Part[] = []; - if (chunk.kind === 'status-update' && chunk.status.message?.parts) { - parts = chunk.status.message.parts; - } else if (chunk.kind === 'message' && chunk.parts) { - parts = chunk.parts; - } - - if (parts.length > 0) { - const responseData = { - parts, - contextId: - (chunk as any).contextId || (chunk as any).status?.message?.contextId, - }; - res.write(`data: ${JSON.stringify(responseData)}\n\n`); - } - } - res.end(); - } else { - const response = await client.sendMessage(sendParams); - res.setHeader('Cache-Control', 'no-store'); - if ('error' in response) { - res.statusCode = 500; - res.setHeader('Content-Type', 'application/json'); - res.end(JSON.stringify({error: response.error.message})); - } else { - const result = (response as SendMessageSuccessResponse).result as Task; - res.statusCode = 200; - res.setHeader('Content-Type', 'application/json'); - const responseData = { - parts: result.kind === 'task' ? result.status.message?.parts || [] : [], - contextId: result.contextId, - }; - res.end(JSON.stringify(responseData)); - } - } - } catch (e: any) { - console.error('Error during streaming:', e); - if (!res.headersSent) { - res.statusCode = 500; - res.setHeader('Content-Type', 'application/json'); - res.end(JSON.stringify({error: e.message || String(e)})); - } else { - res.write(`data: ${JSON.stringify({error: e.message || String(e)})}\n\n`); - res.end(); - } - } - }); - - return; - } else { - next(); - } - }, - ); - }, - }; -}; diff --git a/samples/client/lit/custom-components-example/package.json b/samples/client/lit/custom-components-example/package.json deleted file mode 100644 index 607168fca6..0000000000 --- a/samples/client/lit/custom-components-example/package.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "name": "@a2ui/custom-components-example", - "private": true, - "version": "0.8.1", - "description": "A2UI Custom Components Example Demo", - "main": "./dist/contact.js", - "types": "./dist/contact.d.ts", - "type": "module", - "scripts": { - "prepack": "yarn build", - "build": "wireit", - "build:tsc": "wireit", - "dev": "yarn serve --watch", - "test": "wireit", - "serve": "wireit", - "lint": "eslint .", - "lint:fix": "eslint . --fix", - "format": "prettier --write .", - "format:check": "prettier --check ." - }, - "wireit": { - "serve": { - "command": "vite dev", - "dependencies": [ - "build" - ], - "service": true - }, - "test": { - "command": "node --test --enable-source-maps --test-reporter spec dist/src/0.8/tests/**/*.test.js", - "dependencies": [ - "build" - ] - }, - "build": { - "dependencies": [ - "build:tsc" - ] - }, - "build:tsc": { - "command": "tsc -b --pretty", - "env": { - "FORCE_COLOR": "1" - }, - "dependencies": [ - "../../../../renderers/lit:build:tsc" - ], - "files": [ - "**/*.ts", - "tsconfig.json" - ], - "output": [ - "dist/", - "!dist/**/*.min.js{,.map}" - ], - "clean": "if-file-deleted" - } - }, - "repository": { - "directory": "samples/client/lit/custom-components-example", - "type": "git", - "url": "git+https://github.com/a2ui-project/a2ui.git" - }, - "files": [ - "dist" - ], - "keywords": [], - "author": "Google", - "license": "Apache-2.0", - "bugs": { - "url": "https://github.com/a2ui-project/a2ui/issues" - }, - "homepage": "https://github.com/a2ui-project/a2ui/tree/main/web#readme", - "devDependencies": { - "dotenv": "^17.4.2", - "eslint": "^10.4.1", - "gts": "^7.0.0", - "typescript": "5.9.3", - "uuid": "^14.0.0", - "vite": "^8.0.16", - "wireit": "^0.15.0-pre.2" - }, - "dependencies": { - "@a2a-js/sdk": "^0.3.13", - "@a2ui/lit": "workspace:*", - "@lit-labs/signals": "^0.3.0", - "@lit/context": "^1.1.6", - "@modelcontextprotocol/ext-apps": "^1.7.4", - "lit": "^3.3.3" - } -} diff --git a/samples/client/lit/custom-components-example/theme/theme.ts b/samples/client/lit/custom-components-example/theme/theme.ts deleted file mode 100644 index 8ae50a7e8f..0000000000 --- a/samples/client/lit/custom-components-example/theme/theme.ts +++ /dev/null @@ -1,463 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {v0_8} from '@a2ui/lit'; - -/** Elements */ - -const a = { - 'typography-f-sf': true, - 'typography-fs-n': true, - 'typography-w-500': true, - 'layout-as-n': true, - 'layout-dis-iflx': true, - 'layout-al-c': true, -}; - -const audio = { - 'layout-w-100': true, -}; - -const body = { - 'typography-f-s': true, - 'typography-fs-n': true, - 'typography-w-400': true, - 'layout-mt-0': true, - 'layout-mb-2': true, - 'typography-sz-bm': true, - 'color-c-n10': true, -}; - -const button = { - 'typography-f-sf': true, - 'typography-fs-n': true, - 'typography-w-500': true, - 'layout-pt-3': true, - 'layout-pb-3': true, - 'layout-pl-5': true, - 'layout-pr-5': true, - 'layout-mb-1': true, - 'border-br-16': true, - 'border-bw-0': true, - 'border-c-n70': true, - 'border-bs-s': true, - 'color-bgc-s30': true, - 'color-c-n100': true, - 'behavior-ho-80': true, -}; - -const heading = { - 'typography-f-sf': true, - 'typography-fs-n': true, - 'typography-w-500': true, - 'layout-mt-0': true, - 'layout-mb-2': true, - 'color-c-n10': true, -}; - -const h1 = { - ...heading, - 'typography-sz-tl': true, -}; - -const h2 = { - ...heading, - 'typography-sz-tm': true, -}; - -const h3 = { - ...heading, - 'typography-sz-ts': true, -}; - -const iframe = { - 'behavior-sw-n': true, -}; - -const input = { - 'typography-f-sf': true, - 'typography-fs-n': true, - 'typography-w-400': true, - 'layout-pl-4': true, - 'layout-pr-4': true, - 'layout-pt-2': true, - 'layout-pb-2': true, - 'border-br-6': true, - 'border-bw-1': true, - 'color-bc-s70': true, - 'border-bs-s': true, - 'layout-as-n': true, - 'color-c-n10': true, -}; - -const p = { - 'typography-f-s': true, - 'typography-fs-n': true, - 'typography-w-400': true, - 'layout-m-0': true, - 'typography-sz-bm': true, - 'layout-as-n': true, - 'color-c-n10': true, -}; - -const orderedList = { - 'typography-f-s': true, - 'typography-fs-n': true, - 'typography-w-400': true, - 'layout-m-0': true, - 'typography-sz-bm': true, - 'layout-as-n': true, -}; - -const unorderedList = { - 'typography-f-s': true, - 'typography-fs-n': true, - 'typography-w-400': true, - 'layout-m-0': true, - 'typography-sz-bm': true, - 'layout-as-n': true, -}; - -const listItem = { - 'typography-f-s': true, - 'typography-fs-n': true, - 'typography-w-400': true, - 'layout-m-0': true, - 'typography-sz-bm': true, - 'layout-as-n': true, -}; - -const pre = { - 'typography-f-c': true, - 'typography-fs-n': true, - 'typography-w-400': true, - 'typography-sz-bm': true, - 'typography-ws-p': true, - 'layout-as-n': true, -}; - -const textarea = { - ...input, - 'layout-r-none': true, - 'layout-fs-c': true, -}; - -const video = { - 'layout-el-cv': true, -}; - -const aLight = v0_8.Styles.merge(a, {'color-c-p30': true}); -const inputLight = v0_8.Styles.merge(input, {'color-c-n5': true}); -const textareaLight = v0_8.Styles.merge(textarea, {'color-c-n5': true}); -const buttonLight = v0_8.Styles.merge(button, {'color-c-n100': true}); -const h1Light = v0_8.Styles.merge(h1, {'color-c-n5': true}); -const h2Light = v0_8.Styles.merge(h2, {'color-c-n5': true}); -const h3Light = v0_8.Styles.merge(h3, {'color-c-n5': true}); -const bodyLight = v0_8.Styles.merge(body, {'color-c-n5': true}); -const pLight = v0_8.Styles.merge(p, {'color-c-n60': true}); -const preLight = v0_8.Styles.merge(pre, {'color-c-n35': true}); -const orderedListLight = v0_8.Styles.merge(orderedList, { - 'color-c-n35': true, -}); -const unorderedListLight = v0_8.Styles.merge(unorderedList, { - 'color-c-n35': true, -}); -const listItemLight = v0_8.Styles.merge(listItem, { - 'color-c-n35': true, -}); - -export const theme: v0_8.Types.Theme = { - additionalStyles: { - Card: { - 'min-width': '320px', - }, - Button: { - '--n-60': 'var(--n-100)', - }, - Image: { - 'max-width': '120px', - 'max-height': '120px', - marginLeft: 'auto', - marginRight: 'auto', - }, - }, - components: { - AudioPlayer: {}, - Button: { - 'layout-pt-2': true, - 'layout-pb-2': true, - 'layout-pl-5': true, - 'layout-pr-5': true, - 'border-br-2': true, - 'border-bw-0': true, - 'border-bs-s': true, - 'color-bgc-p30': true, - 'color-c-n100': true, - 'behavior-ho-70': true, - }, - Card: { - 'border-br-4': true, - 'color-bgc-p100': true, - 'color-bc-n90': true, - 'border-bw-1': true, - 'border-bs-s': true, - 'layout-pt-10': true, - 'layout-pb-10': true, - 'layout-pl-4': true, - 'layout-pr-4': true, - }, - CheckBox: { - element: { - 'layout-m-0': true, - 'layout-mr-2': true, - 'layout-p-2': true, - 'border-br-12': true, - 'border-bw-1': true, - 'border-bs-s': true, - 'color-bgc-p100': true, - 'color-bc-p60': true, - 'color-c-n30': true, - 'color-c-p30': true, - }, - label: { - 'color-c-p30': true, - 'typography-f-sf': true, - 'typography-v-r': true, - 'typography-w-400': true, - 'layout-flx-1': true, - 'typography-sz-ll': true, - }, - container: { - 'layout-dsp-iflex': true, - 'layout-al-c': true, - }, - }, - Column: {}, - DateTimeInput: { - container: {}, - label: {}, - element: { - 'layout-pt-2': true, - 'layout-pb-2': true, - 'layout-pl-3': true, - 'layout-pr-3': true, - 'border-br-12': true, - 'border-bw-1': true, - 'border-bs-s': true, - 'color-bgc-p100': true, - 'color-bc-p60': true, - 'color-c-n30': true, - }, - }, - Divider: { - 'color-bgc-n90': true, - 'layout-mt-6': true, - 'layout-mb-6': true, - }, - Image: { - all: { - 'border-br-50pc': true, - 'layout-el-cv': true, - 'layout-w-100': true, - 'layout-h-100': true, - 'layout-dsp-flexhor': true, - 'layout-al-c': true, - 'layout-sp-c': true, - 'layout-mb-3': true, - }, - avatar: {}, - header: {}, - icon: {}, - largeFeature: {}, - mediumFeature: {}, - smallFeature: {}, - }, - Icon: { - 'border-br-1': true, - 'layout-p-2': true, - 'color-bgc-n98': true, - 'layout-dsp-flexhor': true, - 'layout-al-c': true, - 'layout-sp-c': true, - }, - List: { - 'layout-g-4': true, - 'layout-p-2': true, - }, - Modal: { - backdrop: {'color-bbgc-p60_20': true}, - element: { - 'border-br-2': true, - 'color-bgc-p100': true, - 'layout-p-4': true, - 'border-bw-1': true, - 'border-bs-s': true, - 'color-bc-p80': true, - }, - }, - MultipleChoice: { - container: {}, - label: {}, - element: {}, - }, - Row: { - 'layout-g-4': true, - 'layout-mb-3': true, - }, - Slider: { - container: {}, - label: {}, - element: {}, - }, - Tabs: { - container: {}, - controls: {all: {}, selected: {}}, - element: {}, - }, - Text: { - all: { - 'layout-w-100': true, - 'layout-g-2': true, - 'color-c-p30': true, - }, - h1: { - 'typography-f-sf': true, - 'typography-ta-c': true, - 'typography-v-r': true, - 'typography-w-500': true, - 'layout-mt-0': true, - 'layout-mr-0': true, - 'layout-ml-0': true, - 'layout-mb-2': true, - 'layout-p-0': true, - 'typography-sz-tl': true, - }, - h2: { - 'typography-f-sf': true, - 'typography-ta-c': true, - 'typography-v-r': true, - 'typography-w-500': true, - 'layout-mt-0': true, - 'layout-mr-0': true, - 'layout-ml-0': true, - 'layout-mb-2': true, - 'layout-p-0': true, - 'typography-sz-tl': true, - }, - h3: { - 'typography-f-sf': true, - 'typography-ta-c': true, - 'typography-v-r': true, - 'typography-w-500': true, - 'layout-mt-0': true, - 'layout-mr-0': true, - 'layout-ml-0': true, - 'layout-mb-0': true, - 'layout-p-0': true, - 'typography-sz-ts': true, - }, - h4: { - 'typography-f-sf': true, - 'typography-ta-c': true, - 'typography-v-r': true, - 'typography-w-500': true, - 'layout-mt-0': true, - 'layout-mr-0': true, - 'layout-ml-0': true, - 'layout-mb-0': true, - 'layout-p-0': true, - 'typography-sz-bl': true, - }, - h5: { - 'typography-f-sf': true, - 'typography-ta-c': true, - 'typography-v-r': true, - 'typography-w-500': true, - 'layout-mt-0': true, - 'layout-mr-0': true, - 'layout-ml-0': true, - 'layout-mb-0': true, - 'layout-p-0': true, - 'color-c-n30': true, - 'typography-sz-bm': true, - 'layout-mb-1': true, - }, - body: {}, - caption: {}, - }, - TextField: { - container: { - 'typography-sz-bm': true, - 'layout-w-100': true, - 'layout-g-2': true, - 'layout-dsp-flexhor': true, - 'layout-al-c': true, - }, - label: { - 'layout-flx-0': true, - }, - element: { - 'typography-sz-bm': true, - 'layout-pt-2': true, - 'layout-pb-2': true, - 'layout-pl-3': true, - 'layout-pr-3': true, - 'border-br-12': true, - 'border-bw-1': true, - 'border-bs-s': true, - 'color-bgc-p100': true, - 'color-bc-p60': true, - 'color-c-n30': true, - 'color-c-p30': true, - }, - }, - Video: { - 'border-br-5': true, - 'layout-el-cv': true, - }, - }, - elements: { - a: aLight, - audio, - body: bodyLight, - button: buttonLight, - h1: h1Light, - h2: h2Light, - h3: h3Light, - h4: {}, - h5: {}, - iframe, - input: inputLight, - p: pLight, - pre: preLight, - textarea: textareaLight, - video, - }, - markdown: { - p: [...Object.keys(pLight)], - h1: [...Object.keys(h1Light)], - h2: [...Object.keys(h2Light)], - h3: [...Object.keys(h3Light)], - h4: [], - h5: [], - ul: [...Object.keys(unorderedListLight)], - ol: [...Object.keys(orderedListLight)], - li: [...Object.keys(listItemLight)], - a: [...Object.keys(aLight)], - strong: [], - em: [], - }, -}; diff --git a/samples/client/lit/custom-components-example/ui/custom-components/README.md b/samples/client/lit/custom-components-example/ui/custom-components/README.md deleted file mode 100644 index c8a8a41826..0000000000 --- a/samples/client/lit/custom-components-example/ui/custom-components/README.md +++ /dev/null @@ -1,163 +0,0 @@ -# A2UI custom component integration guide - -This guide details how to create, register, and use a custom component in the A2UI client. - -## Create the component - -Create a new Lit component file in `lib/src/0.8/ui/custom-components/`. -Example: `my-component.ts` - -```typescript -import {html, css} from 'lit'; -import {property} from 'lit/decorators.js'; - -import {Root} from '../root.js'; - -export class MyComponent extends Root { - @property() accessor myProp: string = 'Default'; - - static styles = [ - ...Root.styles, // Inherit base styles - css` - :host { - display: block; - padding: 16px; - border: 1px solid #ccc; - } - `, - ]; - - render() { - return html` -
-

My Custom Component

-

Prop value: ${this.myProp}

-
- `; - } -} -``` - -## Register the component - -Update `lib/src/0.8/ui/custom-components/index.ts` to register your new component. -You must pass the desired tag name as the third argument. - -```typescript -import {componentRegistry} from '../component-registry.js'; -import {MyComponent} from './my-component.js'; // Import your component - -export function registerCustomComponents() { - // Register with explicit tag name - componentRegistry.register('MyComponent', MyComponent, 'my-component'); -} - -export {MyComponent}; // Export for type usage if needed -``` - -## Define the schema (server-side) - -Create a JSON schema for your component properties. This will be used by the server to validate messages. -Example: `lib/my_component_schema.json` - -```json -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "additionalProperties": false, - "properties": { - "type": {"const": "object"}, - "properties": { - "type": "object", - "additionalProperties": false, - "properties": { - "myProp": { - "type": "string", - "description": "A sample property." - } - }, - "required": ["myProp"] - } - }, - "required": ["type", "properties"] -} -``` - -## Use in client application - -In your client application (e.g., `contact` sample), ensure you import and call the registration function. - -```typescript -import {registerCustomComponents} from '@a2ui/lit/ui'; - -// Call this once at startup -registerCustomComponents(); -``` - -## Overriding standard components - -You can replace standard A2UI components (like `TextField`, `Video`, `Button`) with your own custom implementations. - -### Steps to override - -1. **Create your component** extending `Root` (just like a custom component). - -2. **Ensure it accepts the standard properties** for that component type (e.g., `label` and `text` for `TextField`). - -3. **Register it** using the **standard type name** (e.g., `"TextField"`). - - ```typescript - // 1. Define your override - class MyPremiumTextField extends Root { - @property() accessor label = ''; - @property() accessor text = ''; - - static styles = [ - ...Root.styles, - css` - /* your premium styles */ - `, - ]; - - render() { - return html` -
- - -
- `; - } - } - - // 2. Register with the STANDARD type name - import {componentRegistry} from '@a2ui/lit/ui'; - componentRegistry.register('TextField', MyPremiumTextField, 'my-premium-textfield'); - ``` - -**Result:** -When the server sends a `TextField` component, the client will now render `` instead of the default ``. - -## Verify - -You can verify the component by creating a simple HTML test file or by sending a server message with the new component type. - -**Server message example:** - -```json -{ - "surfaceId": "main", - "component": { - "type": "MyComponent", - "id": "comp-1", - "properties": { - "myProp": "Hello World" - } - } -} -``` - -## Troubleshooting - -- **`NotSupportedError`**: If you see "constructor has already been used", ensure you **removed** the `@customElement` decorator from your component class. -- **Component not rendering**: Check if `registerCustomComponents()` is actually called. Verify the tag name in the DOM matches what you registered (e.g., `` vs ``). -- **Styles missing**: Ensure `static styles` includes `...Root.styles`. diff --git a/samples/client/lit/custom-components-example/ui/custom-components/mcp-apps-component.ts b/samples/client/lit/custom-components-example/ui/custom-components/mcp-apps-component.ts deleted file mode 100644 index f99d553b88..0000000000 --- a/samples/client/lit/custom-components-example/ui/custom-components/mcp-apps-component.ts +++ /dev/null @@ -1,229 +0,0 @@ -/** - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {html, css} from 'lit'; -import {customElement, property, query} from 'lit/decorators.js'; -import {Root} from '@a2ui/lit/ui'; -import {v0_8} from '@a2ui/lit'; -import {AppBridge, PostMessageTransport} from '@modelcontextprotocol/ext-apps/app-bridge'; -import type {McpUiSandboxProxyReadyNotification} from '@modelcontextprotocol/ext-apps/app-bridge'; -import {SANDBOX_IFRAME_PATH} from '../shared-constants.js'; - -@customElement('a2ui-mcp-apps-component') -export class McpApp extends Root { - static override styles = [ - ...Root.styles, - css` - :host { - display: block; - width: 100%; - border: 1px solid var(--p-60, #eee); - position: relative; - overflow: hidden; /* For Aspect Ratio / Container */ - border-radius: 8px; - background: #fff; - } - iframe { - width: 100%; - height: 100%; - border: none; - background: #f5f5f5; - transition: - height 0.3s ease-out, - min-width 0.3s ease-out; - } - `, - ]; - - /* --- Properties (Server Contract) --- */ - - @property({type: String}) - accessor resourceUri: string = ''; - - @property({type: String}) - accessor htmlContent: string = ''; - - @property({type: Number}) - accessor height: number | undefined = undefined; - - @property({type: Array}) - accessor allowedTools: string[] = []; - - // --- Internal State --- - - @query('iframe') - accessor iframe!: HTMLIFrameElement; - - private bridge?: AppBridge; - - override render() { - // Default to aspect ratio if no height. Use 16:9 or 4:3. - const style = this.height ? `height: ${this.height}px;` : 'aspect-ratio: 4/3;'; - - return html` -
- -
- `; - } - - override updated(changedProperties: Map) { - super.updated(changedProperties); - if (!this.bridge && this.htmlContent && this.iframe) { - this.initializeSandbox(); - } - } - - override disconnectedCallback() { - if (this.bridge) { - this.bridge.close(); - this.bridge = undefined; - } - super.disconnectedCallback(); - } - - private async initializeSandbox() { - if (!this.iframe || !this.htmlContent) return; - - // Allow configuring the sandbox URL via env var for production deployment - // Fall back to the 127.0.0.1 trick for local development to simulate cross-origin isolation - const meta = import.meta as any; - const configuredSandboxUrl = meta && meta.env ? meta.env.VITE_MCP_SANDBOX_URL : undefined; - const sandboxOrigin = - configuredSandboxUrl || `http://127.0.0.1:${window.location.port}${SANDBOX_IFRAME_PATH}`; - const sandboxUrl = new URL(sandboxOrigin); - - // Set up the bridge. No MCP client needed because A2UI acts as the orchestrator. - this.bridge = new AppBridge( - null, - {name: 'A2UI Client Host', version: '1.0.0'}, - { - serverTools: {}, - updateModelContext: {text: {}}, - }, - { - hostContext: { - theme: 'light', - platform: 'web', - displayMode: 'inline', - }, - }, - ); - - this.bridge.onsizechange = ({width, height}) => { - // Allow the view to dynamically resize the iframe container - const from: Keyframe = {}; - const to: Keyframe = {}; - - if (width !== undefined) { - from.minWidth = `${this.iframe.offsetWidth}px`; - this.iframe.style.minWidth = to.minWidth = `min(${width}px, 100%)`; - } - if (height !== undefined) { - from.height = `${this.iframe.offsetHeight}px`; - this.iframe.style.height = to.height = `${height}px`; - } - this.iframe.animate([from, to], {duration: 300, easing: 'ease-out'}); - }; - - // Forward Tool Calls to the A2UI Action Dispatch - this.bridge.oncalltool = async params => { - const actionName = params.name; - const args = params.arguments || {}; - - if (this.allowedTools.includes(actionName)) { - this.dispatchAgentAction(actionName, args); - return {content: [{type: 'text', text: 'Action dispatched to A2UI Agent'}]}; - } else { - console.warn(`[McpApp] Tool '${actionName}' blocked.`); - throw new Error('Tool not allowed'); - } - }; - - this.bridge.onloggingmessage = params => { - console.log(`[MCP Sandbox ${params.level}]:`, params.data); - }; - - // 1. Listen for the Outer Iframe to declare itself ready. - const readyNotification: McpUiSandboxProxyReadyNotification['method'] = - 'ui/notifications/sandbox-proxy-ready'; - const proxyReady = new Promise(resolve => { - const listener = ({source, data, origin}: MessageEvent) => { - if ( - source === this.iframe.contentWindow && - origin === sandboxUrl.origin && - data?.method === readyNotification - ) { - window.removeEventListener('message', listener); - resolve(true); - } - }; - window.addEventListener('message', listener); - }); - - // 2. Load the proxy iframe. - this.iframe.src = sandboxUrl.href; - await proxyReady; - - // 3. Connect AppBridge via PostMessage transport. - // We pass iframe.contentWindow to target just the sandbox proxy. - await this.bridge.connect( - new PostMessageTransport(this.iframe.contentWindow!, this.iframe.contentWindow!), - ); - - // 4. Send the Inner HTML UI resource to the sandbox to spin up the actual app. - await this.bridge.sendSandboxResourceReady({ - html: this.htmlContent, - sandbox: 'allow-scripts allow-forms allow-popups allow-modals', - }); - } - - private dispatchAgentAction(actionName: string, params: any) { - const context: v0_8.Types.Action['context'] = []; - if (params && typeof params === 'object') { - for (const [key, value] of Object.entries(params)) { - if (typeof value === 'string') { - context.push({key, value: {literalString: value}}); - } else if (typeof value === 'number') { - context.push({key, value: {literalNumber: value}}); - } else if (typeof value === 'boolean') { - context.push({key, value: {literalBoolean: value}}); - } else if (value !== null && typeof value === 'object') { - context.push({key, value: {literalString: JSON.stringify(value)}}); - } - } - } - - const action: v0_8.Types.Action = { - name: actionName, - context, - }; - - const eventPayload: v0_8.Events.StateEventDetailMap['a2ui.action'] = { - eventType: 'a2ui.action', - action, - sourceComponentId: this.id, - dataContextPath: this.dataContextPath, - sourceComponent: this.component as v0_8.Types.AnyComponentNode, - }; - - this.dispatchEvent(new v0_8.Events.StateEvent(eventPayload)); - } -} diff --git a/samples/client/lit/custom-components-example/ui/custom-components/org-chart.ts b/samples/client/lit/custom-components-example/ui/custom-components/org-chart.ts deleted file mode 100644 index 5402d1da60..0000000000 --- a/samples/client/lit/custom-components-example/ui/custom-components/org-chart.ts +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {Root} from '@a2ui/lit/ui'; -import {v0_8} from '@a2ui/lit'; -import {html, css} from 'lit'; -import {customElement, property} from 'lit/decorators.js'; -import {map} from 'lit/directives/map.js'; - -// Use aliases for convenience -const StateEvent = v0_8.Events.StateEvent; -type Action = v0_8.Types.Action; - -export interface OrgChartNode { - title: string; - name: string; -} - -@customElement('org-chart') -export class OrgChart extends Root { - @property({type: Array}) accessor chain: OrgChartNode[] = []; - @property({type: Object}) accessor action: Action | null = null; - - static styles = [ - ...Root.styles, - css` - :host { - display: block; - padding: 16px; - font-family: 'Roboto', sans-serif; - } - - .container { - display: flex; - flex-direction: column; - align-items: center; - gap: 16px; - } - - .node { - display: flex; - flex-direction: column; - align-items: center; - padding: 12px 24px; - background: #fff; - border: 1px solid #e0e0e0; - border-radius: 8px; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); - min-width: 200px; - position: relative; - transition: - transform 0.2s, - box-shadow 0.2s; - cursor: pointer; - } - - .node:hover { - transform: translateY(-2px); - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); - } - - .node:focus { - outline: 2px solid #1a73e8; - outline-offset: 2px; - } - - .node.current { - background: #e8f0fe; - border-color: #1a73e8; - border-width: 2px; - } - - .title { - font-size: 0.85rem; - color: #5f6368; - text-transform: uppercase; - letter-spacing: 0.5px; - margin-bottom: 4px; - } - - .name { - font-size: 1.1rem; - font-weight: 500; - color: #202124; - } - - .arrow { - color: #9aa0a6; - font-size: 24px; - line-height: 1; - } - `, - ]; - - render() { - let chainData: OrgChartNode[] | null = null; - let unresolvedChain: any = this.chain; - - // Resolve "chain" if it is a path object - const chainAsAny = this.chain as any; - if (chainAsAny && typeof chainAsAny === 'object' && 'path' in chainAsAny && chainAsAny.path) { - if (this.processor) { - const resolved = this.processor.getData( - this.component, - chainAsAny.path, - this.surfaceId ?? 'default', - ); - if (resolved) { - unresolvedChain = resolved; - } - } - } - - if (Array.isArray(unresolvedChain)) { - chainData = unresolvedChain as OrgChartNode[]; - } else if (unresolvedChain instanceof Map) { - // Handle Map (values are the nodes) - const entries = Array.from((unresolvedChain as Map).entries()); - entries.sort((a, b) => parseInt(a[0], 10) - parseInt(b[0], 10)); - chainData = entries.map(entry => entry[1]); - } else if (typeof unresolvedChain === 'object' && unresolvedChain !== null) { - chainData = Object.values(unresolvedChain); - } - - // Normalize items: model processor converts nested objects to Maps, so we must convert them back - chainData = (chainData || []).map(node => { - // Helper to safely get property regardless of type - const getVal = (k: string) => { - if (node instanceof Map) return node.get(k); - return (node as any)?.[k]; - }; - - return { - title: getVal('title') ?? '', - name: getVal('name') ?? '', - }; - }); - - if (!chainData || chainData.length === 0) { - return html`
No hierarchy data
`; - } - - return html` -
- ${map(chainData, (node, index) => { - // Use chainData.length, not this.chain.length - const isLast = index === (chainData?.length ?? 0) - 1; - return html` - - ${!isLast ? html`
↓
` : ''} - `; - })} -
- `; - } - - private handleNodeClick(node: OrgChartNode) { - if (!this.action) return; - - // Create a new action with the node's context merged in - const newContext = [ - ...(this.action.context || []), - { - key: 'clickedNodeTitle', - value: {literalString: node.title}, - }, - { - key: 'clickedNodeName', - value: {literalString: node.name}, - }, - ]; - - const actionWithContext: Action = { - ...this.action, - context: newContext as Action['context'], - }; - - const evt = new StateEvent<'a2ui.action'>({ - eventType: 'a2ui.action', - action: actionWithContext, - dataContextPath: this.dataContextPath, - sourceComponentId: this.id, - sourceComponent: this.component, - }); - this.dispatchEvent(evt); - } -} diff --git a/samples/client/lit/custom-components-example/ui/custom-components/premium-text-field.ts b/samples/client/lit/custom-components-example/ui/custom-components/premium-text-field.ts deleted file mode 100644 index 75a871b724..0000000000 --- a/samples/client/lit/custom-components-example/ui/custom-components/premium-text-field.ts +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {Root} from '@a2ui/lit/ui'; -import {html, css} from 'lit'; -import {property} from 'lit/decorators.js'; - -export class PremiumTextField extends Root { - @property() accessor label = ''; - @property() accessor text = ''; - - static styles = [ - ...Root.styles, - css` - :host { - display: block; - padding: 16px; - background: #fff; - border-radius: 12px; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); - border: 1px solid #e0e0e0; - transition: all 0.2s ease; - font-family: 'Inter', sans-serif; - } - :host(:hover) { - transform: translateY(-2px); - box-shadow: 0 6px 16px rgba(0, 0, 0, 0.12); - } - .input-container { - position: relative; - margin-top: 8px; - } - input { - width: 100%; - padding: 12px 16px; - font-size: 16px; - border: 2px solid #e0e0e0; - border-radius: 8px; - outline: none; - transition: border-color 0.2s; - box-sizing: border-box; - background: #fafafa; - } - input:focus { - border-color: #6200ee; - background: #fff; - } - label { - display: block; - font-size: 14px; - font-weight: 600; - color: #333; - margin-bottom: 4px; - } - .hint { - margin-top: 8px; - font-size: 12px; - color: #666; - display: flex; - align-items: center; - gap: 4px; - } - .badge { - background: #6200ee; - color: white; - padding: 2px 6px; - border-radius: 4px; - font-size: 10px; - font-weight: bold; - text-transform: uppercase; - } - `, - ]; - - render() { - return html` - -
- -
-
- Custom - This is a premium override of the standard TextField. -
- `; - } -} diff --git a/samples/client/lit/custom-components-example/ui/custom-components/register-components.ts b/samples/client/lit/custom-components-example/ui/custom-components/register-components.ts deleted file mode 100644 index af431bf334..0000000000 --- a/samples/client/lit/custom-components-example/ui/custom-components/register-components.ts +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {componentRegistry} from '@a2ui/lit/ui'; -import {OrgChart} from './org-chart.js'; -import {WebFrame} from './web-frame.js'; -import {PremiumTextField} from './premium-text-field.js'; -import {McpApp} from './mcp-apps-component.js'; - -export function registerContactComponents() { - // Register OrgChart - componentRegistry.register('OrgChart', OrgChart, 'org-chart', { - type: 'object', - properties: { - chain: { - type: 'object', - properties: { - path: {type: 'string'}, - literalArray: { - type: 'array', - items: { - type: 'object', - properties: { - title: {type: 'string'}, - name: {type: 'string'}, - }, - required: ['title', 'name'], - }, - }, - }, - }, - action: { - type: 'object', - properties: { - name: {type: 'string'}, - context: { - type: 'array', - items: { - type: 'object', - properties: { - key: {type: 'string'}, - value: { - type: 'object', - properties: { - path: {type: 'string'}, - literalString: {type: 'string'}, - literalNumber: {type: 'number'}, - literalBoolean: {type: 'boolean'}, - }, - }, - }, - required: ['key', 'value'], - }, - }, - }, - required: ['name'], - }, - }, - required: ['chain'], - }); - - // Register PremiumTextField as an override for TextField - componentRegistry.register('TextField', PremiumTextField, 'premium-text-field'); - - // Register McpApp - componentRegistry.register('McpApp', McpApp, 'a2ui-mcp-apps-component', { - type: 'object', - properties: { - resourceUri: {type: 'string'}, - htmlContent: {type: 'string'}, - height: {type: 'number'}, - allowedTools: { - type: 'array', - items: {type: 'string'}, - }, - }, - }); - - // Register WebFrame - componentRegistry.register('WebFrame', WebFrame, 'a2ui-web-frame', { - type: 'object', - properties: { - url: {type: 'string'}, - html: {type: 'string'}, - height: {type: 'number'}, - interactionMode: { - type: 'string', - enum: ['readOnly', 'interactive'], - }, - allowedEvents: { - type: 'array', - items: {type: 'string'}, - }, - }, - }); - - console.log('Registered Contact App Custom Components'); -} diff --git a/samples/client/lit/custom-components-example/ui/custom-components/test/README.md b/samples/client/lit/custom-components-example/ui/custom-components/test/README.md deleted file mode 100644 index 6e6350e618..0000000000 --- a/samples/client/lit/custom-components-example/ui/custom-components/test/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# Contact sample verification tests - -This directory contains tests to verify custom component integration specifically within the `contact` sample application environment. - -## How to run - -These tests run via the Vite development server used by the contact sample. - -### 1. Start the dev server - -From the `web/lit/samples/contact` directory, run: - -```bash -yarn dev -``` - -### 2. Access the tests - -Open your browser and navigate to the local server (usually port 5173): - -- **Component override test**: - [http://localhost:5173/ui/custom-components/test/override-test.html](http://localhost:5173/ui/custom-components/test/override-test.html) - _Verifies that a standard component (TextField) can be overridden by a custom implementation._ - -- **Hierarchy graph integration test**: - [http://localhost:5173/ui/custom-components/test/hierarchy-test.html](http://localhost:5173/ui/custom-components/test/hierarchy-test.html) - _Verifies that the HierarchyGraph component renders correctly within the contact app's build setup._ - -## Files - -- `override-test.html` & `override-test.ts`: Implements and tests a custom `TextField` override. -- `hierarchy-test.html`: Tests the `HierarchyGraph` component. diff --git a/samples/client/lit/custom-components-example/ui/custom-components/test/org-chart-test.html b/samples/client/lit/custom-components-example/ui/custom-components/test/org-chart-test.html deleted file mode 100644 index c91c613ad6..0000000000 --- a/samples/client/lit/custom-components-example/ui/custom-components/test/org-chart-test.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - A2UI Org Chart Test (Contact Sample) - - - - - -

A2UI Org Chart Test (Contact Sample)

- -
- -
- - - - diff --git a/samples/client/lit/custom-components-example/ui/custom-components/test/override-test.html b/samples/client/lit/custom-components-example/ui/custom-components/test/override-test.html deleted file mode 100644 index 67feacf2f7..0000000000 --- a/samples/client/lit/custom-components-example/ui/custom-components/test/override-test.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - A2UI Component Override Test - - - - - -

Component Override Test

-
- - diff --git a/samples/client/lit/custom-components-example/ui/custom-components/test/override-test.ts b/samples/client/lit/custom-components-example/ui/custom-components/test/override-test.ts deleted file mode 100644 index a0286740ef..0000000000 --- a/samples/client/lit/custom-components-example/ui/custom-components/test/override-test.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {componentRegistry, Root} from '@a2ui/lit/ui'; -// 1. Define the override -import {PremiumTextField} from '../premium-text-field.js'; - -// 2. Register it as "TextField" -componentRegistry.register('TextField', PremiumTextField, 'premium-text-field'); -console.log('Registered PremiumTextField override'); - -// 3. Render a standard TextField component node -const container = document.getElementById('app'); -if (container) { - const root = document.createElement('a2ui-root') as Root; - - const textFieldComponent = { - type: 'TextField', - id: 'tf-1', - properties: { - label: 'Enter your name', - text: 'John Doe', - }, - }; - - // Root renders its *children*, so we must pass the component as a child. - root.childComponents = [textFieldComponent]; - - root.enableCustomElements = true; // Enable the feature - container.appendChild(root); -} diff --git a/samples/client/lit/custom-components-example/ui/custom-components/web-frame.ts b/samples/client/lit/custom-components-example/ui/custom-components/web-frame.ts deleted file mode 100644 index 021bb90a72..0000000000 --- a/samples/client/lit/custom-components-example/ui/custom-components/web-frame.ts +++ /dev/null @@ -1,233 +0,0 @@ -/** - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {html, css} from 'lit'; -import {customElement, property, query} from 'lit/decorators.js'; -import {ifDefined} from 'lit/directives/if-defined.js'; -import {Root} from '@a2ui/lit/ui'; -import {v0_8} from '@a2ui/lit'; - -@customElement('a2ui-web-frame') -export class WebFrame extends Root { - static override styles = [ - ...Root.styles, - css` - :host { - display: block; - width: 100%; - border: 1px solid #eee; - position: relative; - overflow: hidden; /* For Aspect Ratio / Container */ - } - iframe { - width: 100%; - height: 100%; - border: none; - background: #f5f5f5; - } - .controls { - position: absolute; - top: 20px; - right: 20px; - display: flex; - gap: 10px; - z-index: 10; - } - .controls button { - width: 32px; - height: 32px; - font-size: 20px; - cursor: pointer; - background: white; - border: 1px solid #ccc; - border-radius: 4px; - display: flex; - align-items: center; - justify-content: center; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); - } - .controls button:hover { - background: #f0f0f0; - } - `, - ]; - - /* --- Properties (Server Contract) --- */ - - @property({type: String}) - accessor url: string = ''; - - @property({type: String}) - accessor html: string = ''; - - @property({type: Number}) - accessor height: number | undefined = undefined; - - @property({type: String}) - accessor interactionMode: 'readOnly' | 'interactive' = 'readOnly'; - - @property({type: Array}) - accessor allowedEvents: string[] = []; - - // --- Internal State --- - - @query('iframe') - accessor iframe!: HTMLIFrameElement; - - // --- Security Constants --- - static readonly TRUSTED_DOMAINS = [ - 'localhost', - '127.0.0.1', - 'openstreetmap.org', - 'youtube.com', - 'maps.google.com', - ]; - - override render() { - const sandboxAttr = this.#calculateSandbox(); - // Default to aspect ratio if no height. Use 16:9 or 4:3. - const style = this.height ? `height: ${this.height}px;` : 'aspect-ratio: 4/3;'; - - // Determine content: srcdoc (html) vs src (url) - const srcRaw = this.url; - // VERY IMPORTANT: If html is empty, do NOT pass it to srcdoc, otherwise it overrides src with blank page. - const srcDocRaw = this.html || undefined; - - return html` -
-
- - -
- -
- `; - } - - #calculateSandbox(): string { - // 1. If HTML is provided, it's treated as Trusted (but isolated) - if (this.html) { - if (this.interactionMode === 'interactive') { - return 'allow-scripts allow-forms allow-popups allow-modals'; - } - return 'allow-scripts'; // ReadOnly but scripts allowed for rendering - } - - // 2. Parse Domain from URL - try { - const urlObj = new URL(this.url, window.location.href); // Handle relative URLs too - const hostname = urlObj.hostname; - - const isTrusted = WebFrame.TRUSTED_DOMAINS.some( - d => hostname === d || hostname.endsWith(`.${d}`), - ); - - if (!isTrusted) { - // Untrusted: Strict Lockdown - return ''; - } - - // Trusted - // Always allow same-origin for trusted domains to avoid issues with local assets or CORS checks - if (this.interactionMode === 'interactive') { - return 'allow-scripts allow-forms allow-popups allow-modals allow-same-origin'; - } else { - return 'allow-scripts allow-same-origin'; - } - } catch { - // Invalid URL -> Lockdown - return ''; - } - } - - // --- Event Bridge --- - - firstUpdated() { - window.addEventListener('message', this.#onMessage); - } - - disconnectedCallback() { - window.removeEventListener('message', this.#onMessage); - super.disconnectedCallback(); - } - - #onMessage = (event: MessageEvent) => { - // In production, verify event.origin matches this.src origin (if not opaque). - const data = event.data; - - // Spec Protocol: { type: 'a2ui_action', action: '...', data: ... } - if (data && data.type === 'a2ui_action') { - const {action, data: actionData} = data; // 'data' property in message payload - - // 1. Validate Action - if (this.allowedEvents.includes(action)) { - // 2. Dispatch - this.#dispatchAgentAction(action, actionData); - } else { - console.warn( - `[WebFrame] Action '${action}' blocked. Not in allowedEvents:`, - this.allowedEvents, - ); - } - } - // Legacy support for 'emit' temporarily if we want to be safe, but spec implies replacement. - // I will remove legacy to be strict. - }; - - #dispatchAgentAction(actionName: string, params: any) { - const context: v0_8.Types.Action['context'] = []; - if (params && typeof params === 'object') { - for (const [key, value] of Object.entries(params)) { - if (typeof value === 'string') { - context.push({key, value: {literalString: value}}); - } else if (typeof value === 'number') { - context.push({key, value: {literalNumber: value}}); - } else if (typeof value === 'boolean') { - context.push({key, value: {literalBoolean: value}}); - } - } - } - - const action: v0_8.Types.Action = { - name: actionName, - context, - }; - - const eventPayload: v0_8.Events.StateEventDetailMap['a2ui.action'] = { - eventType: 'a2ui.action', - action, - sourceComponentId: this.id, - dataContextPath: this.dataContextPath, - sourceComponent: this.component as v0_8.Types.AnyComponentNode, - }; - - this.dispatchEvent(new v0_8.Events.StateEvent(eventPayload)); - } - - // --- Zoom Controls (External) --- - // Keeps working by sending 'zoom' to iframe. - // We assume the iframe content knows how to handle 'zoom' message if it supports it. - #zoom(factor: number) { - if (this.iframe && this.iframe.contentWindow) { - this.iframe.contentWindow.postMessage({type: 'zoom', payload: {factor}}, '*'); - } - } -} diff --git a/samples/client/lit/custom-components-example/ui/ui.ts b/samples/client/lit/custom-components-example/ui/ui.ts deleted file mode 100644 index 2f86cdd657..0000000000 --- a/samples/client/lit/custom-components-example/ui/ui.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export {Snackbar} from './snackbar'; diff --git a/samples/client/lit/custom-components-example/vite.config.ts b/samples/client/lit/custom-components-example/vite.config.ts deleted file mode 100644 index 4fa6e79d65..0000000000 --- a/samples/client/lit/custom-components-example/vite.config.ts +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {config} from 'dotenv'; -import {UserConfig} from 'vite'; -import * as Middleware from './middleware'; -import {dirname, resolve} from 'node:path'; -import {fileURLToPath} from 'node:url'; -import {SANDBOX_ENTRY_NAME, SANDBOX_BASE_PATH, SANDBOX_IFRAME_PATH} from './ui/shared-constants.js'; - -const __dirname = dirname(fileURLToPath(import.meta.url)); - -export default async () => { - config(); - - const entry: Record = { - contact: resolve(__dirname, 'index.html'), - [SANDBOX_ENTRY_NAME]: resolve(__dirname, `../..${SANDBOX_IFRAME_PATH}`), - }; - - return { - plugins: [ - Middleware.A2AMiddleware.plugin(), - { - name: 'serve-sandbox', - configureServer(server) { - server.middlewares.use((req, _res, next) => { - if (req.url?.startsWith(`/${SANDBOX_BASE_PATH}`)) { - let targetPath = req.url.slice(1); - // Normalize .js requests from HTML back to source .ts files for Vite bundling - if (targetPath.endsWith('.js')) { - targetPath = targetPath.slice(0, -3) + '.ts'; - } - req.url = '/@fs' + resolve(__dirname, '../../' + targetPath); - } - next(); - }); - }, - }, - ], - build: { - rollupOptions: { - input: entry, - }, - target: 'es2021', - }, - define: {}, - resolve: { - dedupe: ['lit'], - alias: { - '@a2ui/markdown-it': resolve( - __dirname, - '../../../../renderers/markdown/markdown-it/dist/src/markdown.js', - ), - 'sandbox.js': resolve(__dirname, '../../' + SANDBOX_ENTRY_NAME + '.ts'), - '@modelcontextprotocol/ext-apps/app-bridge': resolve( - __dirname, - '../node_modules/@modelcontextprotocol/ext-apps/dist/src/app-bridge.js', - ), - }, - }, - optimizeDeps: { - esbuildOptions: { - target: 'es2021', - }, - }, - server: { - host: true, // Listen on all network interfaces (0.0.0.0), enabling both localhost and 127.0.0.1 simultaneously - fs: { - allow: ['../../', './'], - }, - }, - } satisfies UserConfig; -}; diff --git a/samples/client/lit/mcp-apps-in-a2ui-sample/middleware/index.ts b/samples/client/lit/mcp-apps-in-a2ui-sample/middleware/index.ts deleted file mode 100644 index c61a5cdae2..0000000000 --- a/samples/client/lit/mcp-apps-in-a2ui-sample/middleware/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export * as A2AMiddleware from './a2a.js'; diff --git a/samples/client/lit/mcp-apps-in-a2ui-sample/tsconfig.json b/samples/client/lit/mcp-apps-in-a2ui-sample/tsconfig.json deleted file mode 100644 index 8ab8bd6ce0..0000000000 --- a/samples/client/lit/mcp-apps-in-a2ui-sample/tsconfig.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - - "compilerOptions": { - "composite": false, - "declaration": true, - "declarationMap": true, - "incremental": true, - "forceConsistentCasingInFileNames": true, - "inlineSources": false, - // "allowJs": true, - "preserveWatchOutput": true, - "sourceMap": true, - "target": "es2022", - "module": "es2022", - "lib": ["ESNext", "DOM", "DOM.Iterable"], - "skipLibCheck": true, - "useDefineForClassFields": false, - "rootDir": ".", - "outDir": "dist", - "tsBuildInfoFile": "dist/.tsbuildinfo", - - /* Bundler mode */ - "moduleResolution": "bundler", - "resolveJsonModule": true, - "isolatedModules": true, - - /* Linting */ - "strict": false, - "noUnusedLocals": false, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true, - "paths": { - "lit": ["../../../../renderers/lit/node_modules/lit"], - "lit-html": ["../../../../renderers/lit/node_modules/lit-html"], - "lit-element": ["../../../../renderers/lit/node_modules/lit-element"], - "@lit/reactive-element": ["../../../../renderers/lit/node_modules/@lit/reactive-element"], - "@lit/context": ["../../../../renderers/lit/node_modules/@lit/context"] - } - }, - "references": [{"path": "../../../../renderers/lit"}] -} diff --git a/samples/client/lit/mcp-apps-in-a2ui-sample/ui/shared-constants.ts b/samples/client/lit/mcp-apps-in-a2ui-sample/ui/shared-constants.ts deleted file mode 100644 index e9ef90f048..0000000000 --- a/samples/client/lit/mcp-apps-in-a2ui-sample/ui/shared-constants.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export const SANDBOX_BASE_PATH = 'shared/mcp_apps_inner_iframe/'; -export const SANDBOX_ENTRY_NAME = `${SANDBOX_BASE_PATH}sandbox`; -export const SANDBOX_IFRAME_PATH = `/${SANDBOX_ENTRY_NAME}.html`; diff --git a/samples/client/lit/package.json b/samples/client/lit/package.json index e26a387e50..4c8fb41c45 100644 --- a/samples/client/lit/package.json +++ b/samples/client/lit/package.json @@ -4,16 +4,13 @@ "version": "0.8.1", "description": "A2UI Lit Samples", "workspaces": [ - "custom-components-example", "shell" ], "scripts": { "serve:agent:restaurant": "cd ../../agent/adk/restaurant_finder && uv run .", - "serve:agent:orchestrator": "cd ../../agent/adk/orchestrator && uv run .", "serve:shell": "yarn workspace @a2ui/shell dev", "build:renderer": "yarn workspace @a2ui/web_core build && yarn workspace @a2ui/markdown-it build && yarn workspace @a2ui/lit build", "demo:restaurant": "yarn build:renderer && concurrently -k -n \"SHELL,REST\" -c \"magenta,blue\" \"yarn serve:shell\" \"yarn serve:agent:restaurant\"", - "demo:orchestrator": "yarn build:renderer && concurrently -k -n \"SHELL,ORCH\" -c \"magenta,cyan\" \"yarn serve:shell\" \"yarn serve:agent:orchestrator\"", "format": "prettier --write .", "format:check": "prettier --check .", "test": "node -e 'const fs=require(\"fs\"); const path=require(\"path\"); function find(d){for(const f of fs.readdirSync(d)){const p=path.join(d,f);if(f===\"node_modules\"||f===\"dist\")continue;if(fs.statSync(p).isDirectory()){if(find(p))return true;}else if(f.includes(\".test.\")||f.includes(\".spec.\"))return true;}return false;} if(find(\".\")){require(\"child_process\").execSync(\"vitest run\",{stdio:\"inherit\"});}else{console.log(\"Workspace has no tests.\");}'", diff --git a/samples/client/lit/personalized_learning/.firebaserc b/samples/client/lit/personalized_learning/.firebaserc deleted file mode 100644 index a0f1161ce2..0000000000 --- a/samples/client/lit/personalized_learning/.firebaserc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "projects": { - "default": "your-project-id" - } -} diff --git a/samples/client/lit/personalized_learning/firebase.json b/samples/client/lit/personalized_learning/firebase.json deleted file mode 100644 index a68fd535ac..0000000000 --- a/samples/client/lit/personalized_learning/firebase.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "hosting": { - "public": "public", - "ignore": [ - "firebase.json", - "**/.*", - "**/node_modules/**" - ], - "rewrites": [ - { - "source": "**", - "run": { - "serviceId": "personalized-learning-demo", - "region": "us-central1" - } - } - ] - } -} diff --git a/samples/client/lit/personalized_learning/tests/integration-tests.mjs b/samples/client/lit/personalized_learning/tests/integration-tests.mjs deleted file mode 100644 index 16349c0200..0000000000 --- a/samples/client/lit/personalized_learning/tests/integration-tests.mjs +++ /dev/null @@ -1,390 +0,0 @@ -/** - * Copyright 2026 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Integration Tests for Personalized Learning Demo - * - * Tests cross-module integration without requiring external services. - * API-dependent tests are skipped but documented for manual verification. - */ - -import {strict as assert} from 'assert'; - -console.log('='.repeat(60)); -console.log('Personalized Learning Demo - Integration Tests'); -console.log('='.repeat(60)); - -let passed = 0; -let failed = 0; -let skipped = 0; - -function test(name, fn) { - try { - fn(); - console.log(`✓ ${name}`); - passed++; - } catch (error) { - console.log(`✗ ${name}`); - console.log(` Error: ${error.message}`); - failed++; - } -} - -function skipTest(name, reason) { - console.log(`○ ${name} (skipped: ${reason})`); - skipped++; -} - -// ============================================================================= -// Chat Flow Integration Tests -// ============================================================================= - -console.log('\n--- Chat Flow Integration Tests ---\n'); - -// Simulate the full chat flow from message to A2UI rendering -function simulateChatFlow(userMessage) { - // Step 1: Intent detection - const lower = userMessage.toLowerCase(); - let format = 'general'; - - if (lower.includes('flashcard')) format = 'flashcards'; - else if (lower.includes('podcast') || lower.includes('audio')) format = 'audio'; - else if (lower.includes('video')) format = 'video'; - else if (lower.includes('quiz')) format = 'quiz'; - else if (lower.match(/^(hi|hello|hey)/i)) format = 'greeting'; - else if (lower.includes('explain') || lower.includes('atp')) format = 'flashcards'; - - // Step 2: Get content (simulated) - let content; - if (format === 'greeting') { - content = {format: 'greeting', response: 'Hello! How can I help you?'}; - } else if (['flashcards', 'audio', 'video'].includes(format)) { - content = getFallbackContent(format); - } else { - content = {format: 'general', response: 'I understand. Let me help you.'}; - } - - // Step 3: Prepare for rendering - const result = { - originalMessage: userMessage, - detectedFormat: format, - hasA2UI: !!content.a2ui, - contentType: content.format, - }; - - if (content.a2ui) { - result.a2uiMessageCount = content.a2ui.length; - result.componentCount = content.a2ui - .filter(m => m.surfaceUpdate) - .reduce((sum, m) => sum + m.surfaceUpdate.components.length, 0); - } - - return result; -} - -function getFallbackContent(format) { - const surfaceId = 'learningContent'; - - const contents = { - flashcards: { - format: 'flashcards', - surfaceId, - a2ui: [ - {beginRendering: {surfaceId, root: 'mainColumn'}}, - { - surfaceUpdate: { - surfaceId, - components: [ - { - id: 'mainColumn', - component: {Column: {children: {explicitList: ['card1']}}}, - }, - { - id: 'card1', - component: { - Flashcard: {front: {literalString: 'Q?'}, back: {literalString: 'A!'}}, - }, - }, - ], - }, - }, - ], - }, - audio: { - format: 'audio', - surfaceId, - a2ui: [ - {beginRendering: {surfaceId, root: 'audioCard'}}, - { - surfaceUpdate: { - surfaceId, - components: [ - {id: 'audioCard', component: {Card: {child: 'audioPlayer'}}}, - { - id: 'audioPlayer', - component: {Audio: {src: {literalString: '/assets/podcast.m4a'}}}, - }, - ], - }, - }, - ], - }, - video: { - format: 'video', - surfaceId, - a2ui: [ - {beginRendering: {surfaceId, root: 'videoCard'}}, - { - surfaceUpdate: { - surfaceId, - components: [ - {id: 'videoCard', component: {Card: {child: 'videoPlayer'}}}, - { - id: 'videoPlayer', - component: {Video: {src: {literalString: '/assets/video.mp4'}}}, - }, - ], - }, - }, - ], - }, - }; - - return contents[format] || {format: 'unknown', a2ui: []}; -} - -test('chat flow handles flashcard request end-to-end', () => { - const result = simulateChatFlow('Create some flashcards about ATP'); - assert.equal(result.detectedFormat, 'flashcards'); - assert.ok(result.hasA2UI); - assert.equal(result.contentType, 'flashcards'); - assert.equal(result.a2uiMessageCount, 2); -}); - -test('chat flow handles audio request end-to-end', () => { - const result = simulateChatFlow('I want to listen to the podcast'); - assert.equal(result.detectedFormat, 'audio'); - assert.ok(result.hasA2UI); - assert.equal(result.contentType, 'audio'); -}); - -test('chat flow handles video request end-to-end', () => { - const result = simulateChatFlow('Show me a video about this'); - assert.equal(result.detectedFormat, 'video'); - assert.ok(result.hasA2UI); - assert.equal(result.contentType, 'video'); -}); - -test('chat flow handles greeting without A2UI', () => { - const result = simulateChatFlow('Hello there!'); - assert.equal(result.detectedFormat, 'greeting'); - assert.ok(!result.hasA2UI); - assert.equal(result.contentType, 'greeting'); -}); - -test('chat flow handles general question', () => { - const result = simulateChatFlow("What's the weather like?"); - assert.equal(result.detectedFormat, 'general'); - assert.ok(!result.hasA2UI); -}); - -// ============================================================================= -// A2UI Component Hierarchy Tests -// ============================================================================= - -console.log('\n--- A2UI Component Hierarchy Tests ---\n'); - -function buildComponentTree(components) { - const componentMap = new Map(components.map(c => [c.id, c])); - const tree = {roots: [], orphans: []}; - const referenced = new Set(); - - for (const comp of components) { - const def = comp.component; - const type = Object.keys(def)[0]; - const props = def[type]; - - if (props?.child) { - referenced.add(props.child); - } - if (props?.children?.explicitList) { - props.children.explicitList.forEach(id => referenced.add(id)); - } - } - - for (const comp of components) { - if (!referenced.has(comp.id)) { - tree.roots.push(comp.id); - } - } - - return tree; -} - -test('component tree identifies root components', () => { - const components = [ - {id: 'root', component: {Column: {children: {explicitList: ['child1', 'child2']}}}}, - {id: 'child1', component: {Text: {text: {literalString: 'A'}}}}, - {id: 'child2', component: {Text: {text: {literalString: 'B'}}}}, - ]; - const tree = buildComponentTree(components); - assert.deepEqual(tree.roots, ['root']); -}); - -test('component tree handles Card with single child', () => { - const components = [ - {id: 'card', component: {Card: {child: 'content'}}}, - {id: 'content', component: {Text: {text: {literalString: 'Hello'}}}}, - ]; - const tree = buildComponentTree(components); - assert.deepEqual(tree.roots, ['card']); -}); - -// ============================================================================= -// Surface State Management Tests -// ============================================================================= - -console.log('\n--- Surface State Management Tests ---\n'); - -class MockSurfaceManager { - constructor() { - this.surfaces = new Map(); - } - - processMessage(message) { - if (message.beginRendering) { - const {surfaceId, root} = message.beginRendering; - this.surfaces.set(surfaceId, {root, components: new Map(), rendered: false}); - return {action: 'begin', surfaceId}; - } - - if (message.surfaceUpdate) { - const {surfaceId, components} = message.surfaceUpdate; - const surface = this.surfaces.get(surfaceId); - if (!surface) { - return {action: 'error', error: `Unknown surface: ${surfaceId}`}; - } - - for (const comp of components) { - surface.components.set(comp.id, comp.component); - } - surface.rendered = true; - return {action: 'update', surfaceId, componentCount: components.length}; - } - - if (message.deleteSurface) { - const {surfaceId} = message.deleteSurface; - this.surfaces.delete(surfaceId); - return {action: 'delete', surfaceId}; - } - - return {action: 'unknown'}; - } - - getSurface(surfaceId) { - return this.surfaces.get(surfaceId); - } -} - -test('surface manager processes beginRendering', () => { - const manager = new MockSurfaceManager(); - const result = manager.processMessage({beginRendering: {surfaceId: 'test', root: 'main'}}); - assert.equal(result.action, 'begin'); - assert.ok(manager.getSurface('test')); -}); - -test('surface manager processes surfaceUpdate', () => { - const manager = new MockSurfaceManager(); - manager.processMessage({beginRendering: {surfaceId: 'test', root: 'main'}}); - const result = manager.processMessage({ - surfaceUpdate: { - surfaceId: 'test', - components: [{id: 'main', component: {Text: {text: {literalString: 'Hello'}}}}], - }, - }); - assert.equal(result.action, 'update'); - assert.equal(result.componentCount, 1); - assert.ok(manager.getSurface('test').rendered); -}); - -test('surface manager processes deleteSurface', () => { - const manager = new MockSurfaceManager(); - manager.processMessage({beginRendering: {surfaceId: 'test', root: 'main'}}); - const result = manager.processMessage({deleteSurface: {surfaceId: 'test'}}); - assert.equal(result.action, 'delete'); - assert.ok(!manager.getSurface('test')); -}); - -test('surface manager handles full A2UI payload', () => { - const manager = new MockSurfaceManager(); - const payload = getFallbackContent('flashcards').a2ui; - - for (const msg of payload) { - manager.processMessage(msg); - } - - const surface = manager.getSurface('learningContent'); - assert.ok(surface); - assert.ok(surface.rendered); - assert.ok(surface.components.size > 0); -}); - -// ============================================================================= -// Error Handling Integration Tests -// ============================================================================= - -console.log('\n--- Error Handling Integration Tests ---\n'); - -test('graceful handling of unknown surface update', () => { - const manager = new MockSurfaceManager(); - const result = manager.processMessage({ - surfaceUpdate: {surfaceId: 'nonexistent', components: []}, - }); - assert.equal(result.action, 'error'); - assert.ok(result.error.includes('Unknown surface')); -}); - -test('content fallback returns valid structure for all formats', () => { - const formats = ['flashcards', 'audio', 'video']; - for (const format of formats) { - const content = getFallbackContent(format); - assert.equal(content.format, format, `Format mismatch for ${format}`); - assert.ok(Array.isArray(content.a2ui), `A2UI not array for ${format}`); - assert.ok(content.a2ui.length >= 2, `A2UI too short for ${format}`); - } -}); - -// ============================================================================= -// API Integration Tests (require external services) -// ============================================================================= - -console.log('\n--- API Integration Tests ---\n'); - -skipTest('Gemini API generates valid flashcard JSON', 'requires API credentials'); -skipTest('A2A agent returns valid A2UI response', 'requires agent server'); -skipTest('Full chat flow with live Gemini API', 'requires API credentials'); - -// ============================================================================= -// Summary -// ============================================================================= - -console.log('\n' + '='.repeat(60)); -console.log(`Integration Tests Complete: ${passed} passed, ${failed} failed, ${skipped} skipped`); -console.log('='.repeat(60)); - -if (failed > 0) { - process.exit(1); -} diff --git a/samples/client/lit/personalized_learning/tests/unit-tests.mjs b/samples/client/lit/personalized_learning/tests/unit-tests.mjs deleted file mode 100644 index 0b666473f5..0000000000 --- a/samples/client/lit/personalized_learning/tests/unit-tests.mjs +++ /dev/null @@ -1,767 +0,0 @@ -/** - * Copyright 2026 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Unit Tests for Personalized Learning Demo - * - * Tests the core functionality of the A2A client, chat orchestrator logic, - * and A2UI rendering without requiring external services. - */ - -import {strict as assert} from 'assert'; - -console.log('='.repeat(60)); -console.log('Personalized Learning Demo - Unit Tests'); -console.log('='.repeat(60)); - -let passed = 0; -let failed = 0; - -function test(name, fn) { - try { - fn(); - console.log(`✓ ${name}`); - passed++; - } catch (error) { - console.log(`✗ ${name}`); - console.log(` Error: ${error.message}`); - failed++; - } -} - -// ============================================================================= -// A2A Client Fallback Content Tests -// ============================================================================= - -console.log('\n--- A2A Client Fallback Content Tests ---\n'); - -// Full fallback content matching a2a-client.ts exactly -function getFallbackContent(format) { - const surfaceId = 'learningContent'; - - switch (format.toLowerCase()) { - case 'flashcards': - return { - format: 'flashcards', - surfaceId, - a2ui: [ - {beginRendering: {surfaceId, root: 'mainColumn'}}, - { - surfaceUpdate: { - surfaceId, - components: [ - { - id: 'mainColumn', - component: { - Column: { - children: {explicitList: ['headerText', 'flashcardRow']}, - distribution: 'start', - alignment: 'stretch', - }, - }, - }, - { - id: 'headerText', - component: { - Text: { - text: {literalString: 'Study Flashcards: ATP & Bond Energy'}, - usageHint: 'h3', - }, - }, - }, - { - id: 'flashcardRow', - component: { - Row: { - children: {explicitList: ['card1', 'card2', 'card3']}, - distribution: 'start', - alignment: 'stretch', - }, - }, - }, - { - id: 'card1', - component: { - Flashcard: { - front: {literalString: 'Why does ATP hydrolysis release energy?'}, - back: { - literalString: - 'Because the products (ADP + Pi) are MORE STABLE than ATP due to reduced electrostatic repulsion and better resonance stabilization.', - }, - category: {literalString: 'Biochemistry'}, - }, - }, - }, - { - id: 'card2', - component: { - Flashcard: { - front: {literalString: 'Does breaking a bond release energy?'}, - back: { - literalString: - 'NO! Breaking ANY bond REQUIRES energy input. Energy is released when new, more stable bonds FORM.', - }, - category: {literalString: 'Chemistry'}, - }, - }, - }, - { - id: 'card3', - component: { - Flashcard: { - front: {literalString: 'Think of ATP like... (gym analogy)'}, - back: { - literalString: - "A compressed spring or holding a plank position! It's in a high-energy, unstable state. Releasing to a relaxed state (ADP + Pi) releases that stored potential energy.", - }, - category: {literalString: 'MCAT Analogy'}, - }, - }, - }, - ], - }, - }, - ], - }; - - case 'podcast': - case 'audio': - return { - format: 'audio', - surfaceId, - a2ui: [ - {beginRendering: {surfaceId, root: 'audioCard'}}, - { - surfaceUpdate: { - surfaceId, - components: [ - { - id: 'audioCard', - component: {Card: {child: 'audioContent'}}, - }, - { - id: 'audioContent', - component: { - Column: { - children: { - explicitList: ['audioHeader', 'audioPlayer', 'audioDescription'], - }, - distribution: 'start', - alignment: 'stretch', - }, - }, - }, - { - id: 'audioHeader', - component: { - Row: { - children: {explicitList: ['audioIcon', 'audioTitle']}, - distribution: 'start', - alignment: 'center', - }, - }, - }, - { - id: 'audioIcon', - component: { - Icon: {name: {literalString: 'podcasts'}}, - }, - }, - { - id: 'audioTitle', - component: { - Text: { - text: { - literalString: 'ATP & Chemical Stability: Correcting the Misconception', - }, - usageHint: 'h3', - }, - }, - }, - { - id: 'audioPlayer', - component: { - Audio: { - src: {literalString: '/assets/podcast.m4a'}, - title: {literalString: 'Understanding ATP Energy Release'}, - }, - }, - }, - { - id: 'audioDescription', - component: { - Text: { - text: { - literalString: - "This personalized podcast uses gym analogies to explain why 'energy stored in bonds' is a misconception. Perfect for your MCAT prep!", - }, - usageHint: 'body', - }, - }, - }, - ], - }, - }, - ], - }; - - case 'video': - return { - format: 'video', - surfaceId, - a2ui: [ - {beginRendering: {surfaceId, root: 'videoCard'}}, - { - surfaceUpdate: { - surfaceId, - components: [ - { - id: 'videoCard', - component: {Card: {child: 'videoContent'}}, - }, - { - id: 'videoContent', - component: { - Column: { - children: {explicitList: ['videoTitle', 'videoPlayer', 'videoDescription']}, - distribution: 'start', - alignment: 'stretch', - }, - }, - }, - { - id: 'videoTitle', - component: { - Text: { - text: {literalString: 'Visual Guide: ATP Energy & Stability'}, - usageHint: 'h3', - }, - }, - }, - { - id: 'videoPlayer', - component: { - Video: { - src: {literalString: '/assets/video.mp4'}, - title: {literalString: 'ATP Hydrolysis Explained'}, - }, - }, - }, - { - id: 'videoDescription', - component: { - Text: { - text: { - literalString: - 'Watch the compressed spring analogy in action to understand why ATP releases energy through stability differences.', - }, - usageHint: 'body', - }, - }, - }, - ], - }, - }, - ], - }; - - default: - return { - format: 'error', - surfaceId, - a2ui: [], - error: `Unknown format: ${format}`, - }; - } -} - -test('getFallbackContent returns valid flashcard structure', () => { - const result = getFallbackContent('flashcards'); - assert.equal(result.format, 'flashcards'); - assert.equal(result.surfaceId, 'learningContent'); - assert.ok(Array.isArray(result.a2ui)); - assert.equal(result.a2ui.length, 2); - assert.ok(result.a2ui[0].beginRendering); - assert.ok(result.a2ui[1].surfaceUpdate); -}); - -test('getFallbackContent returns valid audio structure', () => { - const result = getFallbackContent('audio'); - assert.equal(result.format, 'audio'); - assert.ok(result.a2ui[0].beginRendering); - assert.equal(result.a2ui[0].beginRendering.root, 'audioCard'); -}); - -test('getFallbackContent handles podcast as audio', () => { - const result = getFallbackContent('podcast'); - assert.equal(result.format, 'audio'); -}); - -test('getFallbackContent returns valid video structure', () => { - const result = getFallbackContent('video'); - assert.equal(result.format, 'video'); - assert.ok(result.a2ui[0].beginRendering); -}); - -test('getFallbackContent returns error for unknown format', () => { - const result = getFallbackContent('unknown'); - assert.equal(result.format, 'error'); - assert.ok(result.error.includes('Unknown format')); -}); - -// ============================================================================= -// Intent Detection Tests (from chat-orchestrator.ts logic) -// ============================================================================= - -console.log('\n--- Intent Detection Tests ---\n'); - -function detectIntent(message) { - const lower = message.toLowerCase(); - - if ( - lower.includes('flashcard') || - lower.includes('flash card') || - lower.includes('study cards') || - lower.includes('review cards') - ) { - return 'flashcards'; - } - - if (lower.includes('podcast') || lower.includes('listen') || lower.includes('audio')) { - return 'podcast'; - } - - if (lower.includes('video') || lower.includes('watch') || lower.includes('show me')) { - return 'video'; - } - - if (lower.includes('quiz') || lower.includes('test me') || lower.includes('practice question')) { - return 'quiz'; - } - - if (lower.match(/^(hi|hello|hey|good morning|good afternoon|good evening)/i)) { - return 'greeting'; - } - - if ( - lower.includes('help me understand') || - lower.includes('explain') || - lower.includes('teach me') || - lower.includes('learn about') || - (lower.includes('atp') && (lower.includes('energy') || lower.includes('bond'))) || - lower.includes('misconception') - ) { - return 'flashcards'; - } - - return 'general'; -} - -test('detectIntent identifies flashcard requests', () => { - assert.equal(detectIntent('Create flashcards for me'), 'flashcards'); - assert.equal(detectIntent('Show me some study cards'), 'flashcards'); - assert.equal(detectIntent('I need review cards'), 'flashcards'); -}); - -test('detectIntent identifies podcast/audio requests', () => { - assert.equal(detectIntent('Play the podcast'), 'podcast'); - assert.equal(detectIntent('I want to listen to something'), 'podcast'); - assert.equal(detectIntent('Give me audio content'), 'podcast'); -}); - -test('detectIntent identifies video requests', () => { - assert.equal(detectIntent('Show me a video'), 'video'); - assert.equal(detectIntent('I want to watch something'), 'video'); - assert.equal(detectIntent('Can you show me the explanation?'), 'video'); -}); - -test('detectIntent identifies quiz requests', () => { - assert.equal(detectIntent('Quiz me on this'), 'quiz'); - assert.equal(detectIntent('Test me please'), 'quiz'); - assert.equal(detectIntent('Give me a practice question'), 'quiz'); -}); - -test('detectIntent identifies greetings', () => { - assert.equal(detectIntent('Hi there!'), 'greeting'); - assert.equal(detectIntent('Hello'), 'greeting'); - assert.equal(detectIntent('Hey, how are you?'), 'greeting'); - assert.equal(detectIntent('Good morning'), 'greeting'); -}); - -test('detectIntent defaults to flashcards for learning requests', () => { - assert.equal(detectIntent('Help me understand ATP'), 'flashcards'); - assert.equal(detectIntent('Explain bond energy to me'), 'flashcards'); - assert.equal(detectIntent('I have a misconception about this'), 'flashcards'); -}); - -test('detectIntent returns general for unrecognized messages', () => { - assert.equal(detectIntent("What's the weather?"), 'general'); - assert.equal(detectIntent('Tell me a joke'), 'general'); -}); - -// ============================================================================= -// A2UI Message Structure Tests -// ============================================================================= - -console.log('\n--- A2UI Message Structure Tests ---\n'); - -function validateA2UIMessage(message) { - // A valid A2UI message should have exactly one of these keys - const validKeys = ['beginRendering', 'surfaceUpdate', 'dataModelUpdate', 'deleteSurface']; - const keys = Object.keys(message); - const matchingKeys = keys.filter(k => validKeys.includes(k)); - - if (matchingKeys.length !== 1) { - return { - valid: false, - error: `Expected exactly one of ${validKeys.join(', ')}, got ${matchingKeys.length}`, - }; - } - - const key = matchingKeys[0]; - - if (key === 'beginRendering') { - const br = message.beginRendering; - if (!br.surfaceId || !br.root) { - return {valid: false, error: 'beginRendering requires surfaceId and root'}; - } - } - - if (key === 'surfaceUpdate') { - const su = message.surfaceUpdate; - if (!su.surfaceId || !Array.isArray(su.components)) { - return {valid: false, error: 'surfaceUpdate requires surfaceId and components array'}; - } - for (const comp of su.components) { - if (!comp.id || !comp.component) { - return {valid: false, error: 'Each component needs id and component properties'}; - } - } - } - - return {valid: true}; -} - -test('validateA2UIMessage accepts valid beginRendering', () => { - const msg = {beginRendering: {surfaceId: 'test', root: 'main'}}; - const result = validateA2UIMessage(msg); - assert.ok(result.valid, result.error); -}); - -test('validateA2UIMessage rejects beginRendering without surfaceId', () => { - const msg = {beginRendering: {root: 'main'}}; - const result = validateA2UIMessage(msg); - assert.ok(!result.valid); -}); - -test('validateA2UIMessage accepts valid surfaceUpdate', () => { - const msg = { - surfaceUpdate: { - surfaceId: 'test', - components: [{id: 'comp1', component: {Text: {text: {literalString: 'Hello'}}}}], - }, - }; - const result = validateA2UIMessage(msg); - assert.ok(result.valid, result.error); -}); - -test('validateA2UIMessage rejects surfaceUpdate without components', () => { - const msg = {surfaceUpdate: {surfaceId: 'test'}}; - const result = validateA2UIMessage(msg); - assert.ok(!result.valid); -}); - -test('validateA2UIMessage rejects message with multiple action types', () => { - const msg = { - beginRendering: {surfaceId: 'test', root: 'main'}, - surfaceUpdate: {surfaceId: 'test', components: []}, - }; - const result = validateA2UIMessage(msg); - assert.ok(!result.valid); -}); - -// ============================================================================= -// Component ID Validation Tests -// ============================================================================= - -console.log('\n--- Component ID Validation Tests ---\n'); - -function validateComponentIds(components) { - const ids = new Set(); - const errors = []; - - for (const comp of components) { - if (!comp.id) { - errors.push('Component missing id'); - continue; - } - if (ids.has(comp.id)) { - errors.push(`Duplicate component id: ${comp.id}`); - } - ids.add(comp.id); - } - - return {valid: errors.length === 0, errors}; -} - -test('validateComponentIds accepts unique ids', () => { - const components = [ - {id: 'comp1', component: {}}, - {id: 'comp2', component: {}}, - {id: 'comp3', component: {}}, - ]; - const result = validateComponentIds(components); - assert.ok(result.valid); -}); - -test('validateComponentIds rejects duplicate ids', () => { - const components = [ - {id: 'comp1', component: {}}, - {id: 'comp1', component: {}}, - ]; - const result = validateComponentIds(components); - assert.ok(!result.valid); - assert.ok(result.errors.some(e => e.includes('Duplicate'))); -}); - -test('validateComponentIds rejects missing ids', () => { - const components = [{id: 'comp1', component: {}}, {component: {}}]; - const result = validateComponentIds(components); - assert.ok(!result.valid); - assert.ok(result.errors.some(e => e.includes('missing id'))); -}); - -// ============================================================================= -// Children Reference Validation Tests -// ============================================================================= - -console.log('\n--- Children Reference Validation Tests ---\n'); - -function validateChildrenReferences(components) { - const ids = new Set(components.map(c => c.id).filter(Boolean)); - const errors = []; - - for (const comp of components) { - const componentDef = comp.component; - if (!componentDef) continue; - - const componentType = Object.keys(componentDef)[0]; - const props = componentDef[componentType]; - - // Check single child reference - if (props?.child && typeof props.child === 'string') { - if (!ids.has(props.child)) { - errors.push(`Component ${comp.id} references non-existent child: ${props.child}`); - } - } - - // Check children list - if (props?.children?.explicitList) { - for (const childId of props.children.explicitList) { - if (!ids.has(childId)) { - errors.push(`Component ${comp.id} references non-existent child: ${childId}`); - } - } - } - } - - return {valid: errors.length === 0, errors}; -} - -test('validateChildrenReferences accepts valid references', () => { - const components = [ - {id: 'parent', component: {Column: {children: {explicitList: ['child1', 'child2']}}}}, - {id: 'child1', component: {Text: {text: {literalString: 'Hello'}}}}, - {id: 'child2', component: {Text: {text: {literalString: 'World'}}}}, - ]; - const result = validateChildrenReferences(components); - assert.ok(result.valid, result.errors.join(', ')); -}); - -test('validateChildrenReferences catches invalid child reference', () => { - const components = [ - {id: 'parent', component: {Column: {children: {explicitList: ['child1', 'missing']}}}}, - {id: 'child1', component: {Text: {text: {literalString: 'Hello'}}}}, - ]; - const result = validateChildrenReferences(components); - assert.ok(!result.valid); - assert.ok(result.errors.some(e => e.includes('missing'))); -}); - -test('validateChildrenReferences validates single child prop', () => { - const components = [ - {id: 'card', component: {Card: {child: 'content'}}}, - {id: 'content', component: {Text: {text: {literalString: 'Hello'}}}}, - ]; - const result = validateChildrenReferences(components); - assert.ok(result.valid, result.errors.join(', ')); -}); - -// ============================================================================= -// Flashcard Content Validation Tests -// ============================================================================= - -console.log('\n--- Flashcard Content Validation Tests ---\n'); - -function validateFlashcard(component) { - const errors = []; - const fc = component.Flashcard; - - if (!fc) { - return {valid: false, errors: ['Not a Flashcard component']}; - } - - if (!fc.front) { - errors.push('Flashcard missing front property'); - } else if (!fc.front.literalString && !fc.front.path) { - errors.push('Flashcard front must have literalString or path'); - } - - if (!fc.back) { - errors.push('Flashcard missing back property'); - } else if (!fc.back.literalString && !fc.back.path) { - errors.push('Flashcard back must have literalString or path'); - } - - return {valid: errors.length === 0, errors}; -} - -test('validateFlashcard accepts valid flashcard', () => { - const component = { - Flashcard: { - front: {literalString: 'Question?'}, - back: {literalString: 'Answer!'}, - category: {literalString: 'Test'}, - }, - }; - const result = validateFlashcard(component); - assert.ok(result.valid, result.errors.join(', ')); -}); - -test('validateFlashcard rejects flashcard without front', () => { - const component = { - Flashcard: { - back: {literalString: 'Answer!'}, - }, - }; - const result = validateFlashcard(component); - assert.ok(!result.valid); - assert.ok(result.errors.some(e => e.includes('front'))); -}); - -test('validateFlashcard rejects flashcard without back', () => { - const component = { - Flashcard: { - front: {literalString: 'Question?'}, - }, - }; - const result = validateFlashcard(component); - assert.ok(!result.valid); - assert.ok(result.errors.some(e => e.includes('back'))); -}); - -// ============================================================================= -// Full A2UI Payload Validation Tests -// ============================================================================= - -console.log('\n--- Full A2UI Payload Validation Tests ---\n'); - -function validateA2UIPayload(messages) { - const errors = []; - - if (!Array.isArray(messages)) { - return {valid: false, errors: ['Payload must be an array']}; - } - - if (messages.length === 0) { - return {valid: false, errors: ['Payload cannot be empty']}; - } - - // Check that first message is beginRendering - if (!messages[0].beginRendering) { - errors.push('First message should be beginRendering'); - } - - // Validate each message - for (let i = 0; i < messages.length; i++) { - const msgResult = validateA2UIMessage(messages[i]); - if (!msgResult.valid) { - errors.push(`Message ${i}: ${msgResult.error}`); - } - } - - // Collect all components and validate - const allComponents = []; - for (const msg of messages) { - if (msg.surfaceUpdate?.components) { - allComponents.push(...msg.surfaceUpdate.components); - } - } - - if (allComponents.length > 0) { - const idResult = validateComponentIds(allComponents); - if (!idResult.valid) { - errors.push(...idResult.errors); - } - - const refResult = validateChildrenReferences(allComponents); - if (!refResult.valid) { - errors.push(...refResult.errors); - } - } - - return {valid: errors.length === 0, errors}; -} - -test('validateA2UIPayload accepts valid flashcard payload', () => { - const payload = getFallbackContent('flashcards').a2ui; - const result = validateA2UIPayload(payload); - assert.ok(result.valid, result.errors.join(', ')); -}); - -test('validateA2UIPayload accepts valid audio payload', () => { - const payload = getFallbackContent('audio').a2ui; - const result = validateA2UIPayload(payload); - assert.ok(result.valid, result.errors.join(', ')); -}); - -test('validateA2UIPayload accepts valid video payload', () => { - const payload = getFallbackContent('video').a2ui; - const result = validateA2UIPayload(payload); - assert.ok(result.valid, result.errors.join(', ')); -}); - -test('validateA2UIPayload rejects non-array', () => { - const result = validateA2UIPayload('not an array'); - assert.ok(!result.valid); -}); - -test('validateA2UIPayload rejects empty array', () => { - const result = validateA2UIPayload([]); - assert.ok(!result.valid); -}); - -// ============================================================================= -// Summary -// ============================================================================= - -console.log('\n' + '='.repeat(60)); -console.log(`Unit Tests Complete: ${passed} passed, ${failed} failed`); -console.log('='.repeat(60)); - -if (failed > 0) { - process.exit(1); -} diff --git a/samples/client/lit/shell/app.ts b/samples/client/lit/shell/app.ts index 49161c7a66..5e3f47e4cc 100644 --- a/samples/client/lit/shell/app.ts +++ b/samples/client/lit/shell/app.ts @@ -18,8 +18,8 @@ import {SignalWatcher} from '@lit-labs/signals'; import {provide} from '@lit/context'; import {LitElement, html, css, nothing} from 'lit'; import {customElement, state, query} from 'lit/decorators.js'; -import {SnackbarMessage, SnackType} from '../custom-components-example/types/types.js'; -import {Snackbar} from '../custom-components-example/ui/snackbar.js'; +import {SnackbarMessage, SnackType} from './types/types.js'; +import {Snackbar} from './ui/snackbar.js'; import {repeat} from 'lit/directives/repeat.js'; // A2UI diff --git a/samples/client/lit/custom-components-example/events/events.ts b/samples/client/lit/shell/events/events.ts similarity index 100% rename from samples/client/lit/custom-components-example/events/events.ts rename to samples/client/lit/shell/events/events.ts diff --git a/samples/client/lit/custom-components-example/types/types.ts b/samples/client/lit/shell/types/types.ts similarity index 100% rename from samples/client/lit/custom-components-example/types/types.ts rename to samples/client/lit/shell/types/types.ts diff --git a/samples/client/lit/custom-components-example/ui/snackbar.ts b/samples/client/lit/shell/ui/snackbar.ts similarity index 100% rename from samples/client/lit/custom-components-example/ui/snackbar.ts rename to samples/client/lit/shell/ui/snackbar.ts diff --git a/samples/community/.gitignore b/samples/community/.gitignore new file mode 100644 index 0000000000..e8bcd231e5 --- /dev/null +++ b/samples/community/.gitignore @@ -0,0 +1,23 @@ +# Dependencies +node_modules/ +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/sdks +!.yarn/versions +.pnp.* + +# Build output +dist/ +out-tsc/ +.angular/ +.wireit/ +*.tsbuildinfo + +# Python +.venv/ +__pycache__/ +*.py[cod] + +# Misc +.DS_Store diff --git a/samples/community/.yarnrc.yml b/samples/community/.yarnrc.yml new file mode 100644 index 0000000000..7c4990cea0 --- /dev/null +++ b/samples/community/.yarnrc.yml @@ -0,0 +1,23 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# This folder is self-contained community code. It depends on the published +# @a2ui/* packages from the public npm registry (not the monorepo workspace), +# so the @a2ui scope is pinned here to the public registry to override any +# private registry configured by a parent .yarnrc.yml. +nodeLinker: node-modules + +npmScopes: + a2ui: + npmRegistryServer: "https://registry.npmjs.org" diff --git a/samples/community/README.md b/samples/community/README.md new file mode 100644 index 0000000000..baacb1c330 --- /dev/null +++ b/samples/community/README.md @@ -0,0 +1,22 @@ +This folder contains code that is not maintained. + +It is self-contained so it can be lifted into its own repository: the samples +depend on the published `@a2ui/*` (npm) and `a2ui-agent-sdk` (PyPI) packages +rather than on the monorepo workspace, and the folder carries its own +`package.json` / `.yarnrc.yml` / `yarn.lock`. + +## CI + +`.github/workflows/community_code.yml` validates this folder on changes: + +- **web** — `yarn install` then builds the Angular (`a2a-chat-canvas`, + `orchestrator`) and Lit (`mcp-apps-in-a2ui-sample`, `personalized_learning`) + samples. +- **python** — `uv sync` for each agent under `agent/adk`. + +### Not built + +`client/angular/projects/mcp_calculator` is excluded from the build: it imports +the renderer's internal v0.8 source (`Renderer` from `@a2ui/angular`'s +`src/v0_8`), which the published package does not expose. Building it standalone +would require vendoring the renderer source. diff --git a/samples/agent/adk/gemini_enterprise/README.md b/samples/community/agent/adk/gemini_enterprise/README.md similarity index 100% rename from samples/agent/adk/gemini_enterprise/README.md rename to samples/community/agent/adk/gemini_enterprise/README.md diff --git a/samples/agent/adk/gemini_enterprise/agent_engine/.env.example b/samples/community/agent/adk/gemini_enterprise/agent_engine/.env.example similarity index 100% rename from samples/agent/adk/gemini_enterprise/agent_engine/.env.example rename to samples/community/agent/adk/gemini_enterprise/agent_engine/.env.example diff --git a/samples/agent/adk/gemini_enterprise/agent_engine/.gcloudignore b/samples/community/agent/adk/gemini_enterprise/agent_engine/.gcloudignore similarity index 100% rename from samples/agent/adk/gemini_enterprise/agent_engine/.gcloudignore rename to samples/community/agent/adk/gemini_enterprise/agent_engine/.gcloudignore diff --git a/samples/agent/adk/gemini_enterprise/agent_engine/README.md b/samples/community/agent/adk/gemini_enterprise/agent_engine/README.md similarity index 100% rename from samples/agent/adk/gemini_enterprise/agent_engine/README.md rename to samples/community/agent/adk/gemini_enterprise/agent_engine/README.md diff --git a/samples/agent/adk/gemini_enterprise/agent_engine/__init__.py b/samples/community/agent/adk/gemini_enterprise/agent_engine/__init__.py similarity index 100% rename from samples/agent/adk/gemini_enterprise/agent_engine/__init__.py rename to samples/community/agent/adk/gemini_enterprise/agent_engine/__init__.py diff --git a/samples/agent/adk/gemini_enterprise/agent_engine/agent.py b/samples/community/agent/adk/gemini_enterprise/agent_engine/agent.py similarity index 100% rename from samples/agent/adk/gemini_enterprise/agent_engine/agent.py rename to samples/community/agent/adk/gemini_enterprise/agent_engine/agent.py diff --git a/samples/agent/adk/gemini_enterprise/agent_engine/agent_executor.py b/samples/community/agent/adk/gemini_enterprise/agent_engine/agent_executor.py similarity index 100% rename from samples/agent/adk/gemini_enterprise/agent_engine/agent_executor.py rename to samples/community/agent/adk/gemini_enterprise/agent_engine/agent_executor.py diff --git a/samples/agent/adk/gemini_enterprise/agent_engine/contact_data.json b/samples/community/agent/adk/gemini_enterprise/agent_engine/contact_data.json similarity index 100% rename from samples/agent/adk/gemini_enterprise/agent_engine/contact_data.json rename to samples/community/agent/adk/gemini_enterprise/agent_engine/contact_data.json diff --git a/samples/agent/adk/gemini_enterprise/agent_engine/deploy.py b/samples/community/agent/adk/gemini_enterprise/agent_engine/deploy.py similarity index 100% rename from samples/agent/adk/gemini_enterprise/agent_engine/deploy.py rename to samples/community/agent/adk/gemini_enterprise/agent_engine/deploy.py diff --git a/samples/agent/adk/gemini_enterprise/agent_engine/examples/0.8/action_confirmation.json b/samples/community/agent/adk/gemini_enterprise/agent_engine/examples/0.8/action_confirmation.json similarity index 100% rename from samples/agent/adk/gemini_enterprise/agent_engine/examples/0.8/action_confirmation.json rename to samples/community/agent/adk/gemini_enterprise/agent_engine/examples/0.8/action_confirmation.json diff --git a/samples/agent/adk/gemini_enterprise/agent_engine/examples/0.8/contact_card.json b/samples/community/agent/adk/gemini_enterprise/agent_engine/examples/0.8/contact_card.json similarity index 100% rename from samples/agent/adk/gemini_enterprise/agent_engine/examples/0.8/contact_card.json rename to samples/community/agent/adk/gemini_enterprise/agent_engine/examples/0.8/contact_card.json diff --git a/samples/agent/adk/gemini_enterprise/agent_engine/examples/0.8/contact_list.json b/samples/community/agent/adk/gemini_enterprise/agent_engine/examples/0.8/contact_list.json similarity index 100% rename from samples/agent/adk/gemini_enterprise/agent_engine/examples/0.8/contact_list.json rename to samples/community/agent/adk/gemini_enterprise/agent_engine/examples/0.8/contact_list.json diff --git a/samples/agent/adk/gemini_enterprise/agent_engine/examples/0.8/follow_success.json b/samples/community/agent/adk/gemini_enterprise/agent_engine/examples/0.8/follow_success.json similarity index 100% rename from samples/agent/adk/gemini_enterprise/agent_engine/examples/0.8/follow_success.json rename to samples/community/agent/adk/gemini_enterprise/agent_engine/examples/0.8/follow_success.json diff --git a/samples/agent/adk/gemini_enterprise/agent_engine/prompt_builder.py b/samples/community/agent/adk/gemini_enterprise/agent_engine/prompt_builder.py similarity index 100% rename from samples/agent/adk/gemini_enterprise/agent_engine/prompt_builder.py rename to samples/community/agent/adk/gemini_enterprise/agent_engine/prompt_builder.py diff --git a/samples/agent/adk/gemini_enterprise/agent_engine/pyproject.toml b/samples/community/agent/adk/gemini_enterprise/agent_engine/pyproject.toml similarity index 100% rename from samples/agent/adk/gemini_enterprise/agent_engine/pyproject.toml rename to samples/community/agent/adk/gemini_enterprise/agent_engine/pyproject.toml diff --git a/samples/agent/adk/gemini_enterprise/agent_engine/tools.py b/samples/community/agent/adk/gemini_enterprise/agent_engine/tools.py similarity index 100% rename from samples/agent/adk/gemini_enterprise/agent_engine/tools.py rename to samples/community/agent/adk/gemini_enterprise/agent_engine/tools.py diff --git a/samples/agent/adk/gemini_enterprise/agent_engine/uv.lock b/samples/community/agent/adk/gemini_enterprise/agent_engine/uv.lock similarity index 100% rename from samples/agent/adk/gemini_enterprise/agent_engine/uv.lock rename to samples/community/agent/adk/gemini_enterprise/agent_engine/uv.lock diff --git a/samples/agent/adk/gemini_enterprise/cloud_run/.gcloudignore b/samples/community/agent/adk/gemini_enterprise/cloud_run/.gcloudignore similarity index 100% rename from samples/agent/adk/gemini_enterprise/cloud_run/.gcloudignore rename to samples/community/agent/adk/gemini_enterprise/cloud_run/.gcloudignore diff --git a/samples/agent/adk/gemini_enterprise/cloud_run/README.md b/samples/community/agent/adk/gemini_enterprise/cloud_run/README.md similarity index 100% rename from samples/agent/adk/gemini_enterprise/cloud_run/README.md rename to samples/community/agent/adk/gemini_enterprise/cloud_run/README.md diff --git a/samples/agent/adk/gemini_enterprise/cloud_run/__init__.py b/samples/community/agent/adk/gemini_enterprise/cloud_run/__init__.py similarity index 100% rename from samples/agent/adk/gemini_enterprise/cloud_run/__init__.py rename to samples/community/agent/adk/gemini_enterprise/cloud_run/__init__.py diff --git a/samples/agent/adk/gemini_enterprise/cloud_run/agent.py b/samples/community/agent/adk/gemini_enterprise/cloud_run/agent.py similarity index 100% rename from samples/agent/adk/gemini_enterprise/cloud_run/agent.py rename to samples/community/agent/adk/gemini_enterprise/cloud_run/agent.py diff --git a/samples/agent/adk/gemini_enterprise/cloud_run/agent_executor.py b/samples/community/agent/adk/gemini_enterprise/cloud_run/agent_executor.py similarity index 100% rename from samples/agent/adk/gemini_enterprise/cloud_run/agent_executor.py rename to samples/community/agent/adk/gemini_enterprise/cloud_run/agent_executor.py diff --git a/samples/agent/adk/gemini_enterprise/cloud_run/contact_data.json b/samples/community/agent/adk/gemini_enterprise/cloud_run/contact_data.json similarity index 100% rename from samples/agent/adk/gemini_enterprise/cloud_run/contact_data.json rename to samples/community/agent/adk/gemini_enterprise/cloud_run/contact_data.json diff --git a/samples/agent/adk/gemini_enterprise/cloud_run/deploy.sh b/samples/community/agent/adk/gemini_enterprise/cloud_run/deploy.sh similarity index 100% rename from samples/agent/adk/gemini_enterprise/cloud_run/deploy.sh rename to samples/community/agent/adk/gemini_enterprise/cloud_run/deploy.sh diff --git a/samples/agent/adk/gemini_enterprise/cloud_run/examples/0.8/action_confirmation.json b/samples/community/agent/adk/gemini_enterprise/cloud_run/examples/0.8/action_confirmation.json similarity index 100% rename from samples/agent/adk/gemini_enterprise/cloud_run/examples/0.8/action_confirmation.json rename to samples/community/agent/adk/gemini_enterprise/cloud_run/examples/0.8/action_confirmation.json diff --git a/samples/agent/adk/gemini_enterprise/cloud_run/examples/0.8/contact_card.json b/samples/community/agent/adk/gemini_enterprise/cloud_run/examples/0.8/contact_card.json similarity index 100% rename from samples/agent/adk/gemini_enterprise/cloud_run/examples/0.8/contact_card.json rename to samples/community/agent/adk/gemini_enterprise/cloud_run/examples/0.8/contact_card.json diff --git a/samples/agent/adk/gemini_enterprise/cloud_run/examples/0.8/contact_list.json b/samples/community/agent/adk/gemini_enterprise/cloud_run/examples/0.8/contact_list.json similarity index 100% rename from samples/agent/adk/gemini_enterprise/cloud_run/examples/0.8/contact_list.json rename to samples/community/agent/adk/gemini_enterprise/cloud_run/examples/0.8/contact_list.json diff --git a/samples/agent/adk/gemini_enterprise/cloud_run/examples/0.8/follow_success.json b/samples/community/agent/adk/gemini_enterprise/cloud_run/examples/0.8/follow_success.json similarity index 100% rename from samples/agent/adk/gemini_enterprise/cloud_run/examples/0.8/follow_success.json rename to samples/community/agent/adk/gemini_enterprise/cloud_run/examples/0.8/follow_success.json diff --git a/samples/agent/adk/gemini_enterprise/cloud_run/main.py b/samples/community/agent/adk/gemini_enterprise/cloud_run/main.py similarity index 100% rename from samples/agent/adk/gemini_enterprise/cloud_run/main.py rename to samples/community/agent/adk/gemini_enterprise/cloud_run/main.py diff --git a/samples/agent/adk/gemini_enterprise/cloud_run/prompt_builder.py b/samples/community/agent/adk/gemini_enterprise/cloud_run/prompt_builder.py similarity index 100% rename from samples/agent/adk/gemini_enterprise/cloud_run/prompt_builder.py rename to samples/community/agent/adk/gemini_enterprise/cloud_run/prompt_builder.py diff --git a/samples/agent/adk/gemini_enterprise/cloud_run/pyproject.toml b/samples/community/agent/adk/gemini_enterprise/cloud_run/pyproject.toml similarity index 100% rename from samples/agent/adk/gemini_enterprise/cloud_run/pyproject.toml rename to samples/community/agent/adk/gemini_enterprise/cloud_run/pyproject.toml diff --git a/samples/agent/adk/gemini_enterprise/cloud_run/tools.py b/samples/community/agent/adk/gemini_enterprise/cloud_run/tools.py similarity index 100% rename from samples/agent/adk/gemini_enterprise/cloud_run/tools.py rename to samples/community/agent/adk/gemini_enterprise/cloud_run/tools.py diff --git a/samples/agent/adk/gemini_enterprise/cloud_run/uv.lock b/samples/community/agent/adk/gemini_enterprise/cloud_run/uv.lock similarity index 100% rename from samples/agent/adk/gemini_enterprise/cloud_run/uv.lock rename to samples/community/agent/adk/gemini_enterprise/cloud_run/uv.lock diff --git a/samples/agent/adk/mcp-apps-in-a2ui-sample/README.md b/samples/community/agent/adk/mcp-apps-in-a2ui-sample/README.md similarity index 100% rename from samples/agent/adk/mcp-apps-in-a2ui-sample/README.md rename to samples/community/agent/adk/mcp-apps-in-a2ui-sample/README.md diff --git a/samples/agent/adk/mcp-apps-in-a2ui-sample/agent.py b/samples/community/agent/adk/mcp-apps-in-a2ui-sample/agent.py similarity index 100% rename from samples/agent/adk/mcp-apps-in-a2ui-sample/agent.py rename to samples/community/agent/adk/mcp-apps-in-a2ui-sample/agent.py diff --git a/samples/agent/adk/mcp-apps-in-a2ui-sample/catalog-schema.json b/samples/community/agent/adk/mcp-apps-in-a2ui-sample/catalog-schema.json similarity index 100% rename from samples/agent/adk/mcp-apps-in-a2ui-sample/catalog-schema.json rename to samples/community/agent/adk/mcp-apps-in-a2ui-sample/catalog-schema.json diff --git a/samples/agent/adk/mcp-apps-in-a2ui-sample/mcp_app.html b/samples/community/agent/adk/mcp-apps-in-a2ui-sample/mcp_app.html similarity index 100% rename from samples/agent/adk/mcp-apps-in-a2ui-sample/mcp_app.html rename to samples/community/agent/adk/mcp-apps-in-a2ui-sample/mcp_app.html diff --git a/samples/agent/adk/mcp-apps-in-a2ui-sample/pyproject.toml b/samples/community/agent/adk/mcp-apps-in-a2ui-sample/pyproject.toml similarity index 100% rename from samples/agent/adk/mcp-apps-in-a2ui-sample/pyproject.toml rename to samples/community/agent/adk/mcp-apps-in-a2ui-sample/pyproject.toml diff --git a/samples/agent/adk/mcp-apps-in-a2ui-sample/uv.lock b/samples/community/agent/adk/mcp-apps-in-a2ui-sample/uv.lock similarity index 100% rename from samples/agent/adk/mcp-apps-in-a2ui-sample/uv.lock rename to samples/community/agent/adk/mcp-apps-in-a2ui-sample/uv.lock diff --git a/samples/agent/adk/mcp_app_proxy/.env.example b/samples/community/agent/adk/mcp_app_proxy/.env.example similarity index 100% rename from samples/agent/adk/mcp_app_proxy/.env.example rename to samples/community/agent/adk/mcp_app_proxy/.env.example diff --git a/samples/agent/adk/mcp_app_proxy/README.md b/samples/community/agent/adk/mcp_app_proxy/README.md similarity index 100% rename from samples/agent/adk/mcp_app_proxy/README.md rename to samples/community/agent/adk/mcp_app_proxy/README.md diff --git a/samples/agent/adk/mcp_app_proxy/__init__.py b/samples/community/agent/adk/mcp_app_proxy/__init__.py similarity index 100% rename from samples/agent/adk/mcp_app_proxy/__init__.py rename to samples/community/agent/adk/mcp_app_proxy/__init__.py diff --git a/samples/agent/adk/mcp_app_proxy/__main__.py b/samples/community/agent/adk/mcp_app_proxy/__main__.py similarity index 100% rename from samples/agent/adk/mcp_app_proxy/__main__.py rename to samples/community/agent/adk/mcp_app_proxy/__main__.py diff --git a/samples/agent/adk/mcp_app_proxy/agent.py b/samples/community/agent/adk/mcp_app_proxy/agent.py similarity index 100% rename from samples/agent/adk/mcp_app_proxy/agent.py rename to samples/community/agent/adk/mcp_app_proxy/agent.py diff --git a/samples/agent/adk/mcp_app_proxy/agent_executor.py b/samples/community/agent/adk/mcp_app_proxy/agent_executor.py similarity index 100% rename from samples/agent/adk/mcp_app_proxy/agent_executor.py rename to samples/community/agent/adk/mcp_app_proxy/agent_executor.py diff --git a/samples/agent/adk/mcp_app_proxy/catalogs/0.8/mcp_app_catalog.json b/samples/community/agent/adk/mcp_app_proxy/catalogs/0.8/mcp_app_catalog.json similarity index 100% rename from samples/agent/adk/mcp_app_proxy/catalogs/0.8/mcp_app_catalog.json rename to samples/community/agent/adk/mcp_app_proxy/catalogs/0.8/mcp_app_catalog.json diff --git a/samples/agent/adk/mcp_app_proxy/catalogs/0.9/mcp_app_catalog.json b/samples/community/agent/adk/mcp_app_proxy/catalogs/0.9/mcp_app_catalog.json similarity index 100% rename from samples/agent/adk/mcp_app_proxy/catalogs/0.9/mcp_app_catalog.json rename to samples/community/agent/adk/mcp_app_proxy/catalogs/0.9/mcp_app_catalog.json diff --git a/samples/agent/adk/mcp_app_proxy/pong_app.html b/samples/community/agent/adk/mcp_app_proxy/pong_app.html similarity index 100% rename from samples/agent/adk/mcp_app_proxy/pong_app.html rename to samples/community/agent/adk/mcp_app_proxy/pong_app.html diff --git a/samples/agent/adk/mcp_app_proxy/pyproject.toml b/samples/community/agent/adk/mcp_app_proxy/pyproject.toml similarity index 90% rename from samples/agent/adk/mcp_app_proxy/pyproject.toml rename to samples/community/agent/adk/mcp_app_proxy/pyproject.toml index 0c2c0048c7..18c1ad744b 100644 --- a/samples/agent/adk/mcp_app_proxy/pyproject.toml +++ b/samples/community/agent/adk/mcp_app_proxy/pyproject.toml @@ -28,7 +28,7 @@ dependencies = [ "python-dotenv>=1.1.0", "litellm", "jsonschema>=4.0.0", - "a2ui-agent-sdk", + "a2ui-agent-sdk>=0.2.4", "uvicorn", "starlette", "mcp", @@ -44,6 +44,3 @@ build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["."] - -[tool.uv.sources] -a2ui-agent-sdk = { path = "../../../../agent_sdks/python/a2ui_agent", editable = true } diff --git a/samples/agent/adk/mcp_app_proxy/tools.py b/samples/community/agent/adk/mcp_app_proxy/tools.py similarity index 100% rename from samples/agent/adk/mcp_app_proxy/tools.py rename to samples/community/agent/adk/mcp_app_proxy/tools.py diff --git a/samples/agent/adk/orchestrator/.env.example b/samples/community/agent/adk/orchestrator/.env.example similarity index 100% rename from samples/agent/adk/orchestrator/.env.example rename to samples/community/agent/adk/orchestrator/.env.example diff --git a/samples/agent/adk/orchestrator/README.md b/samples/community/agent/adk/orchestrator/README.md similarity index 100% rename from samples/agent/adk/orchestrator/README.md rename to samples/community/agent/adk/orchestrator/README.md diff --git a/samples/agent/adk/orchestrator/__init__.py b/samples/community/agent/adk/orchestrator/__init__.py similarity index 100% rename from samples/agent/adk/orchestrator/__init__.py rename to samples/community/agent/adk/orchestrator/__init__.py diff --git a/samples/agent/adk/orchestrator/__main__.py b/samples/community/agent/adk/orchestrator/__main__.py similarity index 100% rename from samples/agent/adk/orchestrator/__main__.py rename to samples/community/agent/adk/orchestrator/__main__.py diff --git a/samples/agent/adk/orchestrator/agent.py b/samples/community/agent/adk/orchestrator/agent.py similarity index 100% rename from samples/agent/adk/orchestrator/agent.py rename to samples/community/agent/adk/orchestrator/agent.py diff --git a/samples/agent/adk/orchestrator/agent_executor.py b/samples/community/agent/adk/orchestrator/agent_executor.py similarity index 100% rename from samples/agent/adk/orchestrator/agent_executor.py rename to samples/community/agent/adk/orchestrator/agent_executor.py diff --git a/samples/agent/adk/orchestrator/part_converters.py b/samples/community/agent/adk/orchestrator/part_converters.py similarity index 100% rename from samples/agent/adk/orchestrator/part_converters.py rename to samples/community/agent/adk/orchestrator/part_converters.py diff --git a/samples/agent/adk/orchestrator/pyproject.toml b/samples/community/agent/adk/orchestrator/pyproject.toml similarity index 90% rename from samples/agent/adk/orchestrator/pyproject.toml rename to samples/community/agent/adk/orchestrator/pyproject.toml index bb516d1f63..a04c996330 100644 --- a/samples/agent/adk/orchestrator/pyproject.toml +++ b/samples/community/agent/adk/orchestrator/pyproject.toml @@ -26,7 +26,7 @@ dependencies = [ "python-dotenv>=1.1.0", "litellm", "jsonschema>=4.0.0", - "a2ui-agent-sdk", + "a2ui-agent-sdk>=0.2.4", ] [tool.hatch.build.targets.wheel] @@ -43,6 +43,3 @@ allow-direct-references = true [[tool.uv.index]] url = "https://pypi.org/simple" default = true - -[tool.uv.sources] -a2ui-agent-sdk = { path = "../../../../agent_sdks/python/a2ui_agent", editable = true } diff --git a/samples/agent/adk/orchestrator/subagent_route_manager.py b/samples/community/agent/adk/orchestrator/subagent_route_manager.py similarity index 100% rename from samples/agent/adk/orchestrator/subagent_route_manager.py rename to samples/community/agent/adk/orchestrator/subagent_route_manager.py diff --git a/samples/agent/adk/personalized_learning/__init__.py b/samples/community/agent/adk/personalized_learning/__init__.py similarity index 100% rename from samples/agent/adk/personalized_learning/__init__.py rename to samples/community/agent/adk/personalized_learning/__init__.py diff --git a/samples/agent/adk/personalized_learning/a2ui_templates.py b/samples/community/agent/adk/personalized_learning/a2ui_templates.py similarity index 100% rename from samples/agent/adk/personalized_learning/a2ui_templates.py rename to samples/community/agent/adk/personalized_learning/a2ui_templates.py diff --git a/samples/agent/adk/personalized_learning/agent.py b/samples/community/agent/adk/personalized_learning/agent.py similarity index 100% rename from samples/agent/adk/personalized_learning/agent.py rename to samples/community/agent/adk/personalized_learning/agent.py diff --git a/samples/agent/adk/personalized_learning/context_loader.py b/samples/community/agent/adk/personalized_learning/context_loader.py similarity index 100% rename from samples/agent/adk/personalized_learning/context_loader.py rename to samples/community/agent/adk/personalized_learning/context_loader.py diff --git a/samples/agent/adk/personalized_learning/download_openstax.py b/samples/community/agent/adk/personalized_learning/download_openstax.py similarity index 100% rename from samples/agent/adk/personalized_learning/download_openstax.py rename to samples/community/agent/adk/personalized_learning/download_openstax.py diff --git a/samples/agent/adk/personalized_learning/learner_context/01_maria_learner_profile.txt b/samples/community/agent/adk/personalized_learning/learner_context/01_maria_learner_profile.txt similarity index 100% rename from samples/agent/adk/personalized_learning/learner_context/01_maria_learner_profile.txt rename to samples/community/agent/adk/personalized_learning/learner_context/01_maria_learner_profile.txt diff --git a/samples/agent/adk/personalized_learning/learner_context/02_chemistry_bond_energy.txt b/samples/community/agent/adk/personalized_learning/learner_context/02_chemistry_bond_energy.txt similarity index 100% rename from samples/agent/adk/personalized_learning/learner_context/02_chemistry_bond_energy.txt rename to samples/community/agent/adk/personalized_learning/learner_context/02_chemistry_bond_energy.txt diff --git a/samples/agent/adk/personalized_learning/learner_context/03_chemistry_thermodynamics.txt b/samples/community/agent/adk/personalized_learning/learner_context/03_chemistry_thermodynamics.txt similarity index 100% rename from samples/agent/adk/personalized_learning/learner_context/03_chemistry_thermodynamics.txt rename to samples/community/agent/adk/personalized_learning/learner_context/03_chemistry_thermodynamics.txt diff --git a/samples/agent/adk/personalized_learning/learner_context/04_biology_atp_cellular_respiration.txt b/samples/community/agent/adk/personalized_learning/learner_context/04_biology_atp_cellular_respiration.txt similarity index 100% rename from samples/agent/adk/personalized_learning/learner_context/04_biology_atp_cellular_respiration.txt rename to samples/community/agent/adk/personalized_learning/learner_context/04_biology_atp_cellular_respiration.txt diff --git a/samples/agent/adk/personalized_learning/learner_context/05_misconception_resolution.txt b/samples/community/agent/adk/personalized_learning/learner_context/05_misconception_resolution.txt similarity index 100% rename from samples/agent/adk/personalized_learning/learner_context/05_misconception_resolution.txt rename to samples/community/agent/adk/personalized_learning/learner_context/05_misconception_resolution.txt diff --git a/samples/agent/adk/personalized_learning/learner_context/06_mcat_practice_concepts.txt b/samples/community/agent/adk/personalized_learning/learner_context/06_mcat_practice_concepts.txt similarity index 100% rename from samples/agent/adk/personalized_learning/learner_context/06_mcat_practice_concepts.txt rename to samples/community/agent/adk/personalized_learning/learner_context/06_mcat_practice_concepts.txt diff --git a/samples/agent/adk/personalized_learning/openstax_chapters.py b/samples/community/agent/adk/personalized_learning/openstax_chapters.py similarity index 100% rename from samples/agent/adk/personalized_learning/openstax_chapters.py rename to samples/community/agent/adk/personalized_learning/openstax_chapters.py diff --git a/samples/agent/adk/personalized_learning/openstax_content.py b/samples/community/agent/adk/personalized_learning/openstax_content.py similarity index 100% rename from samples/agent/adk/personalized_learning/openstax_content.py rename to samples/community/agent/adk/personalized_learning/openstax_content.py diff --git a/samples/agent/adk/personalized_learning/openstax_modules.py b/samples/community/agent/adk/personalized_learning/openstax_modules.py similarity index 100% rename from samples/agent/adk/personalized_learning/openstax_modules.py rename to samples/community/agent/adk/personalized_learning/openstax_modules.py diff --git a/samples/agent/adk/personalized_learning/pyproject.toml b/samples/community/agent/adk/personalized_learning/pyproject.toml similarity index 100% rename from samples/agent/adk/personalized_learning/pyproject.toml rename to samples/community/agent/adk/personalized_learning/pyproject.toml diff --git a/samples/agent/adk/personalized_learning/requirements.txt b/samples/community/agent/adk/personalized_learning/requirements.txt similarity index 100% rename from samples/agent/adk/personalized_learning/requirements.txt rename to samples/community/agent/adk/personalized_learning/requirements.txt diff --git a/samples/agent/adk/personalized_learning/tests/test_integration.py b/samples/community/agent/adk/personalized_learning/tests/test_integration.py similarity index 100% rename from samples/agent/adk/personalized_learning/tests/test_integration.py rename to samples/community/agent/adk/personalized_learning/tests/test_integration.py diff --git a/samples/agent/adk/rizzcharts/catalog_schemas/0.8/rizzcharts_catalog_definition.json b/samples/community/agent/adk/rizzcharts/catalog_schemas/0.8/rizzcharts_catalog_definition.json similarity index 100% rename from samples/agent/adk/rizzcharts/catalog_schemas/0.8/rizzcharts_catalog_definition.json rename to samples/community/agent/adk/rizzcharts/catalog_schemas/0.8/rizzcharts_catalog_definition.json diff --git a/samples/agent/adk/rizzcharts/catalog_schemas/0.9/rizzcharts_catalog_definition.json b/samples/community/agent/adk/rizzcharts/catalog_schemas/0.9/rizzcharts_catalog_definition.json similarity index 100% rename from samples/agent/adk/rizzcharts/catalog_schemas/0.9/rizzcharts_catalog_definition.json rename to samples/community/agent/adk/rizzcharts/catalog_schemas/0.9/rizzcharts_catalog_definition.json diff --git a/samples/agent/adk/rizzcharts/examples/rizzcharts_catalog/0.8/chart.json b/samples/community/agent/adk/rizzcharts/examples/rizzcharts_catalog/0.8/chart.json similarity index 100% rename from samples/agent/adk/rizzcharts/examples/rizzcharts_catalog/0.8/chart.json rename to samples/community/agent/adk/rizzcharts/examples/rizzcharts_catalog/0.8/chart.json diff --git a/samples/agent/adk/rizzcharts/examples/rizzcharts_catalog/0.8/map.json b/samples/community/agent/adk/rizzcharts/examples/rizzcharts_catalog/0.8/map.json similarity index 100% rename from samples/agent/adk/rizzcharts/examples/rizzcharts_catalog/0.8/map.json rename to samples/community/agent/adk/rizzcharts/examples/rizzcharts_catalog/0.8/map.json diff --git a/samples/agent/adk/rizzcharts/examples/rizzcharts_catalog/0.9/chart.json b/samples/community/agent/adk/rizzcharts/examples/rizzcharts_catalog/0.9/chart.json similarity index 100% rename from samples/agent/adk/rizzcharts/examples/rizzcharts_catalog/0.9/chart.json rename to samples/community/agent/adk/rizzcharts/examples/rizzcharts_catalog/0.9/chart.json diff --git a/samples/agent/adk/rizzcharts/examples/rizzcharts_catalog/0.9/map.json b/samples/community/agent/adk/rizzcharts/examples/rizzcharts_catalog/0.9/map.json similarity index 100% rename from samples/agent/adk/rizzcharts/examples/rizzcharts_catalog/0.9/map.json rename to samples/community/agent/adk/rizzcharts/examples/rizzcharts_catalog/0.9/map.json diff --git a/samples/agent/adk/rizzcharts/examples/standard_catalog/0.8/chart.json b/samples/community/agent/adk/rizzcharts/examples/standard_catalog/0.8/chart.json similarity index 100% rename from samples/agent/adk/rizzcharts/examples/standard_catalog/0.8/chart.json rename to samples/community/agent/adk/rizzcharts/examples/standard_catalog/0.8/chart.json diff --git a/samples/agent/adk/rizzcharts/examples/standard_catalog/0.8/map.json b/samples/community/agent/adk/rizzcharts/examples/standard_catalog/0.8/map.json similarity index 100% rename from samples/agent/adk/rizzcharts/examples/standard_catalog/0.8/map.json rename to samples/community/agent/adk/rizzcharts/examples/standard_catalog/0.8/map.json diff --git a/samples/agent/adk/rizzcharts/examples/standard_catalog/0.9/chart.json b/samples/community/agent/adk/rizzcharts/examples/standard_catalog/0.9/chart.json similarity index 100% rename from samples/agent/adk/rizzcharts/examples/standard_catalog/0.9/chart.json rename to samples/community/agent/adk/rizzcharts/examples/standard_catalog/0.9/chart.json diff --git a/samples/agent/adk/rizzcharts/examples/standard_catalog/0.9/map.json b/samples/community/agent/adk/rizzcharts/examples/standard_catalog/0.9/map.json similarity index 100% rename from samples/agent/adk/rizzcharts/examples/standard_catalog/0.9/map.json rename to samples/community/agent/adk/rizzcharts/examples/standard_catalog/0.9/map.json diff --git a/samples/agent/adk/rizzcharts/java/.gitignore b/samples/community/agent/adk/rizzcharts/java/.gitignore similarity index 100% rename from samples/agent/adk/rizzcharts/java/.gitignore rename to samples/community/agent/adk/rizzcharts/java/.gitignore diff --git a/samples/agent/adk/rizzcharts/java/build.gradle.kts b/samples/community/agent/adk/rizzcharts/java/build.gradle.kts similarity index 100% rename from samples/agent/adk/rizzcharts/java/build.gradle.kts rename to samples/community/agent/adk/rizzcharts/java/build.gradle.kts diff --git a/samples/agent/adk/rizzcharts/java/gradle/wrapper/gradle-wrapper.properties b/samples/community/agent/adk/rizzcharts/java/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from samples/agent/adk/rizzcharts/java/gradle/wrapper/gradle-wrapper.properties rename to samples/community/agent/adk/rizzcharts/java/gradle/wrapper/gradle-wrapper.properties diff --git a/samples/agent/adk/rizzcharts/java/gradlew b/samples/community/agent/adk/rizzcharts/java/gradlew similarity index 100% rename from samples/agent/adk/rizzcharts/java/gradlew rename to samples/community/agent/adk/rizzcharts/java/gradlew diff --git a/samples/agent/adk/rizzcharts/java/gradlew.bat b/samples/community/agent/adk/rizzcharts/java/gradlew.bat similarity index 100% rename from samples/agent/adk/rizzcharts/java/gradlew.bat rename to samples/community/agent/adk/rizzcharts/java/gradlew.bat diff --git a/samples/agent/adk/rizzcharts/java/settings.gradle.kts b/samples/community/agent/adk/rizzcharts/java/settings.gradle.kts similarity index 100% rename from samples/agent/adk/rizzcharts/java/settings.gradle.kts rename to samples/community/agent/adk/rizzcharts/java/settings.gradle.kts diff --git a/samples/agent/adk/rizzcharts/java/src/main/java/com/google/a2ui/samples/rizzcharts/RizzchartsAgent.java b/samples/community/agent/adk/rizzcharts/java/src/main/java/com/google/a2ui/samples/rizzcharts/RizzchartsAgent.java similarity index 100% rename from samples/agent/adk/rizzcharts/java/src/main/java/com/google/a2ui/samples/rizzcharts/RizzchartsAgent.java rename to samples/community/agent/adk/rizzcharts/java/src/main/java/com/google/a2ui/samples/rizzcharts/RizzchartsAgent.java diff --git a/samples/agent/adk/rizzcharts/java/src/main/java/com/google/a2ui/samples/rizzcharts/RizzchartsAgentExecutor.java b/samples/community/agent/adk/rizzcharts/java/src/main/java/com/google/a2ui/samples/rizzcharts/RizzchartsAgentExecutor.java similarity index 100% rename from samples/agent/adk/rizzcharts/java/src/main/java/com/google/a2ui/samples/rizzcharts/RizzchartsAgentExecutor.java rename to samples/community/agent/adk/rizzcharts/java/src/main/java/com/google/a2ui/samples/rizzcharts/RizzchartsAgentExecutor.java diff --git a/samples/agent/adk/rizzcharts/java/src/main/java/com/google/a2ui/samples/rizzcharts/RizzchartsMain.java b/samples/community/agent/adk/rizzcharts/java/src/main/java/com/google/a2ui/samples/rizzcharts/RizzchartsMain.java similarity index 100% rename from samples/agent/adk/rizzcharts/java/src/main/java/com/google/a2ui/samples/rizzcharts/RizzchartsMain.java rename to samples/community/agent/adk/rizzcharts/java/src/main/java/com/google/a2ui/samples/rizzcharts/RizzchartsMain.java diff --git a/samples/agent/adk/rizzcharts/java/src/main/java/com/google/a2ui/samples/rizzcharts/RizzchartsTools.java b/samples/community/agent/adk/rizzcharts/java/src/main/java/com/google/a2ui/samples/rizzcharts/RizzchartsTools.java similarity index 100% rename from samples/agent/adk/rizzcharts/java/src/main/java/com/google/a2ui/samples/rizzcharts/RizzchartsTools.java rename to samples/community/agent/adk/rizzcharts/java/src/main/java/com/google/a2ui/samples/rizzcharts/RizzchartsTools.java diff --git a/samples/agent/adk/rizzcharts/java/src/main/resources/application.properties b/samples/community/agent/adk/rizzcharts/java/src/main/resources/application.properties similarity index 100% rename from samples/agent/adk/rizzcharts/java/src/main/resources/application.properties rename to samples/community/agent/adk/rizzcharts/java/src/main/resources/application.properties diff --git a/samples/agent/adk/rizzcharts/java/src/main/resources/examples/rizzcharts_catalog/chart.json b/samples/community/agent/adk/rizzcharts/java/src/main/resources/examples/rizzcharts_catalog/chart.json similarity index 100% rename from samples/agent/adk/rizzcharts/java/src/main/resources/examples/rizzcharts_catalog/chart.json rename to samples/community/agent/adk/rizzcharts/java/src/main/resources/examples/rizzcharts_catalog/chart.json diff --git a/samples/agent/adk/rizzcharts/java/src/main/resources/examples/rizzcharts_catalog/map.json b/samples/community/agent/adk/rizzcharts/java/src/main/resources/examples/rizzcharts_catalog/map.json similarity index 100% rename from samples/agent/adk/rizzcharts/java/src/main/resources/examples/rizzcharts_catalog/map.json rename to samples/community/agent/adk/rizzcharts/java/src/main/resources/examples/rizzcharts_catalog/map.json diff --git a/samples/agent/adk/rizzcharts/java/src/main/resources/examples/standard_catalog/chart.json b/samples/community/agent/adk/rizzcharts/java/src/main/resources/examples/standard_catalog/chart.json similarity index 100% rename from samples/agent/adk/rizzcharts/java/src/main/resources/examples/standard_catalog/chart.json rename to samples/community/agent/adk/rizzcharts/java/src/main/resources/examples/standard_catalog/chart.json diff --git a/samples/agent/adk/rizzcharts/java/src/main/resources/examples/standard_catalog/map.json b/samples/community/agent/adk/rizzcharts/java/src/main/resources/examples/standard_catalog/map.json similarity index 100% rename from samples/agent/adk/rizzcharts/java/src/main/resources/examples/standard_catalog/map.json rename to samples/community/agent/adk/rizzcharts/java/src/main/resources/examples/standard_catalog/map.json diff --git a/samples/agent/adk/rizzcharts/java/src/main/resources/rizzcharts_catalog_definition.json b/samples/community/agent/adk/rizzcharts/java/src/main/resources/rizzcharts_catalog_definition.json similarity index 100% rename from samples/agent/adk/rizzcharts/java/src/main/resources/rizzcharts_catalog_definition.json rename to samples/community/agent/adk/rizzcharts/java/src/main/resources/rizzcharts_catalog_definition.json diff --git a/samples/agent/adk/rizzcharts/kotlin/.gitignore b/samples/community/agent/adk/rizzcharts/kotlin/.gitignore similarity index 100% rename from samples/agent/adk/rizzcharts/kotlin/.gitignore rename to samples/community/agent/adk/rizzcharts/kotlin/.gitignore diff --git a/samples/agent/adk/rizzcharts/kotlin/build.gradle.kts b/samples/community/agent/adk/rizzcharts/kotlin/build.gradle.kts similarity index 100% rename from samples/agent/adk/rizzcharts/kotlin/build.gradle.kts rename to samples/community/agent/adk/rizzcharts/kotlin/build.gradle.kts diff --git a/samples/agent/adk/rizzcharts/kotlin/compile_output.txt b/samples/community/agent/adk/rizzcharts/kotlin/compile_output.txt similarity index 100% rename from samples/agent/adk/rizzcharts/kotlin/compile_output.txt rename to samples/community/agent/adk/rizzcharts/kotlin/compile_output.txt diff --git a/samples/agent/adk/rizzcharts/kotlin/gradle/wrapper/gradle-wrapper.properties b/samples/community/agent/adk/rizzcharts/kotlin/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from samples/agent/adk/rizzcharts/kotlin/gradle/wrapper/gradle-wrapper.properties rename to samples/community/agent/adk/rizzcharts/kotlin/gradle/wrapper/gradle-wrapper.properties diff --git a/samples/agent/adk/rizzcharts/kotlin/gradlew b/samples/community/agent/adk/rizzcharts/kotlin/gradlew similarity index 100% rename from samples/agent/adk/rizzcharts/kotlin/gradlew rename to samples/community/agent/adk/rizzcharts/kotlin/gradlew diff --git a/samples/agent/adk/rizzcharts/kotlin/gradlew.bat b/samples/community/agent/adk/rizzcharts/kotlin/gradlew.bat similarity index 100% rename from samples/agent/adk/rizzcharts/kotlin/gradlew.bat rename to samples/community/agent/adk/rizzcharts/kotlin/gradlew.bat diff --git a/samples/agent/adk/rizzcharts/kotlin/settings.gradle.kts b/samples/community/agent/adk/rizzcharts/kotlin/settings.gradle.kts similarity index 100% rename from samples/agent/adk/rizzcharts/kotlin/settings.gradle.kts rename to samples/community/agent/adk/rizzcharts/kotlin/settings.gradle.kts diff --git a/samples/agent/adk/rizzcharts/kotlin/src/main/kotlin/com/google/a2ui/samples/rizzcharts/RizzchartsAgent.kt b/samples/community/agent/adk/rizzcharts/kotlin/src/main/kotlin/com/google/a2ui/samples/rizzcharts/RizzchartsAgent.kt similarity index 100% rename from samples/agent/adk/rizzcharts/kotlin/src/main/kotlin/com/google/a2ui/samples/rizzcharts/RizzchartsAgent.kt rename to samples/community/agent/adk/rizzcharts/kotlin/src/main/kotlin/com/google/a2ui/samples/rizzcharts/RizzchartsAgent.kt diff --git a/samples/agent/adk/rizzcharts/kotlin/src/main/kotlin/com/google/a2ui/samples/rizzcharts/RizzchartsAgentExecutor.kt b/samples/community/agent/adk/rizzcharts/kotlin/src/main/kotlin/com/google/a2ui/samples/rizzcharts/RizzchartsAgentExecutor.kt similarity index 100% rename from samples/agent/adk/rizzcharts/kotlin/src/main/kotlin/com/google/a2ui/samples/rizzcharts/RizzchartsAgentExecutor.kt rename to samples/community/agent/adk/rizzcharts/kotlin/src/main/kotlin/com/google/a2ui/samples/rizzcharts/RizzchartsAgentExecutor.kt diff --git a/samples/agent/adk/rizzcharts/kotlin/src/main/kotlin/com/google/a2ui/samples/rizzcharts/RizzchartsMain.kt b/samples/community/agent/adk/rizzcharts/kotlin/src/main/kotlin/com/google/a2ui/samples/rizzcharts/RizzchartsMain.kt similarity index 100% rename from samples/agent/adk/rizzcharts/kotlin/src/main/kotlin/com/google/a2ui/samples/rizzcharts/RizzchartsMain.kt rename to samples/community/agent/adk/rizzcharts/kotlin/src/main/kotlin/com/google/a2ui/samples/rizzcharts/RizzchartsMain.kt diff --git a/samples/agent/adk/rizzcharts/kotlin/src/main/kotlin/com/google/a2ui/samples/rizzcharts/RizzchartsTools.kt b/samples/community/agent/adk/rizzcharts/kotlin/src/main/kotlin/com/google/a2ui/samples/rizzcharts/RizzchartsTools.kt similarity index 100% rename from samples/agent/adk/rizzcharts/kotlin/src/main/kotlin/com/google/a2ui/samples/rizzcharts/RizzchartsTools.kt rename to samples/community/agent/adk/rizzcharts/kotlin/src/main/kotlin/com/google/a2ui/samples/rizzcharts/RizzchartsTools.kt diff --git a/samples/agent/adk/rizzcharts/kotlin/src/main/resources/application.properties b/samples/community/agent/adk/rizzcharts/kotlin/src/main/resources/application.properties similarity index 100% rename from samples/agent/adk/rizzcharts/kotlin/src/main/resources/application.properties rename to samples/community/agent/adk/rizzcharts/kotlin/src/main/resources/application.properties diff --git a/samples/agent/adk/rizzcharts/python/.env.example b/samples/community/agent/adk/rizzcharts/python/.env.example similarity index 100% rename from samples/agent/adk/rizzcharts/python/.env.example rename to samples/community/agent/adk/rizzcharts/python/.env.example diff --git a/samples/agent/adk/rizzcharts/python/README.md b/samples/community/agent/adk/rizzcharts/python/README.md similarity index 100% rename from samples/agent/adk/rizzcharts/python/README.md rename to samples/community/agent/adk/rizzcharts/python/README.md diff --git a/samples/agent/adk/rizzcharts/python/__init__.py b/samples/community/agent/adk/rizzcharts/python/__init__.py similarity index 100% rename from samples/agent/adk/rizzcharts/python/__init__.py rename to samples/community/agent/adk/rizzcharts/python/__init__.py diff --git a/samples/agent/adk/rizzcharts/python/__main__.py b/samples/community/agent/adk/rizzcharts/python/__main__.py similarity index 100% rename from samples/agent/adk/rizzcharts/python/__main__.py rename to samples/community/agent/adk/rizzcharts/python/__main__.py diff --git a/samples/agent/adk/rizzcharts/python/agent.py b/samples/community/agent/adk/rizzcharts/python/agent.py similarity index 100% rename from samples/agent/adk/rizzcharts/python/agent.py rename to samples/community/agent/adk/rizzcharts/python/agent.py diff --git a/samples/agent/adk/rizzcharts/python/agent_executor.py b/samples/community/agent/adk/rizzcharts/python/agent_executor.py similarity index 100% rename from samples/agent/adk/rizzcharts/python/agent_executor.py rename to samples/community/agent/adk/rizzcharts/python/agent_executor.py diff --git a/samples/agent/adk/rizzcharts/python/prompt_builder.py b/samples/community/agent/adk/rizzcharts/python/prompt_builder.py similarity index 100% rename from samples/agent/adk/rizzcharts/python/prompt_builder.py rename to samples/community/agent/adk/rizzcharts/python/prompt_builder.py diff --git a/samples/agent/adk/rizzcharts/python/pyproject.toml b/samples/community/agent/adk/rizzcharts/python/pyproject.toml similarity index 90% rename from samples/agent/adk/rizzcharts/python/pyproject.toml rename to samples/community/agent/adk/rizzcharts/python/pyproject.toml index ad152b925e..b9f507f976 100644 --- a/samples/agent/adk/rizzcharts/python/pyproject.toml +++ b/samples/community/agent/adk/rizzcharts/python/pyproject.toml @@ -26,7 +26,7 @@ dependencies = [ "python-dotenv>=1.1.0", "litellm", "jsonschema>=4.0.0", - "a2ui-agent-sdk", + "a2ui-agent-sdk>=0.2.4", ] [tool.hatch.build.targets.wheel] @@ -42,6 +42,3 @@ allow-direct-references = true [[tool.uv.index]] url = "https://pypi.org/simple" default = true - -[tool.uv.sources] -a2ui-agent-sdk = { path = "../../../../../agent_sdks/python/a2ui_agent", editable = true } diff --git a/samples/agent/adk/rizzcharts/python/tools.py b/samples/community/agent/adk/rizzcharts/python/tools.py similarity index 100% rename from samples/agent/adk/rizzcharts/python/tools.py rename to samples/community/agent/adk/rizzcharts/python/tools.py diff --git a/samples/community/client/angular/angular.json b/samples/community/client/angular/angular.json new file mode 100644 index 0000000000..66fcf246f7 --- /dev/null +++ b/samples/community/client/angular/angular.json @@ -0,0 +1,172 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "a2a-chat-canvas": { + "projectType": "library", + "root": "projects/a2a-chat-canvas", + "sourceRoot": "projects/a2a-chat-canvas/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular/build:ng-packagr", + "configurations": { + "production": { + "tsConfig": "projects/a2a-chat-canvas/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/a2a-chat-canvas/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + } + } + }, + "orchestrator": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss", + "skipTests": true + } + }, + "root": "projects/orchestrator", + "sourceRoot": "projects/orchestrator/src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "outputPath": "projects/orchestrator/dist", + "browser": "projects/orchestrator/src/main.ts", + "tsConfig": "projects/orchestrator/tsconfig.app.json", + "preserveSymlinks": true, + "inlineStyleLanguage": "scss", + "assets": [ + { + "glob": "**/*", + "input": "projects/orchestrator/public" + } + ], + "styles": ["projects/orchestrator/src/styles.scss"], + "server": "projects/orchestrator/src/main.server.ts", + "outputMode": "server", + "ssr": { + "entry": "projects/orchestrator/src/server.ts" + } + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "1.5MB", + "maximumError": "2.5MB" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "4kB", + "maximumError": "8kB" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular/build:dev-server", + "configurations": { + "production": { + "buildTarget": "orchestrator:build:production" + }, + "development": { + "buildTarget": "orchestrator:build:development" + } + }, + "defaultConfiguration": "development" + } + } + }, + "mcp_calculator": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss", + "skipTests": true + } + }, + "root": "projects/mcp_calculator", + "sourceRoot": "projects/mcp_calculator/src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "outputPath": "projects/mcp_calculator/dist", + "browser": "projects/mcp_calculator/src/main.ts", + "tsConfig": "projects/mcp_calculator/tsconfig.app.json", + "preserveSymlinks": true, + "inlineStyleLanguage": "scss", + "assets": [ + { + "glob": "**/*", + "input": "projects/mcp_calculator/public" + } + ], + "styles": ["projects/mcp_calculator/src/styles.scss"], + "server": "projects/mcp_calculator/src/main.server.ts", + "outputMode": "server", + "ssr": { + "entry": "projects/mcp_calculator/src/server.ts" + } + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "1.5MB", + "maximumError": "2.5MB" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "4kB", + "maximumError": "8kB" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular/build:dev-server", + "configurations": { + "production": { + "buildTarget": "mcp_calculator:build:production" + }, + "development": { + "buildTarget": "mcp_calculator:build:development" + } + }, + "defaultConfiguration": "development" + } + } + } + }, + "cli": { + "analytics": false + } +} diff --git a/samples/client/lit/custom-components-example/eslint.config.mjs b/samples/community/client/angular/eslint.config.mjs similarity index 67% rename from samples/client/lit/custom-components-example/eslint.config.mjs rename to samples/community/client/angular/eslint.config.mjs index 1a65c37f40..69ad9835d8 100644 --- a/samples/client/lit/custom-components-example/eslint.config.mjs +++ b/samples/community/client/angular/eslint.config.mjs @@ -14,6 +14,11 @@ * limitations under the License. */ -import preset from '../../../../eslint.preset.mjs'; - -export default [...preset]; +// This folder is unmaintained community code, lifted out of the a2ui monorepo. +// It carries a standalone (no-op) ESLint config so `eslint .` does not depend on +// the monorepo's shared preset. +export default [ + { + ignores: ['**/dist/**', '**/out-tsc/**', '**/.angular/**'], + }, +]; diff --git a/samples/community/client/angular/package.json b/samples/community/client/angular/package.json new file mode 100644 index 0000000000..028f25662e --- /dev/null +++ b/samples/community/client/angular/package.json @@ -0,0 +1,59 @@ +{ + "name": "angular-a2ui", + "version": "0.0.0", + "private": true, + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build a2a-chat-canvas && ng build orchestrator", + "lint": "eslint .", + "lint:fix": "eslint . --fix", + "clean": "rm -rf dist .tsbuildinfo .wireit out-tsc", + "format": "prettier --write .", + "format:check": "prettier --check ." + }, + "dependencies": { + "@a2a-js/sdk": "^0.3.13", + "@a2ui/angular": "^0.10.0", + "@a2ui/markdown-it": "^0.0.4", + "@a2ui/web_core": "^0.10.0", + "@angular/cdk": "^21.2.5", + "@angular/common": "^21.2.5", + "@angular/compiler": "^21.2.5", + "@angular/core": "^21.2.5", + "@angular/forms": "^21.2.5", + "@angular/google-maps": "^21.2.5", + "@angular/material": "^21.2.5", + "@angular/platform-browser": "^21.2.5", + "@angular/platform-server": "^21.2.5", + "@angular/router": "^21.2.5", + "@angular/ssr": "^21.2.5", + "@google/genai": "^2.8.0", + "@modelcontextprotocol/ext-apps": "^1.7.4", + "chart.js": "^4.5.1", + "chartjs-plugin-datalabels": "^2.2.0", + "express": "^5.2.1", + "markdown-it": "^14.2.0", + "ng2-charts": "^10.0.0", + "rxjs": "^7.8.2", + "tslib": "^2.8.1", + "uuid": "^14.0.0", + "zod": "^3.25.76", + "zone.js": "~0.16.2" + }, + "devDependencies": { + "@angular/build": "^21.2.5", + "@angular/cli": "^21.2.5", + "@angular/compiler-cli": "^21.2.5", + "@types/express": "^5.0.6", + "@types/markdown-it": "^14.1.2", + "@types/node": "^25.9.3", + "@types/uuid": "^11.0.0", + "eslint": "^10.4.1", + "ng-packagr": "^22.0.0", + "prettier": "^3.8.4", + "sass": "^1.100.0", + "tslib": "^2.8.1", + "typescript": "5.9.3" + } +} diff --git a/samples/client/angular/projects/a2a-chat-canvas/README.md b/samples/community/client/angular/projects/a2a-chat-canvas/README.md similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/README.md rename to samples/community/client/angular/projects/a2a-chat-canvas/README.md diff --git a/samples/client/angular/projects/a2a-chat-canvas/ng-package.json b/samples/community/client/angular/projects/a2a-chat-canvas/ng-package.json similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/ng-package.json rename to samples/community/client/angular/projects/a2a-chat-canvas/ng-package.json diff --git a/samples/client/angular/projects/a2a-chat-canvas/package.json b/samples/community/client/angular/projects/a2a-chat-canvas/package.json similarity index 84% rename from samples/client/angular/projects/a2a-chat-canvas/package.json rename to samples/community/client/angular/projects/a2a-chat-canvas/package.json index 189f35a4dc..e8da0fdec5 100644 --- a/samples/client/angular/projects/a2a-chat-canvas/package.json +++ b/samples/community/client/angular/projects/a2a-chat-canvas/package.json @@ -2,8 +2,8 @@ "name": "a2a-chat-canvas", "version": "0.0.1", "peerDependencies": { - "@a2ui/angular": "workspace:*", - "@a2ui/web_core": "workspace:*", + "@a2ui/angular": "^0.10.0", + "@a2ui/web_core": "^0.10.0", "@angular/common": "^21.2.5", "@angular/core": "^21.2.5", "@angular/platform-browser": "^21.2.5" @@ -26,9 +26,6 @@ "wireit": { "build": { "command": "yarn workspace angular-a2ui ng build a2a-chat-canvas", - "dependencies": [ - "../../../../../renderers/angular:build" - ], "files": [ "src/**/*", "tsconfig.lib.json", diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-chat-canvas.html b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-chat-canvas.html similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-chat-canvas.html rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-chat-canvas.html diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-chat-canvas.scss b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-chat-canvas.scss similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-chat-canvas.scss rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-chat-canvas.scss diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-chat-canvas.spec.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-chat-canvas.spec.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-chat-canvas.spec.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-chat-canvas.spec.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-chat-canvas.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-chat-canvas.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-chat-canvas.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-chat-canvas.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/a2a-renderer.html b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/a2a-renderer.html similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/a2a-renderer.html rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/a2a-renderer.html diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/a2a-renderer.scss b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/a2a-renderer.scss similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/a2a-renderer.scss rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/a2a-renderer.scss diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/a2a-renderer.spec.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/a2a-renderer.spec.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/a2a-renderer.spec.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/a2a-renderer.spec.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/a2a-renderer.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/a2a-renderer.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/a2a-renderer.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/a2a-renderer.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/a2ui-data-part.html b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/a2ui-data-part.html similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/a2ui-data-part.html rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/a2ui-data-part.html diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/a2ui-data-part.scss b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/a2ui-data-part.scss similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/a2ui-data-part.scss rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/a2ui-data-part.scss diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/a2ui-data-part.spec.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/a2ui-data-part.spec.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/a2ui-data-part.spec.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/a2ui-data-part.spec.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/a2ui-data-part.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/a2ui-data-part.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/a2ui-data-part.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/a2ui-data-part.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/renderer-config.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/renderer-config.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/renderer-config.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/renderer-config.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/resolver.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/resolver.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/resolver.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/a2ui-data-part/resolver.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/default-text-part.html b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/default-text-part.html similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/default-text-part.html rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/default-text-part.html diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/default-text-part.scss b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/default-text-part.scss similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/default-text-part.scss rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/default-text-part.scss diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/default-text-part.spec.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/default-text-part.spec.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/default-text-part.spec.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/default-text-part.spec.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/default-text-part.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/default-text-part.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/default-text-part.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/default-text-part.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/renderer-config.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/renderer-config.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/renderer-config.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/renderer-config.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/resolver.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/resolver.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/resolver.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/catalog/default-text-part/resolver.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/tokens.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/tokens.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/tokens.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/tokens.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/types.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/types.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/types.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2a-renderer/types.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/a2a-chat-canvas-catalog.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/a2a-chat-canvas-catalog.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/a2a-chat-canvas-catalog.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/a2a-chat-canvas-catalog.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/canvas/canvas.html b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/canvas/canvas.html similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/canvas/canvas.html rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/canvas/canvas.html diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/canvas/canvas.scss b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/canvas/canvas.scss similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/canvas/canvas.scss rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/canvas/canvas.scss diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/canvas/canvas.spec.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/canvas/canvas.spec.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/canvas/canvas.spec.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/canvas/canvas.spec.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/canvas/canvas.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/canvas/canvas.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/canvas/canvas.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/canvas/canvas.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/theme.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/theme.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/theme.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/a2ui-catalog/theme.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/canvas/canvas.html b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/canvas/canvas.html similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/canvas/canvas.html rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/canvas/canvas.html diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/canvas/canvas.scss b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/canvas/canvas.scss similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/canvas/canvas.scss rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/canvas/canvas.scss diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/canvas/canvas.spec.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/canvas/canvas.spec.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/canvas/canvas.spec.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/canvas/canvas.spec.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/canvas/canvas.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/canvas/canvas.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/canvas/canvas.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/canvas/canvas.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/agent-header/agent-header.html b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/agent-header/agent-header.html similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/agent-header/agent-header.html rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/agent-header/agent-header.html diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/agent-header/agent-header.scss b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/agent-header/agent-header.scss similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/agent-header/agent-header.scss rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/agent-header/agent-header.scss diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/agent-header/agent-header.spec.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/agent-header/agent-header.spec.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/agent-header/agent-header.spec.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/agent-header/agent-header.spec.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/agent-header/agent-header.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/agent-header/agent-header.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/agent-header/agent-header.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/agent-header/agent-header.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/avatar/avatar.html b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/avatar/avatar.html similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/avatar/avatar.html rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/avatar/avatar.html diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/avatar/avatar.scss b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/avatar/avatar.scss similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/avatar/avatar.scss rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/avatar/avatar.scss diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/avatar/avatar.spec.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/avatar/avatar.spec.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/avatar/avatar.spec.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/avatar/avatar.spec.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/avatar/avatar.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/avatar/avatar.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/avatar/avatar.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/avatar/avatar.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat-history/chat-history.html b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat-history/chat-history.html similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat-history/chat-history.html rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat-history/chat-history.html diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat-history/chat-history.scss b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat-history/chat-history.scss similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat-history/chat-history.scss rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat-history/chat-history.scss diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat-history/chat-history.spec.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat-history/chat-history.spec.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat-history/chat-history.spec.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat-history/chat-history.spec.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat-history/chat-history.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat-history/chat-history.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat-history/chat-history.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat-history/chat-history.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat-history/message-decorator/types.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat-history/message-decorator/types.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat-history/message-decorator/types.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat-history/message-decorator/types.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat.html b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat.html similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat.html rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat.html diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat.scss b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat.scss similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat.scss rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat.scss diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat.spec.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat.spec.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat.spec.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat.spec.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/chat.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/input-area/input-area.html b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/input-area/input-area.html similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/input-area/input-area.html rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/input-area/input-area.html diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/input-area/input-area.scss b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/input-area/input-area.scss similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/input-area/input-area.scss rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/input-area/input-area.scss diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/input-area/input-area.spec.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/input-area/input-area.spec.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/input-area/input-area.spec.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/input-area/input-area.spec.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/input-area/input-area.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/input-area/input-area.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/input-area/input-area.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/input-area/input-area.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/message/message.html b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/message/message.html similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/message/message.html rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/message/message.html diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/message/message.scss b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/message/message.scss similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/message/message.scss rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/message/message.scss diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/message/message.spec.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/message/message.spec.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/message/message.spec.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/message/message.spec.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/message/message.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/message/message.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/message/message.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/components/chat/message/message.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/config.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/config.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/config.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/config.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/interfaces/a2a-service.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/interfaces/a2a-service.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/interfaces/a2a-service.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/interfaces/a2a-service.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/interfaces/markdown-renderer-service.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/interfaces/markdown-renderer-service.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/interfaces/markdown-renderer-service.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/interfaces/markdown-renderer-service.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/services/canvas-service.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/services/canvas-service.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/services/canvas-service.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/services/canvas-service.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/services/chat-service.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/services/chat-service.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/services/chat-service.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/services/chat-service.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/services/sanitizer-markdown-renderer-service.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/services/sanitizer-markdown-renderer-service.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/services/sanitizer-markdown-renderer-service.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/services/sanitizer-markdown-renderer-service.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/types/ui-message.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/types/ui-message.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/types/ui-message.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/types/ui-message.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/utils/a2a.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/utils/a2a.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/utils/a2a.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/utils/a2a.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/utils/a2ui.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/utils/a2ui.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/utils/a2ui.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/utils/a2ui.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/utils/type-guards.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/utils/type-guards.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/utils/type-guards.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/utils/type-guards.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/lib/utils/ui-message-utils.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/lib/utils/ui-message-utils.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/lib/utils/ui-message-utils.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/lib/utils/ui-message-utils.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/src/public-api.ts b/samples/community/client/angular/projects/a2a-chat-canvas/src/public-api.ts similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/src/public-api.ts rename to samples/community/client/angular/projects/a2a-chat-canvas/src/public-api.ts diff --git a/samples/client/angular/projects/a2a-chat-canvas/tsconfig.lib.json b/samples/community/client/angular/projects/a2a-chat-canvas/tsconfig.lib.json similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/tsconfig.lib.json rename to samples/community/client/angular/projects/a2a-chat-canvas/tsconfig.lib.json diff --git a/samples/client/angular/projects/a2a-chat-canvas/tsconfig.lib.prod.json b/samples/community/client/angular/projects/a2a-chat-canvas/tsconfig.lib.prod.json similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/tsconfig.lib.prod.json rename to samples/community/client/angular/projects/a2a-chat-canvas/tsconfig.lib.prod.json diff --git a/samples/client/angular/projects/a2a-chat-canvas/tsconfig.spec.json b/samples/community/client/angular/projects/a2a-chat-canvas/tsconfig.spec.json similarity index 100% rename from samples/client/angular/projects/a2a-chat-canvas/tsconfig.spec.json rename to samples/community/client/angular/projects/a2a-chat-canvas/tsconfig.spec.json diff --git a/samples/client/angular/projects/mcp_calculator/README.md b/samples/community/client/angular/projects/mcp_calculator/README.md similarity index 100% rename from samples/client/angular/projects/mcp_calculator/README.md rename to samples/community/client/angular/projects/mcp_calculator/README.md diff --git a/samples/community/client/angular/projects/mcp_calculator/package.json b/samples/community/client/angular/projects/mcp_calculator/package.json new file mode 100644 index 0000000000..acbefed27f --- /dev/null +++ b/samples/community/client/angular/projects/mcp_calculator/package.json @@ -0,0 +1,17 @@ +{ + "name": "@a2ui/mcp_calculator", + "version": "0.1.0", + "private": true, + "scripts": { + "build": "echo \"mcp_calculator is excluded from the build: it imports the renderer's internal v0.8 source (projects/lib) which the published @a2ui/angular package does not expose.\"", + "format": "prettier --write .", + "format:check": "prettier --check .", + "lint": "yarn --cwd ../.. lint", + "test": "yarn --cwd ../.. test", + "lint:fix": "yarn --cwd ../.. lint:fix" + }, + "dependencies": { + "@a2ui/angular": "^0.10.0", + "@a2ui/web_core": "^0.10.0" + } +} diff --git a/samples/client/angular/projects/mcp_calculator/public/favicon.ico b/samples/community/client/angular/projects/mcp_calculator/public/favicon.ico similarity index 100% rename from samples/client/angular/projects/mcp_calculator/public/favicon.ico rename to samples/community/client/angular/projects/mcp_calculator/public/favicon.ico diff --git a/samples/client/angular/projects/mcp_calculator/public/gemini-color.svg b/samples/community/client/angular/projects/mcp_calculator/public/gemini-color.svg similarity index 100% rename from samples/client/angular/projects/mcp_calculator/public/gemini-color.svg rename to samples/community/client/angular/projects/mcp_calculator/public/gemini-color.svg diff --git a/samples/client/angular/projects/mcp_calculator/src/a2ui-catalog/catalog.ts b/samples/community/client/angular/projects/mcp_calculator/src/a2ui-catalog/catalog.ts similarity index 100% rename from samples/client/angular/projects/mcp_calculator/src/a2ui-catalog/catalog.ts rename to samples/community/client/angular/projects/mcp_calculator/src/a2ui-catalog/catalog.ts diff --git a/samples/client/angular/projects/mcp_calculator/src/a2ui-catalog/mcp-app.ts b/samples/community/client/angular/projects/mcp_calculator/src/a2ui-catalog/mcp-app.ts similarity index 100% rename from samples/client/angular/projects/mcp_calculator/src/a2ui-catalog/mcp-app.ts rename to samples/community/client/angular/projects/mcp_calculator/src/a2ui-catalog/mcp-app.ts diff --git a/samples/client/angular/projects/mcp_calculator/src/a2ui-catalog/pong-layout.ts b/samples/community/client/angular/projects/mcp_calculator/src/a2ui-catalog/pong-layout.ts similarity index 100% rename from samples/client/angular/projects/mcp_calculator/src/a2ui-catalog/pong-layout.ts rename to samples/community/client/angular/projects/mcp_calculator/src/a2ui-catalog/pong-layout.ts diff --git a/samples/client/angular/projects/mcp_calculator/src/a2ui-catalog/pong-scoreboard.ts b/samples/community/client/angular/projects/mcp_calculator/src/a2ui-catalog/pong-scoreboard.ts similarity index 100% rename from samples/client/angular/projects/mcp_calculator/src/a2ui-catalog/pong-scoreboard.ts rename to samples/community/client/angular/projects/mcp_calculator/src/a2ui-catalog/pong-scoreboard.ts diff --git a/samples/client/angular/projects/mcp_calculator/src/app/app.config.server.ts b/samples/community/client/angular/projects/mcp_calculator/src/app/app.config.server.ts similarity index 100% rename from samples/client/angular/projects/mcp_calculator/src/app/app.config.server.ts rename to samples/community/client/angular/projects/mcp_calculator/src/app/app.config.server.ts diff --git a/samples/client/angular/projects/mcp_calculator/src/app/app.config.ts b/samples/community/client/angular/projects/mcp_calculator/src/app/app.config.ts similarity index 100% rename from samples/client/angular/projects/mcp_calculator/src/app/app.config.ts rename to samples/community/client/angular/projects/mcp_calculator/src/app/app.config.ts diff --git a/samples/client/angular/projects/mcp_calculator/src/app/app.html b/samples/community/client/angular/projects/mcp_calculator/src/app/app.html similarity index 100% rename from samples/client/angular/projects/mcp_calculator/src/app/app.html rename to samples/community/client/angular/projects/mcp_calculator/src/app/app.html diff --git a/samples/client/angular/projects/mcp_calculator/src/app/app.routes.server.ts b/samples/community/client/angular/projects/mcp_calculator/src/app/app.routes.server.ts similarity index 100% rename from samples/client/angular/projects/mcp_calculator/src/app/app.routes.server.ts rename to samples/community/client/angular/projects/mcp_calculator/src/app/app.routes.server.ts diff --git a/samples/client/angular/projects/mcp_calculator/src/app/app.scss b/samples/community/client/angular/projects/mcp_calculator/src/app/app.scss similarity index 100% rename from samples/client/angular/projects/mcp_calculator/src/app/app.scss rename to samples/community/client/angular/projects/mcp_calculator/src/app/app.scss diff --git a/samples/client/angular/projects/mcp_calculator/src/app/app.ts b/samples/community/client/angular/projects/mcp_calculator/src/app/app.ts similarity index 100% rename from samples/client/angular/projects/mcp_calculator/src/app/app.ts rename to samples/community/client/angular/projects/mcp_calculator/src/app/app.ts diff --git a/samples/client/angular/projects/gallery/src/app/dummy.spec.ts b/samples/community/client/angular/projects/mcp_calculator/src/app/dummy.spec.ts similarity index 100% rename from samples/client/angular/projects/gallery/src/app/dummy.spec.ts rename to samples/community/client/angular/projects/mcp_calculator/src/app/dummy.spec.ts diff --git a/samples/client/angular/projects/mcp_calculator/src/index.html b/samples/community/client/angular/projects/mcp_calculator/src/index.html similarity index 100% rename from samples/client/angular/projects/mcp_calculator/src/index.html rename to samples/community/client/angular/projects/mcp_calculator/src/index.html diff --git a/samples/client/angular/projects/mcp_calculator/src/main.server.ts b/samples/community/client/angular/projects/mcp_calculator/src/main.server.ts similarity index 100% rename from samples/client/angular/projects/mcp_calculator/src/main.server.ts rename to samples/community/client/angular/projects/mcp_calculator/src/main.server.ts diff --git a/samples/client/angular/projects/mcp_calculator/src/main.ts b/samples/community/client/angular/projects/mcp_calculator/src/main.ts similarity index 100% rename from samples/client/angular/projects/mcp_calculator/src/main.ts rename to samples/community/client/angular/projects/mcp_calculator/src/main.ts diff --git a/samples/client/angular/projects/mcp_calculator/src/server.ts b/samples/community/client/angular/projects/mcp_calculator/src/server.ts similarity index 100% rename from samples/client/angular/projects/mcp_calculator/src/server.ts rename to samples/community/client/angular/projects/mcp_calculator/src/server.ts diff --git a/samples/client/angular/projects/mcp_calculator/src/services/a2a-service-impl.ts b/samples/community/client/angular/projects/mcp_calculator/src/services/a2a-service-impl.ts similarity index 100% rename from samples/client/angular/projects/mcp_calculator/src/services/a2a-service-impl.ts rename to samples/community/client/angular/projects/mcp_calculator/src/services/a2a-service-impl.ts diff --git a/samples/client/angular/projects/mcp_calculator/src/styles.scss b/samples/community/client/angular/projects/mcp_calculator/src/styles.scss similarity index 100% rename from samples/client/angular/projects/mcp_calculator/src/styles.scss rename to samples/community/client/angular/projects/mcp_calculator/src/styles.scss diff --git a/samples/client/angular/projects/mcp_calculator/tsconfig.app.json b/samples/community/client/angular/projects/mcp_calculator/tsconfig.app.json similarity index 100% rename from samples/client/angular/projects/mcp_calculator/tsconfig.app.json rename to samples/community/client/angular/projects/mcp_calculator/tsconfig.app.json diff --git a/samples/client/angular/projects/mcp_calculator/tsconfig.spec.json b/samples/community/client/angular/projects/mcp_calculator/tsconfig.spec.json similarity index 100% rename from samples/client/angular/projects/mcp_calculator/tsconfig.spec.json rename to samples/community/client/angular/projects/mcp_calculator/tsconfig.spec.json diff --git a/samples/client/angular/projects/orchestrator/README.md b/samples/community/client/angular/projects/orchestrator/README.md similarity index 100% rename from samples/client/angular/projects/orchestrator/README.md rename to samples/community/client/angular/projects/orchestrator/README.md diff --git a/samples/client/angular/projects/orchestrator/package.json b/samples/community/client/angular/projects/orchestrator/package.json similarity index 77% rename from samples/client/angular/projects/orchestrator/package.json rename to samples/community/client/angular/projects/orchestrator/package.json index 7a3688718a..3dc6f6bc6b 100644 --- a/samples/client/angular/projects/orchestrator/package.json +++ b/samples/community/client/angular/projects/orchestrator/package.json @@ -11,9 +11,9 @@ "lint:fix": "yarn --cwd ../.. lint:fix" }, "dependencies": { - "@a2ui/angular": "workspace:*", - "@a2ui/markdown-it": "*", - "@a2ui/web_core": "workspace:*" + "@a2ui/angular": "^0.10.0", + "@a2ui/markdown-it": "^0.0.4", + "@a2ui/web_core": "^0.10.0" }, "devDependencies": { "wireit": "^0.15.0-pre.2" @@ -21,9 +21,6 @@ "wireit": { "build": { "command": "yarn workspace angular-a2ui ng build orchestrator", - "dependencies": [ - "../../../../../renderers/angular:build" - ], "files": [ "src/**/*", "tsconfig.app.json" diff --git a/samples/client/angular/projects/orchestrator/public/favicon.ico b/samples/community/client/angular/projects/orchestrator/public/favicon.ico similarity index 100% rename from samples/client/angular/projects/orchestrator/public/favicon.ico rename to samples/community/client/angular/projects/orchestrator/public/favicon.ico diff --git a/samples/client/angular/projects/orchestrator/public/gemini-color.svg b/samples/community/client/angular/projects/orchestrator/public/gemini-color.svg similarity index 100% rename from samples/client/angular/projects/orchestrator/public/gemini-color.svg rename to samples/community/client/angular/projects/orchestrator/public/gemini-color.svg diff --git a/samples/client/angular/projects/orchestrator/src/a2ui-catalog/catalog.ts b/samples/community/client/angular/projects/orchestrator/src/a2ui-catalog/catalog.ts similarity index 100% rename from samples/client/angular/projects/orchestrator/src/a2ui-catalog/catalog.ts rename to samples/community/client/angular/projects/orchestrator/src/a2ui-catalog/catalog.ts diff --git a/samples/client/angular/projects/orchestrator/src/a2ui-catalog/chart.ts b/samples/community/client/angular/projects/orchestrator/src/a2ui-catalog/chart.ts similarity index 100% rename from samples/client/angular/projects/orchestrator/src/a2ui-catalog/chart.ts rename to samples/community/client/angular/projects/orchestrator/src/a2ui-catalog/chart.ts diff --git a/samples/client/angular/projects/orchestrator/src/a2ui-catalog/google-map.ts b/samples/community/client/angular/projects/orchestrator/src/a2ui-catalog/google-map.ts similarity index 100% rename from samples/client/angular/projects/orchestrator/src/a2ui-catalog/google-map.ts rename to samples/community/client/angular/projects/orchestrator/src/a2ui-catalog/google-map.ts diff --git a/samples/client/angular/projects/orchestrator/src/app/app.config.server.ts b/samples/community/client/angular/projects/orchestrator/src/app/app.config.server.ts similarity index 100% rename from samples/client/angular/projects/orchestrator/src/app/app.config.server.ts rename to samples/community/client/angular/projects/orchestrator/src/app/app.config.server.ts diff --git a/samples/client/angular/projects/orchestrator/src/app/app.config.ts b/samples/community/client/angular/projects/orchestrator/src/app/app.config.ts similarity index 100% rename from samples/client/angular/projects/orchestrator/src/app/app.config.ts rename to samples/community/client/angular/projects/orchestrator/src/app/app.config.ts diff --git a/samples/client/angular/projects/orchestrator/src/app/app.html b/samples/community/client/angular/projects/orchestrator/src/app/app.html similarity index 100% rename from samples/client/angular/projects/orchestrator/src/app/app.html rename to samples/community/client/angular/projects/orchestrator/src/app/app.html diff --git a/samples/client/angular/projects/orchestrator/src/app/app.routes.server.ts b/samples/community/client/angular/projects/orchestrator/src/app/app.routes.server.ts similarity index 100% rename from samples/client/angular/projects/orchestrator/src/app/app.routes.server.ts rename to samples/community/client/angular/projects/orchestrator/src/app/app.routes.server.ts diff --git a/samples/client/angular/projects/orchestrator/src/app/app.routes.ts b/samples/community/client/angular/projects/orchestrator/src/app/app.routes.ts similarity index 100% rename from samples/client/angular/projects/orchestrator/src/app/app.routes.ts rename to samples/community/client/angular/projects/orchestrator/src/app/app.routes.ts diff --git a/samples/client/angular/projects/orchestrator/src/app/app.scss b/samples/community/client/angular/projects/orchestrator/src/app/app.scss similarity index 100% rename from samples/client/angular/projects/orchestrator/src/app/app.scss rename to samples/community/client/angular/projects/orchestrator/src/app/app.scss diff --git a/samples/client/angular/projects/orchestrator/src/app/app.ts b/samples/community/client/angular/projects/orchestrator/src/app/app.ts similarity index 100% rename from samples/client/angular/projects/orchestrator/src/app/app.ts rename to samples/community/client/angular/projects/orchestrator/src/app/app.ts diff --git a/samples/client/angular/projects/mcp_calculator/src/app/dummy.spec.ts b/samples/community/client/angular/projects/orchestrator/src/app/dummy.spec.ts similarity index 100% rename from samples/client/angular/projects/mcp_calculator/src/app/dummy.spec.ts rename to samples/community/client/angular/projects/orchestrator/src/app/dummy.spec.ts diff --git a/samples/client/angular/projects/orchestrator/src/environments/environment.ts b/samples/community/client/angular/projects/orchestrator/src/environments/environment.ts similarity index 100% rename from samples/client/angular/projects/orchestrator/src/environments/environment.ts rename to samples/community/client/angular/projects/orchestrator/src/environments/environment.ts diff --git a/samples/client/angular/projects/orchestrator/src/index.html b/samples/community/client/angular/projects/orchestrator/src/index.html similarity index 100% rename from samples/client/angular/projects/orchestrator/src/index.html rename to samples/community/client/angular/projects/orchestrator/src/index.html diff --git a/samples/client/angular/projects/orchestrator/src/main.server.ts b/samples/community/client/angular/projects/orchestrator/src/main.server.ts similarity index 100% rename from samples/client/angular/projects/orchestrator/src/main.server.ts rename to samples/community/client/angular/projects/orchestrator/src/main.server.ts diff --git a/samples/client/angular/projects/orchestrator/src/main.ts b/samples/community/client/angular/projects/orchestrator/src/main.ts similarity index 100% rename from samples/client/angular/projects/orchestrator/src/main.ts rename to samples/community/client/angular/projects/orchestrator/src/main.ts diff --git a/samples/client/angular/projects/orchestrator/src/message-decorator/demo-message-decorator.html b/samples/community/client/angular/projects/orchestrator/src/message-decorator/demo-message-decorator.html similarity index 100% rename from samples/client/angular/projects/orchestrator/src/message-decorator/demo-message-decorator.html rename to samples/community/client/angular/projects/orchestrator/src/message-decorator/demo-message-decorator.html diff --git a/samples/client/angular/projects/orchestrator/src/message-decorator/demo-message-decorator.scss b/samples/community/client/angular/projects/orchestrator/src/message-decorator/demo-message-decorator.scss similarity index 100% rename from samples/client/angular/projects/orchestrator/src/message-decorator/demo-message-decorator.scss rename to samples/community/client/angular/projects/orchestrator/src/message-decorator/demo-message-decorator.scss diff --git a/samples/client/angular/projects/orchestrator/src/message-decorator/demo-message-decorator.ts b/samples/community/client/angular/projects/orchestrator/src/message-decorator/demo-message-decorator.ts similarity index 100% rename from samples/client/angular/projects/orchestrator/src/message-decorator/demo-message-decorator.ts rename to samples/community/client/angular/projects/orchestrator/src/message-decorator/demo-message-decorator.ts diff --git a/samples/client/angular/projects/orchestrator/src/server.ts b/samples/community/client/angular/projects/orchestrator/src/server.ts similarity index 100% rename from samples/client/angular/projects/orchestrator/src/server.ts rename to samples/community/client/angular/projects/orchestrator/src/server.ts diff --git a/samples/client/angular/projects/orchestrator/src/services/a2a-service-impl.spec.ts b/samples/community/client/angular/projects/orchestrator/src/services/a2a-service-impl.spec.ts similarity index 100% rename from samples/client/angular/projects/orchestrator/src/services/a2a-service-impl.spec.ts rename to samples/community/client/angular/projects/orchestrator/src/services/a2a-service-impl.spec.ts diff --git a/samples/client/angular/projects/orchestrator/src/services/a2a-service-impl.ts b/samples/community/client/angular/projects/orchestrator/src/services/a2a-service-impl.ts similarity index 100% rename from samples/client/angular/projects/orchestrator/src/services/a2a-service-impl.ts rename to samples/community/client/angular/projects/orchestrator/src/services/a2a-service-impl.ts diff --git a/samples/client/angular/projects/orchestrator/src/styles.scss b/samples/community/client/angular/projects/orchestrator/src/styles.scss similarity index 100% rename from samples/client/angular/projects/orchestrator/src/styles.scss rename to samples/community/client/angular/projects/orchestrator/src/styles.scss diff --git a/samples/client/angular/projects/orchestrator/tsconfig.app.json b/samples/community/client/angular/projects/orchestrator/tsconfig.app.json similarity index 100% rename from samples/client/angular/projects/orchestrator/tsconfig.app.json rename to samples/community/client/angular/projects/orchestrator/tsconfig.app.json diff --git a/samples/client/angular/projects/orchestrator/tsconfig.spec.json b/samples/community/client/angular/projects/orchestrator/tsconfig.spec.json similarity index 100% rename from samples/client/angular/projects/orchestrator/tsconfig.spec.json rename to samples/community/client/angular/projects/orchestrator/tsconfig.spec.json diff --git a/samples/community/client/angular/tsconfig.json b/samples/community/client/angular/tsconfig.json new file mode 100644 index 0000000000..784555302b --- /dev/null +++ b/samples/community/client/angular/tsconfig.json @@ -0,0 +1,35 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "paths": { + "@a2a_chat_canvas/*": ["./projects/a2a-chat-canvas/src/lib/*"] + }, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "isolatedModules": true, + "experimentalDecorators": true, + "importHelpers": true, + "target": "ES2022", + "module": "preserve" + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "typeCheckHostBindings": true, + "strictTemplates": true + }, + "files": [], + "references": [ + { + "path": "./projects/a2a-chat-canvas/tsconfig.lib.json" + }, + { + "path": "./projects/orchestrator/tsconfig.app.json" + } + ] +} diff --git a/samples/client/lit/mcp-apps-in-a2ui-sample/.gitignore b/samples/community/client/lit/mcp-apps-in-a2ui-sample/.gitignore similarity index 100% rename from samples/client/lit/mcp-apps-in-a2ui-sample/.gitignore rename to samples/community/client/lit/mcp-apps-in-a2ui-sample/.gitignore diff --git a/samples/client/lit/mcp-apps-in-a2ui-sample/README.md b/samples/community/client/lit/mcp-apps-in-a2ui-sample/README.md similarity index 100% rename from samples/client/lit/mcp-apps-in-a2ui-sample/README.md rename to samples/community/client/lit/mcp-apps-in-a2ui-sample/README.md diff --git a/samples/client/lit/mcp-apps-in-a2ui-sample/client.ts b/samples/community/client/lit/mcp-apps-in-a2ui-sample/client.ts similarity index 100% rename from samples/client/lit/mcp-apps-in-a2ui-sample/client.ts rename to samples/community/client/lit/mcp-apps-in-a2ui-sample/client.ts diff --git a/samples/client/lit/mcp-apps-in-a2ui-sample/index.html b/samples/community/client/lit/mcp-apps-in-a2ui-sample/index.html similarity index 100% rename from samples/client/lit/mcp-apps-in-a2ui-sample/index.html rename to samples/community/client/lit/mcp-apps-in-a2ui-sample/index.html diff --git a/samples/client/lit/mcp-apps-in-a2ui-sample/mcp-app.ts b/samples/community/client/lit/mcp-apps-in-a2ui-sample/mcp-app.ts similarity index 100% rename from samples/client/lit/mcp-apps-in-a2ui-sample/mcp-app.ts rename to samples/community/client/lit/mcp-apps-in-a2ui-sample/mcp-app.ts diff --git a/samples/client/lit/mcp-apps-in-a2ui-sample/middleware/a2a.ts b/samples/community/client/lit/mcp-apps-in-a2ui-sample/middleware/a2a.ts similarity index 100% rename from samples/client/lit/mcp-apps-in-a2ui-sample/middleware/a2a.ts rename to samples/community/client/lit/mcp-apps-in-a2ui-sample/middleware/a2a.ts diff --git a/samples/client/lit/custom-components-example/middleware/index.ts b/samples/community/client/lit/mcp-apps-in-a2ui-sample/middleware/index.ts similarity index 100% rename from samples/client/lit/custom-components-example/middleware/index.ts rename to samples/community/client/lit/mcp-apps-in-a2ui-sample/middleware/index.ts diff --git a/samples/client/lit/mcp-apps-in-a2ui-sample/package.json b/samples/community/client/lit/mcp-apps-in-a2ui-sample/package.json similarity index 93% rename from samples/client/lit/mcp-apps-in-a2ui-sample/package.json rename to samples/community/client/lit/mcp-apps-in-a2ui-sample/package.json index 88b6c24b11..27b6a27998 100644 --- a/samples/client/lit/mcp-apps-in-a2ui-sample/package.json +++ b/samples/community/client/lit/mcp-apps-in-a2ui-sample/package.json @@ -42,9 +42,6 @@ "env": { "FORCE_COLOR": "1" }, - "dependencies": [ - "../../../../renderers/lit:build:tsc" - ], "files": [ "**/*.ts", "tsconfig.json" @@ -80,8 +77,8 @@ }, "dependencies": { "@a2a-js/sdk": "^0.3.13", - "@a2ui/lit": "workspace:*", - "@a2ui/web_core": "workspace:*", + "@a2ui/lit": "^0.10.0", + "@a2ui/web_core": "^0.10.0", "@lit-labs/signals": "^0.3.0", "@lit/context": "^1.1.6", "@modelcontextprotocol/ext-apps": "^1.7.4", diff --git a/samples/client/lit/mcp-apps-in-a2ui-sample/theme/theme.ts b/samples/community/client/lit/mcp-apps-in-a2ui-sample/theme/theme.ts similarity index 100% rename from samples/client/lit/mcp-apps-in-a2ui-sample/theme/theme.ts rename to samples/community/client/lit/mcp-apps-in-a2ui-sample/theme/theme.ts diff --git a/samples/client/lit/custom-components-example/tsconfig.json b/samples/community/client/lit/mcp-apps-in-a2ui-sample/tsconfig.json similarity index 61% rename from samples/client/lit/custom-components-example/tsconfig.json rename to samples/community/client/lit/mcp-apps-in-a2ui-sample/tsconfig.json index 8ab8bd6ce0..18d85e5589 100644 --- a/samples/client/lit/custom-components-example/tsconfig.json +++ b/samples/community/client/lit/mcp-apps-in-a2ui-sample/tsconfig.json @@ -29,14 +29,6 @@ "strict": false, "noUnusedLocals": false, "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true, - "paths": { - "lit": ["../../../../renderers/lit/node_modules/lit"], - "lit-html": ["../../../../renderers/lit/node_modules/lit-html"], - "lit-element": ["../../../../renderers/lit/node_modules/lit-element"], - "@lit/reactive-element": ["../../../../renderers/lit/node_modules/@lit/reactive-element"], - "@lit/context": ["../../../../renderers/lit/node_modules/@lit/context"] - } - }, - "references": [{"path": "../../../../renderers/lit"}] + "noFallthroughCasesInSwitch": true + } } diff --git a/samples/client/lit/mcp-apps-in-a2ui-sample/ui/custom-components/mcp-apps-component.ts b/samples/community/client/lit/mcp-apps-in-a2ui-sample/ui/custom-components/mcp-apps-component.ts similarity index 100% rename from samples/client/lit/mcp-apps-in-a2ui-sample/ui/custom-components/mcp-apps-component.ts rename to samples/community/client/lit/mcp-apps-in-a2ui-sample/ui/custom-components/mcp-apps-component.ts diff --git a/samples/client/lit/mcp-apps-in-a2ui-sample/ui/custom-components/register-components.ts b/samples/community/client/lit/mcp-apps-in-a2ui-sample/ui/custom-components/register-components.ts similarity index 100% rename from samples/client/lit/mcp-apps-in-a2ui-sample/ui/custom-components/register-components.ts rename to samples/community/client/lit/mcp-apps-in-a2ui-sample/ui/custom-components/register-components.ts diff --git a/samples/client/lit/custom-components-example/ui/shared-constants.ts b/samples/community/client/lit/mcp-apps-in-a2ui-sample/ui/shared-constants.ts similarity index 100% rename from samples/client/lit/custom-components-example/ui/shared-constants.ts rename to samples/community/client/lit/mcp-apps-in-a2ui-sample/ui/shared-constants.ts diff --git a/samples/client/lit/mcp-apps-in-a2ui-sample/vite.config.ts b/samples/community/client/lit/mcp-apps-in-a2ui-sample/vite.config.ts similarity index 100% rename from samples/client/lit/mcp-apps-in-a2ui-sample/vite.config.ts rename to samples/community/client/lit/mcp-apps-in-a2ui-sample/vite.config.ts diff --git a/samples/client/lit/personalized_learning/.dockerignore b/samples/community/client/lit/personalized_learning/.dockerignore similarity index 100% rename from samples/client/lit/personalized_learning/.dockerignore rename to samples/community/client/lit/personalized_learning/.dockerignore diff --git a/samples/client/lit/personalized_learning/.env.template b/samples/community/client/lit/personalized_learning/.env.template similarity index 100% rename from samples/client/lit/personalized_learning/.env.template rename to samples/community/client/lit/personalized_learning/.env.template diff --git a/samples/client/lit/personalized_learning/.gcloudignore b/samples/community/client/lit/personalized_learning/.gcloudignore similarity index 100% rename from samples/client/lit/personalized_learning/.gcloudignore rename to samples/community/client/lit/personalized_learning/.gcloudignore diff --git a/samples/client/lit/personalized_learning/.gitignore b/samples/community/client/lit/personalized_learning/.gitignore similarity index 100% rename from samples/client/lit/personalized_learning/.gitignore rename to samples/community/client/lit/personalized_learning/.gitignore diff --git a/samples/client/lit/personalized_learning/Dockerfile b/samples/community/client/lit/personalized_learning/Dockerfile similarity index 100% rename from samples/client/lit/personalized_learning/Dockerfile rename to samples/community/client/lit/personalized_learning/Dockerfile diff --git a/samples/client/lit/personalized_learning/Quickstart.ipynb b/samples/community/client/lit/personalized_learning/Quickstart.ipynb similarity index 100% rename from samples/client/lit/personalized_learning/Quickstart.ipynb rename to samples/community/client/lit/personalized_learning/Quickstart.ipynb diff --git a/samples/client/lit/personalized_learning/README.md b/samples/community/client/lit/personalized_learning/README.md similarity index 100% rename from samples/client/lit/personalized_learning/README.md rename to samples/community/client/lit/personalized_learning/README.md diff --git a/samples/client/lit/personalized_learning/a2ui-primer.html b/samples/community/client/lit/personalized_learning/a2ui-primer.html similarity index 100% rename from samples/client/lit/personalized_learning/a2ui-primer.html rename to samples/community/client/lit/personalized_learning/a2ui-primer.html diff --git a/samples/client/lit/personalized_learning/api-server.ts b/samples/community/client/lit/personalized_learning/api-server.ts similarity index 100% rename from samples/client/lit/personalized_learning/api-server.ts rename to samples/community/client/lit/personalized_learning/api-server.ts diff --git a/samples/client/lit/personalized_learning/assets/architecture.jpg b/samples/community/client/lit/personalized_learning/assets/architecture.jpg similarity index 100% rename from samples/client/lit/personalized_learning/assets/architecture.jpg rename to samples/community/client/lit/personalized_learning/assets/architecture.jpg diff --git a/samples/client/lit/personalized_learning/assets/hero.jpg b/samples/community/client/lit/personalized_learning/assets/hero.jpg similarity index 100% rename from samples/client/lit/personalized_learning/assets/hero.jpg rename to samples/community/client/lit/personalized_learning/assets/hero.jpg diff --git a/samples/client/lit/personalized_learning/deploy.py b/samples/community/client/lit/personalized_learning/deploy.py similarity index 100% rename from samples/client/lit/personalized_learning/deploy.py rename to samples/community/client/lit/personalized_learning/deploy.py diff --git a/samples/client/lit/personalized_learning/deploy_hosting.py b/samples/community/client/lit/personalized_learning/deploy_hosting.py similarity index 100% rename from samples/client/lit/personalized_learning/deploy_hosting.py rename to samples/community/client/lit/personalized_learning/deploy_hosting.py diff --git a/samples/client/lit/personalized_learning/index.html b/samples/community/client/lit/personalized_learning/index.html similarity index 100% rename from samples/client/lit/personalized_learning/index.html rename to samples/community/client/lit/personalized_learning/index.html diff --git a/samples/client/lit/personalized_learning/package.json b/samples/community/client/lit/personalized_learning/package.json similarity index 93% rename from samples/client/lit/personalized_learning/package.json rename to samples/community/client/lit/personalized_learning/package.json index ed9d95b3d4..9d5787e070 100644 --- a/samples/client/lit/personalized_learning/package.json +++ b/samples/community/client/lit/personalized_learning/package.json @@ -20,7 +20,7 @@ "lint:fix": "echo \"Workspace has no lint configuration.\"" }, "dependencies": { - "@a2ui/lit": "workspace:*", + "@a2ui/lit": "^0.10.0", "@google/genai": "^2.8.0", "@lit-labs/signals": "^0.3.0", "@lit/context": "^1.1.6", @@ -41,9 +41,6 @@ "wireit": { "build": { "command": "tsc && vite build", - "dependencies": [ - "../../../../renderers/lit:build" - ], "files": [ "src/**/*", "tsconfig.json", diff --git a/samples/client/lit/personalized_learning/public/404.html b/samples/community/client/lit/personalized_learning/public/404.html similarity index 100% rename from samples/client/lit/personalized_learning/public/404.html rename to samples/community/client/lit/personalized_learning/public/404.html diff --git a/samples/client/lit/personalized_learning/public/assets/.gitkeep b/samples/community/client/lit/personalized_learning/public/assets/.gitkeep similarity index 100% rename from samples/client/lit/personalized_learning/public/assets/.gitkeep rename to samples/community/client/lit/personalized_learning/public/assets/.gitkeep diff --git a/samples/client/lit/personalized_learning/public/assets/openstax-bio-glossary.md b/samples/community/client/lit/personalized_learning/public/assets/openstax-bio-glossary.md similarity index 100% rename from samples/client/lit/personalized_learning/public/assets/openstax-bio-glossary.md rename to samples/community/client/lit/personalized_learning/public/assets/openstax-bio-glossary.md diff --git a/samples/client/lit/personalized_learning/public/favicon.svg b/samples/community/client/lit/personalized_learning/public/favicon.svg similarity index 100% rename from samples/client/lit/personalized_learning/public/favicon.svg rename to samples/community/client/lit/personalized_learning/public/favicon.svg diff --git a/samples/client/lit/personalized_learning/public/maria-context.html b/samples/community/client/lit/personalized_learning/public/maria-context.html similarity index 100% rename from samples/client/lit/personalized_learning/public/maria-context.html rename to samples/community/client/lit/personalized_learning/public/maria-context.html diff --git a/samples/client/lit/personalized_learning/quickstart_setup.sh b/samples/community/client/lit/personalized_learning/quickstart_setup.sh similarity index 100% rename from samples/client/lit/personalized_learning/quickstart_setup.sh rename to samples/community/client/lit/personalized_learning/quickstart_setup.sh diff --git a/samples/client/lit/personalized_learning/src/a2a-client.ts b/samples/community/client/lit/personalized_learning/src/a2a-client.ts similarity index 100% rename from samples/client/lit/personalized_learning/src/a2a-client.ts rename to samples/community/client/lit/personalized_learning/src/a2a-client.ts diff --git a/samples/client/lit/personalized_learning/src/a2ui-renderer.ts b/samples/community/client/lit/personalized_learning/src/a2ui-renderer.ts similarity index 100% rename from samples/client/lit/personalized_learning/src/a2ui-renderer.ts rename to samples/community/client/lit/personalized_learning/src/a2ui-renderer.ts diff --git a/samples/client/lit/personalized_learning/src/chat-orchestrator.ts b/samples/community/client/lit/personalized_learning/src/chat-orchestrator.ts similarity index 100% rename from samples/client/lit/personalized_learning/src/chat-orchestrator.ts rename to samples/community/client/lit/personalized_learning/src/chat-orchestrator.ts diff --git a/samples/client/lit/personalized_learning/src/firebase-auth.ts b/samples/community/client/lit/personalized_learning/src/firebase-auth.ts similarity index 100% rename from samples/client/lit/personalized_learning/src/firebase-auth.ts rename to samples/community/client/lit/personalized_learning/src/firebase-auth.ts diff --git a/samples/client/lit/personalized_learning/src/flashcard.ts b/samples/community/client/lit/personalized_learning/src/flashcard.ts similarity index 100% rename from samples/client/lit/personalized_learning/src/flashcard.ts rename to samples/community/client/lit/personalized_learning/src/flashcard.ts diff --git a/samples/client/lit/personalized_learning/src/main.ts b/samples/community/client/lit/personalized_learning/src/main.ts similarity index 100% rename from samples/client/lit/personalized_learning/src/main.ts rename to samples/community/client/lit/personalized_learning/src/main.ts diff --git a/samples/client/lit/personalized_learning/src/quiz-card.ts b/samples/community/client/lit/personalized_learning/src/quiz-card.ts similarity index 100% rename from samples/client/lit/personalized_learning/src/quiz-card.ts rename to samples/community/client/lit/personalized_learning/src/quiz-card.ts diff --git a/samples/client/lit/personalized_learning/src/theme-provider.ts b/samples/community/client/lit/personalized_learning/src/theme-provider.ts similarity index 100% rename from samples/client/lit/personalized_learning/src/theme-provider.ts rename to samples/community/client/lit/personalized_learning/src/theme-provider.ts diff --git a/samples/client/lit/personalized_learning/src/theme.ts b/samples/community/client/lit/personalized_learning/src/theme.ts similarity index 100% rename from samples/client/lit/personalized_learning/src/theme.ts rename to samples/community/client/lit/personalized_learning/src/theme.ts diff --git a/samples/client/lit/personalized_learning/src/types.ts b/samples/community/client/lit/personalized_learning/src/types.ts similarity index 100% rename from samples/client/lit/personalized_learning/src/types.ts rename to samples/community/client/lit/personalized_learning/src/types.ts diff --git a/samples/client/lit/personalized_learning/src/vite-env.d.ts b/samples/community/client/lit/personalized_learning/src/vite-env.d.ts similarity index 100% rename from samples/client/lit/personalized_learning/src/vite-env.d.ts rename to samples/community/client/lit/personalized_learning/src/vite-env.d.ts diff --git a/samples/client/lit/personalized_learning/tsconfig.json b/samples/community/client/lit/personalized_learning/tsconfig.json similarity index 100% rename from samples/client/lit/personalized_learning/tsconfig.json rename to samples/community/client/lit/personalized_learning/tsconfig.json diff --git a/samples/client/lit/personalized_learning/vite.config.ts b/samples/community/client/lit/personalized_learning/vite.config.ts similarity index 100% rename from samples/client/lit/personalized_learning/vite.config.ts rename to samples/community/client/lit/personalized_learning/vite.config.ts diff --git a/samples/community/package.json b/samples/community/package.json new file mode 100644 index 0000000000..0dbdebb8dc --- /dev/null +++ b/samples/community/package.json @@ -0,0 +1,32 @@ +{ + "name": "a2ui-community-samples", + "version": "0.0.0", + "private": true, + "packageManager": "yarn@4.13.0", + "workspaces": [ + "client/angular", + "client/angular/projects/*", + "client/lit/*" + ], + "scripts": { + "build:web": "yarn workspace angular-a2ui run build && yarn workspace @a2ui/mcp-apps-in-a2ui-sample run build && yarn workspace personalized-learning-demo run build" + }, + "resolutions": { + "typescript": "5.9.3", + "zod": "^3.25.76", + "@angular/core": "^21.2.5", + "@angular/common": "^21.2.5", + "@angular/compiler": "^21.2.5", + "@angular/compiler-cli": "^21.2.5", + "@angular/platform-browser": "^21.2.5", + "@angular/platform-server": "^21.2.5", + "@angular/router": "^21.2.5", + "@angular/ssr": "^21.2.5", + "@angular/build": "^21.2.5", + "@angular/cli": "^21.2.5", + "@angular/forms": "^21.2.5", + "@angular/cdk": "^21.2.5", + "@angular/google-maps": "^21.2.5", + "@angular/material": "^21.2.5" + } +} diff --git a/samples/community/yarn.lock b/samples/community/yarn.lock new file mode 100644 index 0000000000..536318dfc7 --- /dev/null +++ b/samples/community/yarn.lock @@ -0,0 +1,9985 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@a2a-js/sdk@npm:^0.3.13": + version: 0.3.13 + resolution: "@a2a-js/sdk@npm:0.3.13" + dependencies: + uuid: "npm:^11.1.0" + peerDependencies: + "@bufbuild/protobuf": ^2.10.2 + "@grpc/grpc-js": ^1.11.0 + express: ^4.21.2 || ^5.1.0 + peerDependenciesMeta: + "@bufbuild/protobuf": + optional: true + "@grpc/grpc-js": + optional: true + express: + optional: true + checksum: 10c0/066c621329c397baeedf7460c8ac74973f520f88574b65119ca0414c8f4279fa03d0875795da4e46f1ae9870142e6d1a0a0a04daabf4c8e25f52bf98e525ab9d + languageName: node + linkType: hard + +"@a2ui/angular@npm:^0.10.0": + version: 0.10.0 + resolution: "@a2ui/angular@npm:0.10.0" + dependencies: + "@a2ui/web_core": "npm:^0.10.0" + "@preact/signals-core": "npm:^1.13.0" + tslib: "npm:^2.3.0" + zod: "npm:^3.25.76" + peerDependencies: + "@a2ui/markdown-it": ^0.0.4 + "@angular/common": ^21.2.0 + "@angular/core": ^21.2.0 + "@angular/platform-browser": ^21.2.0 + peerDependenciesMeta: + "@a2ui/markdown-it": + optional: true + checksum: 10c0/8b5524dcc264c4ca4b0efa83711673f7ac0b1d9ebc0c00e3f2170ca1101fe7b915312ec8a18bdd385346edd4c7a23175b94c50660760878d093523a063fa3909 + languageName: node + linkType: hard + +"@a2ui/lit@npm:^0.10.0": + version: 0.10.0 + resolution: "@a2ui/lit@npm:0.10.0" + dependencies: + "@a2ui/web_core": "npm:^0.10.0" + "@lit-labs/signals": "npm:^0.1.3" + "@lit/context": "npm:^1.1.4" + lit: "npm:^3.3.1" + signal-utils: "npm:^0.21.1" + zod: "npm:^3.25.76" + peerDependencies: + "@a2ui/markdown-it": ^0.0.4 + peerDependenciesMeta: + "@a2ui/markdown-it": + optional: true + checksum: 10c0/987084224410c3efc4af855bba3fee3fdc710bd0ef689013b5a79fb6d0e372108a068fde46f002c5314c6a311d5a82f1dedf6fc476d1f228261a9898c649c262 + languageName: node + linkType: hard + +"@a2ui/markdown-it@npm:^0.0.4": + version: 0.0.4 + resolution: "@a2ui/markdown-it@npm:0.0.4" + dependencies: + dompurify: "npm:^3.3.1" + markdown-it: "npm:^14.1.0" + peerDependencies: + "@a2ui/web_core": ^0.9.2 + checksum: 10c0/19d53625f14cf64cd61778ed5e0131601b4010b274ef401a013e3a8c4a81b422ba4173ee7baea7a44cb7f29ec19dd5d1400c0d07cbca2f50639de4de58fec4ef + languageName: node + linkType: hard + +"@a2ui/mcp-apps-in-a2ui-sample@workspace:client/lit/mcp-apps-in-a2ui-sample": + version: 0.0.0-use.local + resolution: "@a2ui/mcp-apps-in-a2ui-sample@workspace:client/lit/mcp-apps-in-a2ui-sample" + dependencies: + "@a2a-js/sdk": "npm:^0.3.13" + "@a2ui/lit": "npm:^0.10.0" + "@a2ui/web_core": "npm:^0.10.0" + "@lit-labs/signals": "npm:^0.3.0" + "@lit/context": "npm:^1.1.6" + "@modelcontextprotocol/ext-apps": "npm:^1.7.4" + dotenv: "npm:^17.4.2" + lit: "npm:^3.3.3" + typescript: "npm:5.9.3" + uuid: "npm:^14.0.0" + vite: "npm:^8.0.16" + wireit: "npm:^0.15.0-pre.2" + languageName: unknown + linkType: soft + +"@a2ui/mcp_calculator@workspace:client/angular/projects/mcp_calculator": + version: 0.0.0-use.local + resolution: "@a2ui/mcp_calculator@workspace:client/angular/projects/mcp_calculator" + dependencies: + "@a2ui/angular": "npm:^0.10.0" + "@a2ui/web_core": "npm:^0.10.0" + languageName: unknown + linkType: soft + +"@a2ui/orchestrator@workspace:client/angular/projects/orchestrator": + version: 0.0.0-use.local + resolution: "@a2ui/orchestrator@workspace:client/angular/projects/orchestrator" + dependencies: + "@a2ui/angular": "npm:^0.10.0" + "@a2ui/markdown-it": "npm:^0.0.4" + "@a2ui/web_core": "npm:^0.10.0" + wireit: "npm:^0.15.0-pre.2" + languageName: unknown + linkType: soft + +"@a2ui/web_core@npm:^0.10.0": + version: 0.10.0 + resolution: "@a2ui/web_core@npm:0.10.0" + dependencies: + "@preact/signals-core": "npm:^1.13.0" + date-fns: "npm:^4.1.0" + zod: "npm:^3.25.76" + zod-to-json-schema: "npm:^3.25.1" + checksum: 10c0/b85c151d1fa05e3419b17a7295a675a1656405ee93b0cd3e760a3d263a18ec4193959052c2d6fcc14eb82e18dcd36f9a67e64b9f1f7710a58872b7a9953dca55 + languageName: node + linkType: hard + +"@algolia/abtesting@npm:1.14.1": + version: 1.14.1 + resolution: "@algolia/abtesting@npm:1.14.1" + dependencies: + "@algolia/client-common": "npm:5.48.1" + "@algolia/requester-browser-xhr": "npm:5.48.1" + "@algolia/requester-fetch": "npm:5.48.1" + "@algolia/requester-node-http": "npm:5.48.1" + checksum: 10c0/81c1f48fee026e62043924496eff0d60f499787699aa48d0013fb4b24c06091c863b5e5ecde00f26a6eb2e5cd587d386d9e1d384ee1f21eecec86788d552ac0d + languageName: node + linkType: hard + +"@algolia/client-abtesting@npm:5.48.1": + version: 5.48.1 + resolution: "@algolia/client-abtesting@npm:5.48.1" + dependencies: + "@algolia/client-common": "npm:5.48.1" + "@algolia/requester-browser-xhr": "npm:5.48.1" + "@algolia/requester-fetch": "npm:5.48.1" + "@algolia/requester-node-http": "npm:5.48.1" + checksum: 10c0/380d527f4ec686fab95221673bea8b6667b6a3927aaec8d7f4623f464238409d795839a3cdf5e72a7784532f8039099a727c87ef858443c445107423d01308f8 + languageName: node + linkType: hard + +"@algolia/client-analytics@npm:5.48.1": + version: 5.48.1 + resolution: "@algolia/client-analytics@npm:5.48.1" + dependencies: + "@algolia/client-common": "npm:5.48.1" + "@algolia/requester-browser-xhr": "npm:5.48.1" + "@algolia/requester-fetch": "npm:5.48.1" + "@algolia/requester-node-http": "npm:5.48.1" + checksum: 10c0/7249bb679bb891e62d8e2add29c9a1fbdf233af1ae3ac6c350d264096cd32e65c65d0eac2e76101413be6fb6b0c94bae34d04918cf785c645b637b1dd95334d1 + languageName: node + linkType: hard + +"@algolia/client-common@npm:5.48.1": + version: 5.48.1 + resolution: "@algolia/client-common@npm:5.48.1" + checksum: 10c0/001a9614a423d45cbc8792affa9e1008e6eee98fa6abf701495d09ffc98d103cbd4f0591144292e87f129f9d4f0250bd23b9a514c8a0e0f754631ac2f1ed8079 + languageName: node + linkType: hard + +"@algolia/client-insights@npm:5.48.1": + version: 5.48.1 + resolution: "@algolia/client-insights@npm:5.48.1" + dependencies: + "@algolia/client-common": "npm:5.48.1" + "@algolia/requester-browser-xhr": "npm:5.48.1" + "@algolia/requester-fetch": "npm:5.48.1" + "@algolia/requester-node-http": "npm:5.48.1" + checksum: 10c0/52a91a8f75314f849032bfd8107e34ad0a2998f9e15093443f21f78f9f0adeaa667f4c38311424aa4d042aa97ee71179ca87304ac83a4f865980d26d977a9ac1 + languageName: node + linkType: hard + +"@algolia/client-personalization@npm:5.48.1": + version: 5.48.1 + resolution: "@algolia/client-personalization@npm:5.48.1" + dependencies: + "@algolia/client-common": "npm:5.48.1" + "@algolia/requester-browser-xhr": "npm:5.48.1" + "@algolia/requester-fetch": "npm:5.48.1" + "@algolia/requester-node-http": "npm:5.48.1" + checksum: 10c0/09205ad8fbf0d1c473d567f6861b615934b12453ad0aecaf28efdf64d60a3468dc584136a19d84bd345cc58d66aac1104c9f78a9005a17227400beb860fd2976 + languageName: node + linkType: hard + +"@algolia/client-query-suggestions@npm:5.48.1": + version: 5.48.1 + resolution: "@algolia/client-query-suggestions@npm:5.48.1" + dependencies: + "@algolia/client-common": "npm:5.48.1" + "@algolia/requester-browser-xhr": "npm:5.48.1" + "@algolia/requester-fetch": "npm:5.48.1" + "@algolia/requester-node-http": "npm:5.48.1" + checksum: 10c0/072a18a39a6eab30b0974a4fffe7e5265d91e274d99ea919219dd6bcf6490a989e6649993bb569d37646368bfe46c309060de52b56ea0fd9f582f2bfba7090e9 + languageName: node + linkType: hard + +"@algolia/client-search@npm:5.48.1": + version: 5.48.1 + resolution: "@algolia/client-search@npm:5.48.1" + dependencies: + "@algolia/client-common": "npm:5.48.1" + "@algolia/requester-browser-xhr": "npm:5.48.1" + "@algolia/requester-fetch": "npm:5.48.1" + "@algolia/requester-node-http": "npm:5.48.1" + checksum: 10c0/7a9e5054ee490e7d9224b5f87044a72a95ca2eda2982342b4ed2ca2e36a4bcc4f4c3b02c56a96679483545217c3b0e67a75a510a2fcf12e48ff86e51c7b1863b + languageName: node + linkType: hard + +"@algolia/ingestion@npm:1.48.1": + version: 1.48.1 + resolution: "@algolia/ingestion@npm:1.48.1" + dependencies: + "@algolia/client-common": "npm:5.48.1" + "@algolia/requester-browser-xhr": "npm:5.48.1" + "@algolia/requester-fetch": "npm:5.48.1" + "@algolia/requester-node-http": "npm:5.48.1" + checksum: 10c0/1397ed4a5b6ebf1306defbd1d18a78aa8d9ed23cb566c5da9c14e955859df0497e2bb0b16b7ea177e654a20fe08d148c58bdb3405891739e63a84362d0764218 + languageName: node + linkType: hard + +"@algolia/monitoring@npm:1.48.1": + version: 1.48.1 + resolution: "@algolia/monitoring@npm:1.48.1" + dependencies: + "@algolia/client-common": "npm:5.48.1" + "@algolia/requester-browser-xhr": "npm:5.48.1" + "@algolia/requester-fetch": "npm:5.48.1" + "@algolia/requester-node-http": "npm:5.48.1" + checksum: 10c0/8ba1306003408c6913349bf019b9e7736610195d00ee6d55b67034416b8cb329c4791d508a24a805ed2ae8bd099528ae1abb3d0f9ea28bcb39039eb3d6df80a2 + languageName: node + linkType: hard + +"@algolia/recommend@npm:5.48.1": + version: 5.48.1 + resolution: "@algolia/recommend@npm:5.48.1" + dependencies: + "@algolia/client-common": "npm:5.48.1" + "@algolia/requester-browser-xhr": "npm:5.48.1" + "@algolia/requester-fetch": "npm:5.48.1" + "@algolia/requester-node-http": "npm:5.48.1" + checksum: 10c0/d00e362dcd7b39bad81666e0e35fb40c1032c922d3ca0a73a91fdd05549810ed11baa523fcd2508b5f7447e59724f981775e795f8a88abca6194b929617056f8 + languageName: node + linkType: hard + +"@algolia/requester-browser-xhr@npm:5.48.1": + version: 5.48.1 + resolution: "@algolia/requester-browser-xhr@npm:5.48.1" + dependencies: + "@algolia/client-common": "npm:5.48.1" + checksum: 10c0/9428aa0bcf52ea008e2b88ad63b2dc8e049f8656b50a7300af3515d06e50c9b00d54e443e86223c80967041b3cc6acb7016b666f19c73888f5c9d582c2764a70 + languageName: node + linkType: hard + +"@algolia/requester-fetch@npm:5.48.1": + version: 5.48.1 + resolution: "@algolia/requester-fetch@npm:5.48.1" + dependencies: + "@algolia/client-common": "npm:5.48.1" + checksum: 10c0/82694d0f0f6193fcc694381e27117845b85c77ac5dd86c2f41320e96f59d41adc66fe85a10fb751470d6eb2a5d3b0fc150e330e295451670a3c081cae796470e + languageName: node + linkType: hard + +"@algolia/requester-node-http@npm:5.48.1": + version: 5.48.1 + resolution: "@algolia/requester-node-http@npm:5.48.1" + dependencies: + "@algolia/client-common": "npm:5.48.1" + checksum: 10c0/22daffd2e8452f9d5d16f5210f28e0f989c28d35d107e95f4644b6960ebd6bd98b542c5d86f44ba61eba298e35d38f87e1747ffd43823ee6d81edc7fcdd85c51 + languageName: node + linkType: hard + +"@ampproject/remapping@npm:2.3.0, @ampproject/remapping@npm:^2.3.0": + version: 2.3.0 + resolution: "@ampproject/remapping@npm:2.3.0" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/81d63cca5443e0f0c72ae18b544cc28c7c0ec2cea46e7cb888bb0e0f411a1191d0d6b7af798d54e30777d8d1488b2ec0732aac2be342d3d7d3ffd271c6f489ed + languageName: node + linkType: hard + +"@angular-devkit/architect@npm:0.2102.15": + version: 0.2102.15 + resolution: "@angular-devkit/architect@npm:0.2102.15" + dependencies: + "@angular-devkit/core": "npm:21.2.15" + rxjs: "npm:7.8.2" + bin: + architect: bin/cli.js + checksum: 10c0/4a905f256bcbcb46ddae2d113decf4fe130d2c0309b798ae4d0317883da1049552d78cf4ba8aa35a1e2183f35ad118c851c493c7d24e8362c76b64506d10c77f + languageName: node + linkType: hard + +"@angular-devkit/core@npm:21.2.15": + version: 21.2.15 + resolution: "@angular-devkit/core@npm:21.2.15" + dependencies: + ajv: "npm:8.18.0" + ajv-formats: "npm:3.0.1" + jsonc-parser: "npm:3.3.1" + picomatch: "npm:4.0.4" + rxjs: "npm:7.8.2" + source-map: "npm:0.7.6" + peerDependencies: + chokidar: ^5.0.0 + peerDependenciesMeta: + chokidar: + optional: true + checksum: 10c0/0ee6c9515d05acb0f6872608030630b0e2d9291f9bcbce9a6101630a9a5ed2888da0ea29f12c476b5a05426935922bbe5c367ae2b1b8d9e04c8bcc74d87d828a + languageName: node + linkType: hard + +"@angular-devkit/schematics@npm:21.2.15": + version: 21.2.15 + resolution: "@angular-devkit/schematics@npm:21.2.15" + dependencies: + "@angular-devkit/core": "npm:21.2.15" + jsonc-parser: "npm:3.3.1" + magic-string: "npm:0.30.21" + ora: "npm:9.3.0" + rxjs: "npm:7.8.2" + checksum: 10c0/16c14efceebfd6c775c691ae755e7f36428d1c85a321f1d674780b7cf8cfaba8048682d73ad876d893b795ae57dd8a11535c23f675904abce7bc3f0f97b20130 + languageName: node + linkType: hard + +"@angular/build@npm:^21.2.5": + version: 21.2.15 + resolution: "@angular/build@npm:21.2.15" + dependencies: + "@ampproject/remapping": "npm:2.3.0" + "@angular-devkit/architect": "npm:0.2102.15" + "@babel/core": "npm:7.29.0" + "@babel/helper-annotate-as-pure": "npm:7.27.3" + "@babel/helper-split-export-declaration": "npm:7.24.7" + "@inquirer/confirm": "npm:5.1.21" + "@vitejs/plugin-basic-ssl": "npm:2.1.4" + beasties: "npm:0.4.1" + browserslist: "npm:^4.26.0" + esbuild: "npm:0.27.3" + https-proxy-agent: "npm:7.0.6" + istanbul-lib-instrument: "npm:6.0.3" + jsonc-parser: "npm:3.3.1" + listr2: "npm:9.0.5" + lmdb: "npm:3.5.1" + magic-string: "npm:0.30.21" + mrmime: "npm:2.0.1" + parse5-html-rewriting-stream: "npm:8.0.0" + picomatch: "npm:4.0.4" + piscina: "npm:5.1.4" + rolldown: "npm:1.0.0-rc.4" + sass: "npm:1.97.3" + semver: "npm:7.7.4" + source-map-support: "npm:0.5.21" + tinyglobby: "npm:0.2.15" + undici: "npm:7.24.4" + vite: "npm:7.3.2" + watchpack: "npm:2.5.1" + peerDependencies: + "@angular/compiler": ^21.0.0 + "@angular/compiler-cli": ^21.0.0 + "@angular/core": ^21.0.0 + "@angular/localize": ^21.0.0 + "@angular/platform-browser": ^21.0.0 + "@angular/platform-server": ^21.0.0 + "@angular/service-worker": ^21.0.0 + "@angular/ssr": ^21.2.15 + karma: ^6.4.0 + less: ^4.2.0 + ng-packagr: ^21.0.0 + postcss: ^8.4.0 + tailwindcss: ^2.0.0 || ^3.0.0 || ^4.0.0 + tslib: ^2.3.0 + typescript: ">=5.9 <6.0" + vitest: ^4.0.8 + dependenciesMeta: + lmdb: + optional: true + peerDependenciesMeta: + "@angular/core": + optional: true + "@angular/localize": + optional: true + "@angular/platform-browser": + optional: true + "@angular/platform-server": + optional: true + "@angular/service-worker": + optional: true + "@angular/ssr": + optional: true + karma: + optional: true + less: + optional: true + ng-packagr: + optional: true + postcss: + optional: true + tailwindcss: + optional: true + vitest: + optional: true + checksum: 10c0/db46f7d6388bf63307b39cb29205164cb365a46842af207a1445fec719f694f5f99c45214e645c116effa3635ba0b173a41caef019dd63eccf80ad69be8c83e8 + languageName: node + linkType: hard + +"@angular/cdk@npm:^21.2.5": + version: 21.2.14 + resolution: "@angular/cdk@npm:21.2.14" + dependencies: + parse5: "npm:^8.0.0" + tslib: "npm:^2.3.0" + peerDependencies: + "@angular/common": ^21.0.0 || ^22.0.0 + "@angular/core": ^21.0.0 || ^22.0.0 + "@angular/platform-browser": ^21.0.0 || ^22.0.0 + rxjs: ^6.5.3 || ^7.4.0 + checksum: 10c0/9c52a7942d8758ae0659583762ab6a56cde4fb97e3f6b47fca80e2bb0d99c4e9925a45136eefbb1442b98fd781f211fbe788adc0da2c091a5e58687d3818042f + languageName: node + linkType: hard + +"@angular/cli@npm:^21.2.5": + version: 21.2.15 + resolution: "@angular/cli@npm:21.2.15" + dependencies: + "@angular-devkit/architect": "npm:0.2102.15" + "@angular-devkit/core": "npm:21.2.15" + "@angular-devkit/schematics": "npm:21.2.15" + "@inquirer/prompts": "npm:7.10.1" + "@listr2/prompt-adapter-inquirer": "npm:3.0.5" + "@modelcontextprotocol/sdk": "npm:1.26.0" + "@schematics/angular": "npm:21.2.15" + "@yarnpkg/lockfile": "npm:1.1.0" + algoliasearch: "npm:5.48.1" + ini: "npm:6.0.0" + jsonc-parser: "npm:3.3.1" + listr2: "npm:9.0.5" + npm-package-arg: "npm:13.0.2" + pacote: "npm:21.3.1" + parse5-html-rewriting-stream: "npm:8.0.0" + semver: "npm:7.7.4" + yargs: "npm:18.0.0" + zod: "npm:4.3.6" + bin: + ng: bin/ng.js + checksum: 10c0/68ed9e23bdd5e571ed93c72cd1b8ae4de1770745e80e28cb3ffb2e307003052e2bdce03e81ebf5e0a89099ff6cd28c5bc469baea5be45fcb249adf1c7032e803 + languageName: node + linkType: hard + +"@angular/common@npm:^21.2.5": + version: 21.2.17 + resolution: "@angular/common@npm:21.2.17" + dependencies: + tslib: "npm:^2.3.0" + peerDependencies: + "@angular/core": 21.2.17 + rxjs: ^6.5.3 || ^7.4.0 + checksum: 10c0/889c1a3d64a5b61e77dc6cf7d0cb5da1575cd13bed6b11262a340076949b2968e3a80d9ca4a7ea4cddda1901c0df36ae412d0fd0fcc9bd45ecad58f40ab7a6d0 + languageName: node + linkType: hard + +"@angular/compiler-cli@npm:^21.2.5": + version: 21.2.17 + resolution: "@angular/compiler-cli@npm:21.2.17" + dependencies: + "@babel/core": "npm:7.29.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + chokidar: "npm:^5.0.0" + convert-source-map: "npm:^1.5.1" + reflect-metadata: "npm:^0.2.0" + semver: "npm:^7.0.0" + tslib: "npm:^2.3.0" + yargs: "npm:^18.0.0" + peerDependencies: + "@angular/compiler": 21.2.17 + typescript: ">=5.9 <6.1" + peerDependenciesMeta: + typescript: + optional: true + bin: + ng-xi18n: bundles/src/bin/ng_xi18n.js + ngc: bundles/src/bin/ngc.js + checksum: 10c0/2fb02b8a8ac7560f5d4588cae5e07c564b4997e941181fb577d1bc3bbc7f6fb22dc68deea2e4c36a699c1384bb1f67cd455039c30dcb27a31d70392ad06b64a4 + languageName: node + linkType: hard + +"@angular/compiler@npm:^21.2.5": + version: 21.2.17 + resolution: "@angular/compiler@npm:21.2.17" + dependencies: + tslib: "npm:^2.3.0" + checksum: 10c0/e5f45c1b9fe189ac9e1a2fd68ec1aa051b50ecfa63e1b62ff23076ab00a2bbd27a489dfc892377835716c96de36676a060110c8e8c5b479191ffa18b8cb10cf4 + languageName: node + linkType: hard + +"@angular/core@npm:^21.2.5": + version: 21.2.17 + resolution: "@angular/core@npm:21.2.17" + dependencies: + tslib: "npm:^2.3.0" + peerDependencies: + "@angular/compiler": 21.2.17 + rxjs: ^6.5.3 || ^7.4.0 + zone.js: ~0.15.0 || ~0.16.0 + peerDependenciesMeta: + "@angular/compiler": + optional: true + zone.js: + optional: true + checksum: 10c0/70aa13cfec6d221c23c427f794409d541b80cd4feb65ef668810e1e927efde645c02c450404a4eb9691d6da17a04732abe5a9d4550b934dfeb459f8ca0f274d8 + languageName: node + linkType: hard + +"@angular/forms@npm:^21.2.5": + version: 21.2.17 + resolution: "@angular/forms@npm:21.2.17" + dependencies: + "@standard-schema/spec": "npm:^1.0.0" + tslib: "npm:^2.3.0" + peerDependencies: + "@angular/common": 21.2.17 + "@angular/core": 21.2.17 + "@angular/platform-browser": 21.2.17 + rxjs: ^6.5.3 || ^7.4.0 + checksum: 10c0/e46bf07c340c40b02d0a742af2c07eea544408161b02a47738933eb3e44ba28d7a9abe3de67fada90786de0414641a75da3e8cb04e42980b7958df49c424c844 + languageName: node + linkType: hard + +"@angular/google-maps@npm:^21.2.5": + version: 21.2.14 + resolution: "@angular/google-maps@npm:21.2.14" + dependencies: + "@types/google.maps": "npm:^3.54.10" + tslib: "npm:^2.3.0" + peerDependencies: + "@angular/common": ^21.0.0 || ^22.0.0 + "@angular/core": ^21.0.0 || ^22.0.0 + rxjs: ^6.5.3 || ^7.4.0 + checksum: 10c0/125c4748224b445c4782774948cbe464a9a514a93b6216f47f49dd50d6ad7fbfdd22e9d75fbf0c2f9a9efee6f8ba52e0824343c48d63aca020ff788f905b17e2 + languageName: node + linkType: hard + +"@angular/material@npm:^21.2.5": + version: 21.2.14 + resolution: "@angular/material@npm:21.2.14" + dependencies: + tslib: "npm:^2.3.0" + peerDependencies: + "@angular/cdk": 21.2.14 + "@angular/common": ^21.0.0 || ^22.0.0 + "@angular/core": ^21.0.0 || ^22.0.0 + "@angular/forms": ^21.0.0 || ^22.0.0 + "@angular/platform-browser": ^21.0.0 || ^22.0.0 + rxjs: ^6.5.3 || ^7.4.0 + checksum: 10c0/5d2e45790817f944c840ae52bcb70195bcfe56f2c3e2530719a6bb08ee865eedcd40f8466f7c9baa96b72057539a44cd7728efd680eb50ed5af55a573825b5f6 + languageName: node + linkType: hard + +"@angular/platform-browser@npm:^21.2.5": + version: 21.2.17 + resolution: "@angular/platform-browser@npm:21.2.17" + dependencies: + tslib: "npm:^2.3.0" + peerDependencies: + "@angular/animations": 21.2.17 + "@angular/common": 21.2.17 + "@angular/core": 21.2.17 + peerDependenciesMeta: + "@angular/animations": + optional: true + checksum: 10c0/ca5fcb74613fa41898135e5ff1440d7250896acef51be76ca941da4c8ce3b4e0651ed460e3e47b6294417a8973fa5485d3dc624e4059e6e6a401aacfd72a32fe + languageName: node + linkType: hard + +"@angular/platform-server@npm:^21.2.5": + version: 21.2.17 + resolution: "@angular/platform-server@npm:21.2.17" + dependencies: + tslib: "npm:^2.3.0" + xhr2: "npm:^0.2.0" + peerDependencies: + "@angular/common": 21.2.17 + "@angular/compiler": 21.2.17 + "@angular/core": 21.2.17 + "@angular/platform-browser": 21.2.17 + rxjs: ^6.5.3 || ^7.4.0 + checksum: 10c0/9356f539ef47a766f9934bd887935dc0677eb0ca9f52c95ad2255fe686fab859779aaddf63e88da2756258b4820c570c1c88c162fcc1d540613ec19c8fe53e54 + languageName: node + linkType: hard + +"@angular/router@npm:^21.2.5": + version: 21.2.17 + resolution: "@angular/router@npm:21.2.17" + dependencies: + tslib: "npm:^2.3.0" + peerDependencies: + "@angular/common": 21.2.17 + "@angular/core": 21.2.17 + "@angular/platform-browser": 21.2.17 + rxjs: ^6.5.3 || ^7.4.0 + checksum: 10c0/239bfe9f4cf5da7dce3b7bf447ddd4dab7a72f0cfcc11cc4c3195f892829e5879c9ab496b65c64741de3e180f1e2f0a8d9e7eb33fa558a3dfdbea6f8a7b17d1f + languageName: node + linkType: hard + +"@angular/ssr@npm:^21.2.5": + version: 21.2.15 + resolution: "@angular/ssr@npm:21.2.15" + dependencies: + tslib: "npm:^2.3.0" + peerDependencies: + "@angular/common": ^21.0.0 + "@angular/core": ^21.0.0 + "@angular/platform-server": ^21.0.0 + "@angular/router": ^21.0.0 + peerDependenciesMeta: + "@angular/platform-server": + optional: true + checksum: 10c0/4da705be440872312bea5e75d1dd8969b7f31eb2a8820758f6a5c4421140dd7439fcb55eacb793d559ec1d44ec4e0dfee7d4185ee99c57ef9ca0d5de34db6bf6 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.29.0, @babel/code-frame@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/code-frame@npm:7.29.7" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.29.7" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.1.1" + checksum: 10c0/169fc2080169a40c1760155eaaaf739bcb882df0bec76a83adbda5493645bc17270a3434b8848c494b1933e96fe1d147370001e3cda09a39f43ae30f08ef2069 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/compat-data@npm:7.29.7" + checksum: 10c0/47913f05e08a45a1c9df38c02b4b49e391005085b489432647a1abe112e5d9c75e3be8ea5972b7f6da4ec5d1339922ceb9ea02b8a25d4ed1cb8636e5261f344e + languageName: node + linkType: hard + +"@babel/core@npm:7.29.0": + version: 7.29.0 + resolution: "@babel/core@npm:7.29.0" + dependencies: + "@babel/code-frame": "npm:^7.29.0" + "@babel/generator": "npm:^7.29.0" + "@babel/helper-compilation-targets": "npm:^7.28.6" + "@babel/helper-module-transforms": "npm:^7.28.6" + "@babel/helpers": "npm:^7.28.6" + "@babel/parser": "npm:^7.29.0" + "@babel/template": "npm:^7.28.6" + "@babel/traverse": "npm:^7.29.0" + "@babel/types": "npm:^7.29.0" + "@jridgewell/remapping": "npm:^2.3.5" + convert-source-map: "npm:^2.0.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: 10c0/5127d2e8e842ae409e11bcbb5c2dff9874abf5415e8026925af7308e903f4f43397341467a130490d1a39884f461bc2b67f3063bce0be44340db89687fd852aa + languageName: node + linkType: hard + +"@babel/core@npm:^7.23.9": + version: 7.29.7 + resolution: "@babel/core@npm:7.29.7" + dependencies: + "@babel/code-frame": "npm:^7.29.7" + "@babel/generator": "npm:^7.29.7" + "@babel/helper-compilation-targets": "npm:^7.29.7" + "@babel/helper-module-transforms": "npm:^7.29.7" + "@babel/helpers": "npm:^7.29.7" + "@babel/parser": "npm:^7.29.7" + "@babel/template": "npm:^7.29.7" + "@babel/traverse": "npm:^7.29.7" + "@babel/types": "npm:^7.29.7" + "@jridgewell/remapping": "npm:^2.3.5" + convert-source-map: "npm:^2.0.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: 10c0/112fb09c24de7a1de64d1de2c31fe65c4e6af4cb2fb6e6d99ea5373e6fc51e75b88581c0efae4c4c68f119a02a988c7106e95011a41530a2fb8ed793c7eaa07b + languageName: node + linkType: hard + +"@babel/generator@npm:^7.29.0, @babel/generator@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/generator@npm:7.29.7" + dependencies: + "@babel/parser": "npm:^7.29.7" + "@babel/types": "npm:^7.29.7" + "@jridgewell/gen-mapping": "npm:^0.3.12" + "@jridgewell/trace-mapping": "npm:^0.3.28" + jsesc: "npm:^3.0.2" + checksum: 10c0/9bf72b01b5bd0ea5b1288a0e37dbd360bff2f2b1ce73342c0d40fb3db2ec3dc004ada5ffa925c5e12939a416eed59e600d562b8ecd938ce0d27dfd0eb6c6c2b7 + languageName: node + linkType: hard + +"@babel/helper-annotate-as-pure@npm:7.27.3": + version: 7.27.3 + resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" + dependencies: + "@babel/types": "npm:^7.27.3" + checksum: 10c0/94996ce0a05b7229f956033e6dcd69393db2b0886d0db6aff41e704390402b8cdcca11f61449cb4f86cfd9e61b5ad3a73e4fa661eeed7846b125bd1c33dbc633 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.28.6, @babel/helper-compilation-targets@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/helper-compilation-targets@npm:7.29.7" + dependencies: + "@babel/compat-data": "npm:^7.29.7" + "@babel/helper-validator-option": "npm:^7.29.7" + browserslist: "npm:^4.24.0" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.1" + checksum: 10c0/4c15fd4c69a0a7047799a28a88460c19cede0a0ee8af994ea169114986f4af48b92c7393a4a3fee0456c11a656eece3448a6ed06354453d6c27cccf17195453b + languageName: node + linkType: hard + +"@babel/helper-globals@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/helper-globals@npm:7.29.7" + checksum: 10c0/f38417c40b1129a1b2b519ca961b9040c8827d1444fd74068702286b91b77089431dc76b6b9d5c1496e5da2a4f3ad329c6946e688ba3fa0d1d0b3d2b4f34f36a + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/helper-module-imports@npm:7.29.7" + dependencies: + "@babel/traverse": "npm:^7.29.7" + "@babel/types": "npm:^7.29.7" + checksum: 10c0/6adf60d97356027413342a092f818d9678c4f5caff716a33e3284b5ae14e47a9e88059d421dde4ee4894691260039a12602c0e7becadc175602194b40dfa345d + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.28.6, @babel/helper-module-transforms@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/helper-module-transforms@npm:7.29.7" + dependencies: + "@babel/helper-module-imports": "npm:^7.29.7" + "@babel/helper-validator-identifier": "npm:^7.29.7" + "@babel/traverse": "npm:^7.29.7" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/ee5a2172c24a42be696836f4b0d947489c9729d8adf5821885cf77d1ad5333e3c447368e9a71f67df1099570490553dccf9f888ef0a92a48aa63cb086bd8c7e1 + languageName: node + linkType: hard + +"@babel/helper-split-export-declaration@npm:7.24.7": + version: 7.24.7 + resolution: "@babel/helper-split-export-declaration@npm:7.24.7" + dependencies: + "@babel/types": "npm:^7.24.7" + checksum: 10c0/0254577d7086bf09b01bbde98f731d4fcf4b7c3fa9634fdb87929801307c1f6202a1352e3faa5492450fa8da4420542d44de604daf540704ff349594a78184f6 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/helper-string-parser@npm:7.29.7" + checksum: 10c0/194bc0f1716e396d5ffde56ad6119745fb9557662c98611590e5e454906783a4ccb21ce93056b8eb69a4909044834e45d96e50ac695bbe9e3221648fe033c06c + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/helper-validator-identifier@npm:7.29.7" + checksum: 10c0/4795354e7ae0dcafa72de1cd04ec51252dc1498517170beaf019e03effc5b7bf13c6b21a3949a77e07b8125be7f106ed1131350d8ebd4566ae874094a726d62b + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/helper-validator-option@npm:7.29.7" + checksum: 10c0/d2a06c6d0ac40ba4a2f219fc2cab249c7a94bacdb2686273b7f9598571c908809b48468ff588915a346e6cc7296f60b581023d1d498b747fed06f779d335c2cc + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.28.6, @babel/helpers@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/helpers@npm:7.29.7" + dependencies: + "@babel/template": "npm:^7.29.7" + "@babel/types": "npm:^7.29.7" + checksum: 10c0/218e8d10953647c9f44775f5a022b227a182674853b5ea8631889deb7e1a3e4bc870388aaecf59bb8bd92a87f9a96220ed3f70a35bffec6bcf9169ecb67891ac + languageName: node + linkType: hard + +"@babel/parser@npm:^7.23.9, @babel/parser@npm:^7.29.0, @babel/parser@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/parser@npm:7.29.7" + dependencies: + "@babel/types": "npm:^7.29.7" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/65133038f80b54a714d6027cb77cee3f9a6b5c4c6842ce674301e13947cbcbfa8055e63acaf1b84c085d34226a14425b2c2b97b829e0e226d2e8f1299942a51d + languageName: node + linkType: hard + +"@babel/template@npm:^7.28.6, @babel/template@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/template@npm:7.29.7" + dependencies: + "@babel/code-frame": "npm:^7.29.7" + "@babel/parser": "npm:^7.29.7" + "@babel/types": "npm:^7.29.7" + checksum: 10c0/8bb7f900dcab0e9e1c5ffbc33ca10e0d26b7b2e2ca804becb73ee771b9c4ed6e2908a4ae4a14c08560febb45d2b6b9a173955e42ad404d05f8b04840a14d9c58 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.29.0, @babel/traverse@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/traverse@npm:7.29.7" + dependencies: + "@babel/code-frame": "npm:^7.29.7" + "@babel/generator": "npm:^7.29.7" + "@babel/helper-globals": "npm:^7.29.7" + "@babel/parser": "npm:^7.29.7" + "@babel/template": "npm:^7.29.7" + "@babel/types": "npm:^7.29.7" + debug: "npm:^4.3.1" + checksum: 10c0/e256a1fbdb956555b76f3c285b1e453f6bedec8b3afb61751d99d933efd11c7d79caf5ddf2493570058a9f7deaa1b48324380d7c1aa1443fd9508becbf56331a + languageName: node + linkType: hard + +"@babel/types@npm:^7.24.7, @babel/types@npm:^7.27.3, @babel/types@npm:^7.29.0, @babel/types@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/types@npm:7.29.7" + dependencies: + "@babel/helper-string-parser": "npm:^7.29.7" + "@babel/helper-validator-identifier": "npm:^7.29.7" + checksum: 10c0/b6623994c69717fa27294f5fa46d59140338e2d86c6c1c13085c84ef7d53086ee357fbf4fe9abe3dd3da75734dc77c4c0df2f90fb29e667558bb3b3fb705e88f + languageName: node + linkType: hard + +"@emnapi/core@npm:1.10.0": + version: 1.10.0 + resolution: "@emnapi/core@npm:1.10.0" + dependencies: + "@emnapi/wasi-threads": "npm:1.2.1" + tslib: "npm:^2.4.0" + checksum: 10c0/f51d08227857b60632de7714d708124f0e100a1462dde6df8221760939aa3204a73193830371830fac0716f3ccd2129f2cac1b17cd7d7958bc4da9018a296edb + languageName: node + linkType: hard + +"@emnapi/runtime@npm:1.10.0": + version: 1.10.0 + resolution: "@emnapi/runtime@npm:1.10.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/953f14991d1aefb92ee6f8eb27dea725e484791a53a0cb5f47d9e0087b9a2c929ff2e92adf95af15d6ad456db6300c6b761ebf72b50a875b874a83520b3ba093 + languageName: node + linkType: hard + +"@emnapi/wasi-threads@npm:1.2.1": + version: 1.2.1 + resolution: "@emnapi/wasi-threads@npm:1.2.1" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/32fcfa81ab396533b2ec1f4082b1ff779a05d9c836bbbd3f4398405b0e6814c0d9503b7993130e37bc6941dbc1ded49f55e9700ae9ca4e803bab2b5bc5deb331 + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/aix-ppc64@npm:0.27.3" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/aix-ppc64@npm:0.27.7" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/aix-ppc64@npm:0.28.1" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/android-arm64@npm:0.27.3" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/android-arm64@npm:0.27.7" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/android-arm64@npm:0.28.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/android-arm@npm:0.27.3" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/android-arm@npm:0.27.7" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/android-arm@npm:0.28.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/android-x64@npm:0.27.3" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/android-x64@npm:0.27.7" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/android-x64@npm:0.28.1" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/darwin-arm64@npm:0.27.3" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/darwin-arm64@npm:0.27.7" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/darwin-arm64@npm:0.28.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/darwin-x64@npm:0.27.3" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/darwin-x64@npm:0.27.7" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/darwin-x64@npm:0.28.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/freebsd-arm64@npm:0.27.3" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/freebsd-arm64@npm:0.27.7" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/freebsd-arm64@npm:0.28.1" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/freebsd-x64@npm:0.27.3" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/freebsd-x64@npm:0.27.7" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/freebsd-x64@npm:0.28.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-arm64@npm:0.27.3" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-arm64@npm:0.27.7" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/linux-arm64@npm:0.28.1" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-arm@npm:0.27.3" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-arm@npm:0.27.7" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/linux-arm@npm:0.28.1" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-ia32@npm:0.27.3" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-ia32@npm:0.27.7" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/linux-ia32@npm:0.28.1" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-loong64@npm:0.27.3" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-loong64@npm:0.27.7" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/linux-loong64@npm:0.28.1" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-mips64el@npm:0.27.3" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-mips64el@npm:0.27.7" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/linux-mips64el@npm:0.28.1" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-ppc64@npm:0.27.3" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-ppc64@npm:0.27.7" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/linux-ppc64@npm:0.28.1" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-riscv64@npm:0.27.3" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-riscv64@npm:0.27.7" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/linux-riscv64@npm:0.28.1" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-s390x@npm:0.27.3" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-s390x@npm:0.27.7" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/linux-s390x@npm:0.28.1" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-x64@npm:0.27.3" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-x64@npm:0.27.7" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/linux-x64@npm:0.28.1" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/netbsd-arm64@npm:0.27.3" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/netbsd-arm64@npm:0.27.7" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/netbsd-arm64@npm:0.28.1" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/netbsd-x64@npm:0.27.3" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/netbsd-x64@npm:0.27.7" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/netbsd-x64@npm:0.28.1" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/openbsd-arm64@npm:0.27.3" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/openbsd-arm64@npm:0.27.7" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/openbsd-arm64@npm:0.28.1" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/openbsd-x64@npm:0.27.3" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/openbsd-x64@npm:0.27.7" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/openbsd-x64@npm:0.28.1" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openharmony-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/openharmony-arm64@npm:0.27.3" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openharmony-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/openharmony-arm64@npm:0.27.7" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openharmony-arm64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/openharmony-arm64@npm:0.28.1" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/sunos-x64@npm:0.27.3" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/sunos-x64@npm:0.27.7" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/sunos-x64@npm:0.28.1" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/win32-arm64@npm:0.27.3" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/win32-arm64@npm:0.27.7" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/win32-arm64@npm:0.28.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/win32-ia32@npm:0.27.3" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/win32-ia32@npm:0.27.7" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/win32-ia32@npm:0.28.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/win32-x64@npm:0.27.3" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/win32-x64@npm:0.27.7" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/win32-x64@npm:0.28.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.8.0": + version: 4.9.1 + resolution: "@eslint-community/eslint-utils@npm:4.9.1" + dependencies: + eslint-visitor-keys: "npm:^3.4.3" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10c0/dc4ab5e3e364ef27e33666b11f4b86e1a6c1d7cbf16f0c6ff87b1619b3562335e9201a3d6ce806221887ff780ec9d828962a290bb910759fd40a674686503f02 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.12.2": + version: 4.12.2 + resolution: "@eslint-community/regexpp@npm:4.12.2" + checksum: 10c0/fddcbc66851b308478d04e302a4d771d6917a0b3740dc351513c0da9ca2eab8a1adf99f5e0aa7ab8b13fa0df005c81adeee7e63a92f3effd7d367a163b721c2d + languageName: node + linkType: hard + +"@eslint/config-array@npm:^0.23.5": + version: 0.23.5 + resolution: "@eslint/config-array@npm:0.23.5" + dependencies: + "@eslint/object-schema": "npm:^3.0.5" + debug: "npm:^4.3.1" + minimatch: "npm:^10.2.4" + checksum: 10c0/b24833c4c76e78ee075d306cd3f095db46b2db0f90cc13a6ee6e4275f9889731c05bf5403ab5fefb79c756e07ac9184ed0e04570341382f9eccbccc80e6d1a0c + languageName: node + linkType: hard + +"@eslint/config-helpers@npm:^0.6.0": + version: 0.6.0 + resolution: "@eslint/config-helpers@npm:0.6.0" + dependencies: + "@eslint/core": "npm:^1.2.1" + checksum: 10c0/f9af20e8b60b0ba27edb74b8eb40c0c5d51a9bf9baf9e053bb57833a87cb0a1c49b4dfaad88fc24d49c907ad1324c8a0b668684fa9c321351dac4bc9155ec10a + languageName: node + linkType: hard + +"@eslint/core@npm:^1.2.1": + version: 1.2.1 + resolution: "@eslint/core@npm:1.2.1" + dependencies: + "@types/json-schema": "npm:^7.0.15" + checksum: 10c0/10979b40588ecfef771fcb5013a542a35fb30692cc95a65f3481b0b36fbd89f5679efeb30d57f4eed35203d859aabace2a620177d6c536f71b299a1af2f3398f + languageName: node + linkType: hard + +"@eslint/object-schema@npm:^3.0.5": + version: 3.0.5 + resolution: "@eslint/object-schema@npm:3.0.5" + checksum: 10c0/1db337431f520b99e9edda64ef5fafd7ec6a029843eeb608753025125b6649d861d843cffafafd3c4e37926d7d5f9ec0c6a8e3665c13c3da2144e8132892e92e + languageName: node + linkType: hard + +"@eslint/plugin-kit@npm:^0.7.2": + version: 0.7.2 + resolution: "@eslint/plugin-kit@npm:0.7.2" + dependencies: + "@eslint/core": "npm:^1.2.1" + levn: "npm:^0.4.1" + checksum: 10c0/aafba08077bcd6d7dde6c2e21db18086046a88f914f29971a84cac9ad2d48952ded1b293e665e523805297eff756522dafa16f0062195e2c7143dcd1d47d11ed + languageName: node + linkType: hard + +"@fastify/busboy@npm:^3.0.0": + version: 3.2.0 + resolution: "@fastify/busboy@npm:3.2.0" + checksum: 10c0/3e4fb00a27e3149d1c68de8ff14007d2bbcbbc171a9d050d0a8772e836727329d4d3f130995ebaa19cf537d5d2f5ce2a88000366e6192e751457bfcc2125f351 + languageName: node + linkType: hard + +"@firebase/ai@npm:2.13.0": + version: 2.13.0 + resolution: "@firebase/ai@npm:2.13.0" + dependencies: + "@firebase/app-check-interop-types": "npm:0.3.4" + "@firebase/component": "npm:0.7.3" + "@firebase/logger": "npm:0.5.1" + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app": 0.x + "@firebase/app-types": 0.x + checksum: 10c0/d5a14c7aef90ea1fbd3e6f220dcf3fb673d62c0eb8a6b22a7e96de2555e551d44b163deafed6967bb5cc521e10f09adf15e0aa49260e4ba2e8149852525eb528 + languageName: node + linkType: hard + +"@firebase/analytics-compat@npm:0.2.28": + version: 0.2.28 + resolution: "@firebase/analytics-compat@npm:0.2.28" + dependencies: + "@firebase/analytics": "npm:0.10.22" + "@firebase/analytics-types": "npm:0.8.4" + "@firebase/component": "npm:0.7.3" + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app-compat": 0.x + checksum: 10c0/e8508b26bc75f47cd90f7cd31b36084439179fe85eac8ebe02f3ac6ffb0176d8f77f1e91de07fedf3307ea3ef0b5c547b89ba175c0f6277829d3df1d48a713e3 + languageName: node + linkType: hard + +"@firebase/analytics-types@npm:0.8.4": + version: 0.8.4 + resolution: "@firebase/analytics-types@npm:0.8.4" + checksum: 10c0/5dd5929eab551855c8338ed97c1a4ef18713501611ea9226f391410800f9736490500d6decdda777c8dc37ac615b59fd50127559e486dfac91690a07394a0fb6 + languageName: node + linkType: hard + +"@firebase/analytics@npm:0.10.22": + version: 0.10.22 + resolution: "@firebase/analytics@npm:0.10.22" + dependencies: + "@firebase/component": "npm:0.7.3" + "@firebase/installations": "npm:0.6.22" + "@firebase/logger": "npm:0.5.1" + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app": 0.x + checksum: 10c0/2f6398e1fe197ff2f3eab5fac7f2296d666799eb1598a35d71e996d365478b35dd00001e57e5e0b4e18d9ea6996a9aded36847dbc88091022c3d1df095df9ad8 + languageName: node + linkType: hard + +"@firebase/app-check-compat@npm:0.4.4": + version: 0.4.4 + resolution: "@firebase/app-check-compat@npm:0.4.4" + dependencies: + "@firebase/app-check": "npm:0.11.4" + "@firebase/app-check-types": "npm:0.5.4" + "@firebase/component": "npm:0.7.3" + "@firebase/logger": "npm:0.5.1" + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app-compat": 0.x + checksum: 10c0/af7f364fcb6d367ed4ae6e3e739d37756fa1dda75ee95b14b69b6be6aa1733463f289fc6a5d3854943f2fb4f8ca1dcbe1b5d129c02062336b4c8fbfd7b2babb3 + languageName: node + linkType: hard + +"@firebase/app-check-interop-types@npm:0.3.4": + version: 0.3.4 + resolution: "@firebase/app-check-interop-types@npm:0.3.4" + checksum: 10c0/1861470d0e3f4fcff5e46bd9e9cc9c2408988eb01d661bac791e0dd511dde20e148503c923c8808f6921a70c523740f102c55615e0393158277d643fcec21c1c + languageName: node + linkType: hard + +"@firebase/app-check-types@npm:0.5.4": + version: 0.5.4 + resolution: "@firebase/app-check-types@npm:0.5.4" + checksum: 10c0/945edf0f14a8e432893a36594028b78c728e56ebbf41543019b0b5319b987e38b7b374268589905b8827bb16af06cbb2682218d9b0bb50efd7d2cab13e40e825 + languageName: node + linkType: hard + +"@firebase/app-check@npm:0.11.4": + version: 0.11.4 + resolution: "@firebase/app-check@npm:0.11.4" + dependencies: + "@firebase/component": "npm:0.7.3" + "@firebase/logger": "npm:0.5.1" + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app": 0.x + checksum: 10c0/f8763a9c5c841e9143f0fce326e24fbd78c21959a8daa5bbcd2546868ead062fc89bd49e4b210a6ffdb148a9f8128dc215da0dbf7d7b80ed0fbfa490b1483f79 + languageName: node + linkType: hard + +"@firebase/app-compat@npm:0.5.13": + version: 0.5.13 + resolution: "@firebase/app-compat@npm:0.5.13" + dependencies: + "@firebase/app": "npm:0.14.13" + "@firebase/component": "npm:0.7.3" + "@firebase/logger": "npm:0.5.1" + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + checksum: 10c0/9d4c45f72fbce9c8565ec76549e710c256968754f60b5e43d5fe85227bf9045e54cf4fe80cd1a86e1b9ca2b7db6eede1009e20339548a0224dfe3623566755ec + languageName: node + linkType: hard + +"@firebase/app-types@npm:0.9.5": + version: 0.9.5 + resolution: "@firebase/app-types@npm:0.9.5" + dependencies: + "@firebase/logger": "npm:0.5.1" + checksum: 10c0/997c2deab31ac1666b10dd9fbcf6198266581ac9d1228c90969331edf1c94554312f3c828748322a444d00dcbf88e06071926c2ba565228f128d7af3e70811bd + languageName: node + linkType: hard + +"@firebase/app@npm:0.14.13": + version: 0.14.13 + resolution: "@firebase/app@npm:0.14.13" + dependencies: + "@firebase/component": "npm:0.7.3" + "@firebase/logger": "npm:0.5.1" + "@firebase/util": "npm:1.15.1" + idb: "npm:7.1.1" + tslib: "npm:^2.1.0" + checksum: 10c0/ae2cc1a2a5fe45d7791ed339fcc06b899f5c2e94bb6d9dc9963e743cad6d480527efaaf5c9b060b4bc14f5a85793ee1404e1da1ead8cfabb142d27d4c4af7904 + languageName: node + linkType: hard + +"@firebase/auth-compat@npm:0.6.7": + version: 0.6.7 + resolution: "@firebase/auth-compat@npm:0.6.7" + dependencies: + "@firebase/auth": "npm:1.13.2" + "@firebase/auth-types": "npm:0.13.1" + "@firebase/component": "npm:0.7.3" + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app-compat": 0.x + checksum: 10c0/3e0c6a464bf52926271cccafe5073a548da3d3a142be63e25fbf06dcd67dc6cb697c5562d73fbd64727e917271f285bc18a048876366051b2ea1edfaac0ef985 + languageName: node + linkType: hard + +"@firebase/auth-interop-types@npm:0.2.5": + version: 0.2.5 + resolution: "@firebase/auth-interop-types@npm:0.2.5" + checksum: 10c0/1a0a72935b2809f1b9c57e1fda2eb53b741cf4f2e78b295d45bf4d14829d51ce3b6f86b6d4ce6b867b5878c223c10032d11fdf82d0ab4a10b30dd4803fa287ae + languageName: node + linkType: hard + +"@firebase/auth-types@npm:0.13.1": + version: 0.13.1 + resolution: "@firebase/auth-types@npm:0.13.1" + peerDependencies: + "@firebase/app-types": 0.x + "@firebase/util": 1.x + checksum: 10c0/598273dfccb4d112fd9e6026433ac8ce4716b7ac466e80c0f9b1f6d892c44a575f52f7e43341fe5bdae863f59f5532816f2acd13479e88db6650d421c17839e2 + languageName: node + linkType: hard + +"@firebase/auth@npm:1.13.2": + version: 1.13.2 + resolution: "@firebase/auth@npm:1.13.2" + dependencies: + "@firebase/component": "npm:0.7.3" + "@firebase/logger": "npm:0.5.1" + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app": 0.x + "@react-native-async-storage/async-storage": ^2.2.0 || ^3.0.0 + peerDependenciesMeta: + "@react-native-async-storage/async-storage": + optional: true + checksum: 10c0/e18dfec04e8e18e60d7075f5dcfeba491838aaad4549f0a4826ecadf0c096186aa66df9aea8c7835692fb25d06ff46d82aba010058bdb3caa746b039d6d92d29 + languageName: node + linkType: hard + +"@firebase/component@npm:0.7.3": + version: 0.7.3 + resolution: "@firebase/component@npm:0.7.3" + dependencies: + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + checksum: 10c0/a2c3400afecfa90cf6ec3526579ed3557828aafa8d4c3b34af7221a92ec2d9261c4a85b01c31b89774efcb6194c63f23ff219efe6a9cd842de2a6d41728bbd35 + languageName: node + linkType: hard + +"@firebase/data-connect@npm:0.7.1": + version: 0.7.1 + resolution: "@firebase/data-connect@npm:0.7.1" + dependencies: + "@firebase/auth-interop-types": "npm:0.2.5" + "@firebase/component": "npm:0.7.3" + "@firebase/logger": "npm:0.5.1" + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app": 0.x + checksum: 10c0/e4df223abdaae906ef3c226aadebbfb00ef9eae56bf8c4226ce4cb7a708e4de6ae381db4f7d188f82d2868da3ed64847a09b39c6dec34248528c522d9bb74baa + languageName: node + linkType: hard + +"@firebase/database-compat@npm:2.1.4, @firebase/database-compat@npm:^2.1.4": + version: 2.1.4 + resolution: "@firebase/database-compat@npm:2.1.4" + dependencies: + "@firebase/component": "npm:0.7.3" + "@firebase/database": "npm:1.1.3" + "@firebase/database-types": "npm:1.0.20" + "@firebase/logger": "npm:0.5.1" + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + checksum: 10c0/e0d889acca69ee55030bc2fdd223d5b692e8a15656aa4403291f57b36401be89e915354260817a7be8f4eaa988d744d36d07933a0e8c9f79a46a971218f02dd6 + languageName: node + linkType: hard + +"@firebase/database-types@npm:1.0.20, @firebase/database-types@npm:^1.0.20": + version: 1.0.20 + resolution: "@firebase/database-types@npm:1.0.20" + dependencies: + "@firebase/app-types": "npm:0.9.5" + "@firebase/util": "npm:1.15.1" + checksum: 10c0/bc2848ded44b3bbf0352cd9f5580190b4e82b83c99618e0cf76a84a68850a4cf87954b1d9fff134ae4d930be79188eb5e7e34e3007e25576d630f1c83a7ace0f + languageName: node + linkType: hard + +"@firebase/database@npm:1.1.3": + version: 1.1.3 + resolution: "@firebase/database@npm:1.1.3" + dependencies: + "@firebase/app-check-interop-types": "npm:0.3.4" + "@firebase/auth-interop-types": "npm:0.2.5" + "@firebase/component": "npm:0.7.3" + "@firebase/logger": "npm:0.5.1" + "@firebase/util": "npm:1.15.1" + faye-websocket: "npm:0.11.4" + tslib: "npm:^2.1.0" + checksum: 10c0/90aceab86ffff9bbccc9f1d6bfc83d450e74a6817c3605f8b61b3f8ea028b89f7d81017d12b61ff805506684e12435476da4cb0ce37dfb773c95807709e75e25 + languageName: node + linkType: hard + +"@firebase/firestore-compat@npm:0.4.10": + version: 0.4.10 + resolution: "@firebase/firestore-compat@npm:0.4.10" + dependencies: + "@firebase/component": "npm:0.7.3" + "@firebase/firestore": "npm:4.15.0" + "@firebase/firestore-types": "npm:3.0.4" + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app-compat": 0.x + checksum: 10c0/fc6471f2744fd0b5edd495488e22e8c54b4d1e2f674eefc16c1a133f8c891d3ed76bcfc92c7981e012d0a5a3d3c8090c29689b62f3391aec5070e03e2f267072 + languageName: node + linkType: hard + +"@firebase/firestore-types@npm:3.0.4": + version: 3.0.4 + resolution: "@firebase/firestore-types@npm:3.0.4" + peerDependencies: + "@firebase/app-types": 0.x + "@firebase/util": 1.x + checksum: 10c0/8370f76b9ed06e8a6982af70d077b4b369ebcb322e334180c74d5c581d6487353f1bdf64a5ba0d62cac64dfc5973f4697d81257cf2927e305fa4e54fad3d9e6d + languageName: node + linkType: hard + +"@firebase/firestore@npm:4.15.0": + version: 4.15.0 + resolution: "@firebase/firestore@npm:4.15.0" + dependencies: + "@firebase/component": "npm:0.7.3" + "@firebase/logger": "npm:0.5.1" + "@firebase/util": "npm:1.15.1" + "@firebase/webchannel-wrapper": "npm:1.0.6" + "@grpc/grpc-js": "npm:~1.9.0" + "@grpc/proto-loader": "npm:^0.7.8" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app": 0.x + checksum: 10c0/8efffb37943ceb1c0132ca7d6317eee51d972c881b250139684df3bf11462828f0aa887085d6e4e3134258e78a8205884ce348f394d2ad7e55d14992fe729f20 + languageName: node + linkType: hard + +"@firebase/functions-compat@npm:0.4.5": + version: 0.4.5 + resolution: "@firebase/functions-compat@npm:0.4.5" + dependencies: + "@firebase/component": "npm:0.7.3" + "@firebase/functions": "npm:0.13.5" + "@firebase/functions-types": "npm:0.6.4" + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app-compat": 0.x + checksum: 10c0/38c614ec794ad6d702e366670df21f14a5057093264bc871d0101a224921663092b373c3ac08917f299f09b9b867984d934ef123376d75160fcc48a8d480dd6a + languageName: node + linkType: hard + +"@firebase/functions-types@npm:0.6.4": + version: 0.6.4 + resolution: "@firebase/functions-types@npm:0.6.4" + checksum: 10c0/50f1e50fc58f9a297e05c888a555b7bf085be5f5c4284e035cf3ebfc63016fa2b6dbf8de5e4a343b04f98e357525968e6254eabd271eb3b2548fa297770c7f68 + languageName: node + linkType: hard + +"@firebase/functions@npm:0.13.5": + version: 0.13.5 + resolution: "@firebase/functions@npm:0.13.5" + dependencies: + "@firebase/app-check-interop-types": "npm:0.3.4" + "@firebase/auth-interop-types": "npm:0.2.5" + "@firebase/component": "npm:0.7.3" + "@firebase/messaging-interop-types": "npm:0.2.5" + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app": 0.x + checksum: 10c0/92a5d6261feee27aa5ad7f0c1c55e3abf44c3ddd66f65f2bbf1001b06bb1d5bb2fdad21e6539299ae41079a8293da583c11bde0de949d736221426ab0bc663d1 + languageName: node + linkType: hard + +"@firebase/installations-compat@npm:0.2.22": + version: 0.2.22 + resolution: "@firebase/installations-compat@npm:0.2.22" + dependencies: + "@firebase/component": "npm:0.7.3" + "@firebase/installations": "npm:0.6.22" + "@firebase/installations-types": "npm:0.5.4" + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app-compat": 0.x + checksum: 10c0/0ba91d39f68507bdfa1f5cc494bbefc2af7acb885ba226e2ff0005e63233b623242bfef083cb6123a839a4dce28f0a54745932c06d821d04ad0dcdbb6a11b7cc + languageName: node + linkType: hard + +"@firebase/installations-types@npm:0.5.4": + version: 0.5.4 + resolution: "@firebase/installations-types@npm:0.5.4" + peerDependencies: + "@firebase/app-types": 0.x + checksum: 10c0/56148089894be055fa3b98b666bc2e75c6f6c679f79a6fc9b1d65e6f58e2d545df283149c990ae56910e39487a5cd65b4d753dd3b4eeea30b61e1691e7c5f134 + languageName: node + linkType: hard + +"@firebase/installations@npm:0.6.22": + version: 0.6.22 + resolution: "@firebase/installations@npm:0.6.22" + dependencies: + "@firebase/component": "npm:0.7.3" + "@firebase/util": "npm:1.15.1" + idb: "npm:7.1.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app": 0.x + checksum: 10c0/c8c0f5135b81254f85d68cee80561abad916238220802a5c5734dbd76e52742b91a61767aa1a14e0363e5aa6fd21c67aad47a7117f9c99a2902ef01af8c86739 + languageName: node + linkType: hard + +"@firebase/logger@npm:0.5.1": + version: 0.5.1 + resolution: "@firebase/logger@npm:0.5.1" + dependencies: + tslib: "npm:^2.1.0" + checksum: 10c0/ce8644943452e2e1cc00fe4eab2d63c8a0ba6767beb0e57d2ea11f609b5ffa6956c2ec8d6a01efae07a4932b70180c8a07540c53e1ddd876b2baa5858185c247 + languageName: node + linkType: hard + +"@firebase/messaging-compat@npm:0.2.27": + version: 0.2.27 + resolution: "@firebase/messaging-compat@npm:0.2.27" + dependencies: + "@firebase/component": "npm:0.7.3" + "@firebase/messaging": "npm:0.13.0" + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app-compat": 0.x + checksum: 10c0/f2831bdce11e51d041766823312425a75d94a71c9b5d9787412f4b45678c6600c32d571763ea3699d7e28a8b422a6376d37c83d21875d602a2ba90c789609cbb + languageName: node + linkType: hard + +"@firebase/messaging-interop-types@npm:0.2.5": + version: 0.2.5 + resolution: "@firebase/messaging-interop-types@npm:0.2.5" + checksum: 10c0/edffb0e4e5b630ee05f65ab3bbcf71657f05f67da645ec4c1f2d3e7a4abf5d541ef38348599ae5fb584ae9b341a74abab9a162be01695f4181e02b234c549159 + languageName: node + linkType: hard + +"@firebase/messaging@npm:0.13.0": + version: 0.13.0 + resolution: "@firebase/messaging@npm:0.13.0" + dependencies: + "@firebase/component": "npm:0.7.3" + "@firebase/installations": "npm:0.6.22" + "@firebase/messaging-interop-types": "npm:0.2.5" + "@firebase/util": "npm:1.15.1" + idb: "npm:7.1.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app": 0.x + checksum: 10c0/e194de2655aedf458cba5b5e3884635da8519f196f2dd3bc04224966c4503448f6937209eea7a93a16685c7d37c04ee3a71793e4463ef6ae7db64e635b67ba56 + languageName: node + linkType: hard + +"@firebase/performance-compat@npm:0.2.25": + version: 0.2.25 + resolution: "@firebase/performance-compat@npm:0.2.25" + dependencies: + "@firebase/component": "npm:0.7.3" + "@firebase/logger": "npm:0.5.1" + "@firebase/performance": "npm:0.7.12" + "@firebase/performance-types": "npm:0.2.4" + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app-compat": 0.x + checksum: 10c0/2fce37ed67f8921eadff7efaedefd892281cf1ccd6277413f23598335e95d6a0e93d5b2b673c93fada18f0c244669abd6a066f8249782a394931a8777c8df998 + languageName: node + linkType: hard + +"@firebase/performance-types@npm:0.2.4": + version: 0.2.4 + resolution: "@firebase/performance-types@npm:0.2.4" + checksum: 10c0/5a823641e637d2b51cda6865804a5f05dba1d0f14b8664f396b5a0c029f5bb74c421240d3bd3fadf307dd9b71571ffcb32d04f5058c65eadbde1bfe4b85ab6c8 + languageName: node + linkType: hard + +"@firebase/performance@npm:0.7.12": + version: 0.7.12 + resolution: "@firebase/performance@npm:0.7.12" + dependencies: + "@firebase/component": "npm:0.7.3" + "@firebase/installations": "npm:0.6.22" + "@firebase/logger": "npm:0.5.1" + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + web-vitals: "npm:^4.2.4" + peerDependencies: + "@firebase/app": 0.x + checksum: 10c0/58211e8bd59b1d4c40c2ebb66504ea0745301308a8c3911da29014176bedf3953521f8dc4d9f0d320d955934a1bef18b17bf4a5dca0546dba702e05e18ed28f9 + languageName: node + linkType: hard + +"@firebase/remote-config-compat@npm:0.2.25": + version: 0.2.25 + resolution: "@firebase/remote-config-compat@npm:0.2.25" + dependencies: + "@firebase/component": "npm:0.7.3" + "@firebase/logger": "npm:0.5.1" + "@firebase/remote-config": "npm:0.8.4" + "@firebase/remote-config-types": "npm:0.5.1" + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app-compat": 0.x + checksum: 10c0/7643a2d084c8827158ab2c98b3306515b6e1837b1a11d2e2649e78454c894e2df0461a34213aa1db75587738ffa135e610504484ed18f68ae2fde823ffa5355f + languageName: node + linkType: hard + +"@firebase/remote-config-types@npm:0.5.1": + version: 0.5.1 + resolution: "@firebase/remote-config-types@npm:0.5.1" + checksum: 10c0/0882c2d9015bcb55a6e460ec3e2807c060984c1a394bf430ba6fa5ef25db53e6baf1d569539ed662e04b431b7e6122ca817437521ecf8be60c31a79a18845b0e + languageName: node + linkType: hard + +"@firebase/remote-config@npm:0.8.4": + version: 0.8.4 + resolution: "@firebase/remote-config@npm:0.8.4" + dependencies: + "@firebase/component": "npm:0.7.3" + "@firebase/installations": "npm:0.6.22" + "@firebase/logger": "npm:0.5.1" + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app": 0.x + checksum: 10c0/5c3a8eeb7a71946b1bbd3f53e00cce205b796aa1745ad5afb4a42d05d499f302ad2be216c33b521c654855d56447b9cd22995313463cea6b56ebc0b502336b98 + languageName: node + linkType: hard + +"@firebase/storage-compat@npm:0.4.3": + version: 0.4.3 + resolution: "@firebase/storage-compat@npm:0.4.3" + dependencies: + "@firebase/component": "npm:0.7.3" + "@firebase/storage": "npm:0.14.3" + "@firebase/storage-types": "npm:0.8.4" + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app-compat": 0.x + checksum: 10c0/4aa392d291dc0864fd286261bac6b00f5c90b9a16a366026db8631f51c7583807e28a00a040dd2d4f1fa897bb60f93a93da61eb16804e7a4075dd19e485e6239 + languageName: node + linkType: hard + +"@firebase/storage-types@npm:0.8.4": + version: 0.8.4 + resolution: "@firebase/storage-types@npm:0.8.4" + peerDependencies: + "@firebase/app-types": 0.x + "@firebase/util": 1.x + checksum: 10c0/66ec5b6c6a703c4eb0fb99761d741148d9ae2b5d06c4d5d6efcfbea368fb80480fb037378e3e5ec2aa8adcfe97bb64016eb263220f7d1a91439e46f23254d5b6 + languageName: node + linkType: hard + +"@firebase/storage@npm:0.14.3": + version: 0.14.3 + resolution: "@firebase/storage@npm:0.14.3" + dependencies: + "@firebase/component": "npm:0.7.3" + "@firebase/util": "npm:1.15.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app": 0.x + checksum: 10c0/6ec4d412cd658fd37759d2ad92e57edd5481e63373a38c0b2c5febb7a617e16b6646f94862168282e9aacec72d291af0f48181cb09f806ff66f82d31842b3bf8 + languageName: node + linkType: hard + +"@firebase/util@npm:1.15.1": + version: 1.15.1 + resolution: "@firebase/util@npm:1.15.1" + dependencies: + tslib: "npm:^2.1.0" + checksum: 10c0/7fdb0dd80c98181969375d7a2ee9309783061a77e63c0ddc4935915ca97917cb1bc560bcfd21b9b4171630cae8579f6f21241ae260e4b18789e14adbdd329eea + languageName: node + linkType: hard + +"@firebase/webchannel-wrapper@npm:1.0.6": + version: 1.0.6 + resolution: "@firebase/webchannel-wrapper@npm:1.0.6" + checksum: 10c0/2597e8a9482b47266a8ac2f6dea80062391c90170ad602c315154e1cddeb5eb6b8e609055f26cf31d4a231baa6cd94b628c9d5d26e5b0e44d645833d5b763a5f + languageName: node + linkType: hard + +"@gar/promise-retry@npm:^1.0.0, @gar/promise-retry@npm:^1.0.2": + version: 1.0.3 + resolution: "@gar/promise-retry@npm:1.0.3" + checksum: 10c0/885b02c8b0d75b2d215da25f3b639158c4fbe8fefe0d79163304534b9a6d0710db4b7699f7cd3cc1a730792bff04cbe19f4850a62d3e105a663eaeec88f38332 + languageName: node + linkType: hard + +"@google-cloud/firestore@npm:^8.6.0": + version: 8.6.0 + resolution: "@google-cloud/firestore@npm:8.6.0" + dependencies: + "@opentelemetry/api": "npm:^1.9.0" + fast-deep-equal: "npm:^3.1.3" + functional-red-black-tree: "npm:^1.0.1" + google-gax: "npm:^5.0.1" + protobufjs: "npm:^7.5.3" + checksum: 10c0/0d66b3c4469ff919504925054f6169d4761968b9f932aa373c0dbee642390db9dcc4060b1586494ea6f681c150b5db2198d4eeddf88ea1f34afb51c2f5f1f38b + languageName: node + linkType: hard + +"@google-cloud/paginator@npm:^5.0.0": + version: 5.0.2 + resolution: "@google-cloud/paginator@npm:5.0.2" + dependencies: + arrify: "npm:^2.0.0" + extend: "npm:^3.0.2" + checksum: 10c0/aac4ed986c2b274ac9fdca3f68d5ba6ee95f4c35370b11db25c288bf485352e2ec5df16bf9c3cff554a2e73a07e62f10044d273788df61897b81fe47bb18106d + languageName: node + linkType: hard + +"@google-cloud/projectify@npm:^4.0.0": + version: 4.0.0 + resolution: "@google-cloud/projectify@npm:4.0.0" + checksum: 10c0/0d0a6ceca76a138973fcb3ad577f209acdbd9d9aed1c645b09f98d5e5a258053dbbe6c1f13e6f85310cc0d9308f5f3a84f8fa4f1a132549a68d86174fb21067f + languageName: node + linkType: hard + +"@google-cloud/promisify@npm:<4.1.0": + version: 4.0.0 + resolution: "@google-cloud/promisify@npm:4.0.0" + checksum: 10c0/4332cbd923d7c6943ecdf46f187f1417c84bb9c801525cd74d719c766bfaad650f7964fb74576345f6537b6d6273a4f2992c8d79ebec6c8b8401b23d626b8dd3 + languageName: node + linkType: hard + +"@google-cloud/storage@npm:^7.19.0": + version: 7.21.0 + resolution: "@google-cloud/storage@npm:7.21.0" + dependencies: + "@google-cloud/paginator": "npm:^5.0.0" + "@google-cloud/projectify": "npm:^4.0.0" + "@google-cloud/promisify": "npm:<4.1.0" + abort-controller: "npm:^3.0.0" + async-retry: "npm:^1.3.3" + duplexify: "npm:^4.1.3" + fast-xml-parser: "npm:^5.3.4" + gaxios: "npm:^6.0.2" + google-auth-library: "npm:^9.6.3" + html-entities: "npm:^2.5.2" + mime: "npm:^3.0.0" + p-limit: "npm:^3.0.1" + retry-request: "npm:^7.0.0" + teeny-request: "npm:^9.0.0" + checksum: 10c0/07cffff2467575a56594ceb6534253d1dd653de2f093fb5c4e5efa52586351afdcecca3d95ea9617a243b3cbf2cae0cfc7f5448473fad8ba8f7425a291c76cb2 + languageName: node + linkType: hard + +"@google/genai@npm:^2.8.0": + version: 2.8.0 + resolution: "@google/genai@npm:2.8.0" + dependencies: + google-auth-library: "npm:^10.3.0" + p-retry: "npm:^4.6.2" + protobufjs: "npm:^7.5.4" + ws: "npm:^8.18.0" + peerDependencies: + "@modelcontextprotocol/sdk": ^1.25.2 + peerDependenciesMeta: + "@modelcontextprotocol/sdk": + optional: true + checksum: 10c0/d9c47de5799d91e81dde0c3c2a91b1eaed6ecbc797028185aefdd58ae95a36711d94a2701f1cdeb4e6e337f61d79383336d221aa837ce7cce5e598cb5fe96734 + languageName: node + linkType: hard + +"@grpc/grpc-js@npm:^1.12.6": + version: 1.14.4 + resolution: "@grpc/grpc-js@npm:1.14.4" + dependencies: + "@grpc/proto-loader": "npm:^0.8.0" + "@js-sdsl/ordered-map": "npm:^4.4.2" + checksum: 10c0/0ff6395e8112ad30e8f99dbb684b997ebc3264e770b8e354f23effeedf181a380e0ecef8bca466cbbf3e9141968656144851de1da50f840a1efd9314c9812449 + languageName: node + linkType: hard + +"@grpc/grpc-js@npm:~1.9.0": + version: 1.9.16 + resolution: "@grpc/grpc-js@npm:1.9.16" + dependencies: + "@grpc/proto-loader": "npm:^0.7.8" + "@types/node": "npm:>=12.12.47" + checksum: 10c0/dfe2b1a670d650489fe82bb7afc1c0336313b0cde4a102623a1331267cbdeb1bde9409143fb1432db074bc1845b38d96b82a4277bdd99929aa8322cf97d305aa + languageName: node + linkType: hard + +"@grpc/proto-loader@npm:^0.7.8": + version: 0.7.15 + resolution: "@grpc/proto-loader@npm:0.7.15" + dependencies: + lodash.camelcase: "npm:^4.3.0" + long: "npm:^5.0.0" + protobufjs: "npm:^7.2.5" + yargs: "npm:^17.7.2" + bin: + proto-loader-gen-types: build/bin/proto-loader-gen-types.js + checksum: 10c0/514a134a724b56d73d0a202b7e02c84479da21e364547bacb2f4995ebc0d52412a1a21653add9f004ebd146c1e6eb4bcb0b8846fdfe1bfa8a98ed8f3d203da4a + languageName: node + linkType: hard + +"@grpc/proto-loader@npm:^0.8.0": + version: 0.8.1 + resolution: "@grpc/proto-loader@npm:0.8.1" + dependencies: + lodash.camelcase: "npm:^4.3.0" + long: "npm:^5.0.0" + protobufjs: "npm:^7.5.5" + yargs: "npm:^17.7.2" + bin: + proto-loader-gen-types: build/bin/proto-loader-gen-types.js + checksum: 10c0/900814c2cbedd76ce5de083adc0696f746a652a79eeb09e8d04d53b864179e2c9aa127997b9bba8ef5f0ce0c11ee700a0e467732eb6cb1f3efdb952583533ccf + languageName: node + linkType: hard + +"@harperfast/extended-iterable@npm:^1.0.3": + version: 1.0.3 + resolution: "@harperfast/extended-iterable@npm:1.0.3" + checksum: 10c0/13146fb69f0beaad4cf426ee00b57306bfdef2c2c38ed8cce12b432bf267ce6190e926efc3637db80ff01948cbcc7dcfcbdd3526e53eb5de2623856f8381b515 + languageName: node + linkType: hard + +"@hono/node-server@npm:^1.19.9": + version: 1.19.14 + resolution: "@hono/node-server@npm:1.19.14" + peerDependencies: + hono: ^4 + checksum: 10c0/41a099bb3705d96aac44b7a8db8805f2a22ce8a0f767a27b6d10b74a9964925df01c5f35d3631e882f8bcdeee3518884c30f40588ac8c960d88bf71048ba0df3 + languageName: node + linkType: hard + +"@humanfs/core@npm:^0.19.2": + version: 0.19.2 + resolution: "@humanfs/core@npm:0.19.2" + dependencies: + "@humanfs/types": "npm:^0.15.0" + checksum: 10c0/d0a1d52d7b30c27d49475a53072d1510b81c5803e44b342fb8faf3887f1aa27593a1e6dc76a45268e7892d3f4e198146659281f6b6d55eacf3fd5a38bac30c5c + languageName: node + linkType: hard + +"@humanfs/node@npm:^0.16.6": + version: 0.16.8 + resolution: "@humanfs/node@npm:0.16.8" + dependencies: + "@humanfs/core": "npm:^0.19.2" + "@humanfs/types": "npm:^0.15.0" + "@humanwhocodes/retry": "npm:^0.4.0" + checksum: 10c0/56140579db811af4e160b195d45d0f29acf644d192c93fe24c9e594ebf06f19dfc157494a07c84540b8a071c0e4b37209c2362765d31734f4d0be869c2422e25 + languageName: node + linkType: hard + +"@humanfs/types@npm:^0.15.0": + version: 0.15.0 + resolution: "@humanfs/types@npm:0.15.0" + checksum: 10c0/fc26b9a024b0e55f7eaf64036df94345bf5d36d6a41ef80ef38e78f1f7430ce26cf435af736adae58913baae18eac3f38c18739054a3d379102015978eae862e + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 + languageName: node + linkType: hard + +"@humanwhocodes/retry@npm:^0.4.0, @humanwhocodes/retry@npm:^0.4.2": + version: 0.4.3 + resolution: "@humanwhocodes/retry@npm:0.4.3" + checksum: 10c0/3775bb30087d4440b3f7406d5a057777d90e4b9f435af488a4923ef249e93615fb78565a85f173a186a076c7706a81d0d57d563a2624e4de2c5c9c66c486ce42 + languageName: node + linkType: hard + +"@inquirer/ansi@npm:^1.0.2": + version: 1.0.2 + resolution: "@inquirer/ansi@npm:1.0.2" + checksum: 10c0/8e408cc628923aa93402e66657482ccaa2ad5174f9db526d9a8b443f9011e9cd8f70f0f534f5fe3857b8a9df3bce1e25f66c96f666d6750490bd46e2b4f3b829 + languageName: node + linkType: hard + +"@inquirer/checkbox@npm:^4.3.2": + version: 4.3.2 + resolution: "@inquirer/checkbox@npm:4.3.2" + dependencies: + "@inquirer/ansi": "npm:^1.0.2" + "@inquirer/core": "npm:^10.3.2" + "@inquirer/figures": "npm:^1.0.15" + "@inquirer/type": "npm:^3.0.10" + yoctocolors-cjs: "npm:^2.1.3" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/771d23bc6b16cd5c21a4f1073e98e306147f90c0e2487fe887ee054b8bf86449f1f9e6e6f9c218c1aa45ae3be2533197d53654abe9c0545981aebb0920d5f471 + languageName: node + linkType: hard + +"@inquirer/confirm@npm:5.1.21, @inquirer/confirm@npm:^5.1.21": + version: 5.1.21 + resolution: "@inquirer/confirm@npm:5.1.21" + dependencies: + "@inquirer/core": "npm:^10.3.2" + "@inquirer/type": "npm:^3.0.10" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/a95bbdbb17626c484735a4193ed6b6a6fbb078cf62116ec8e1667f647e534dd6618e688ecc7962585efcc56881b544b8c53db3914599bbf2ab842e7f224b0fca + languageName: node + linkType: hard + +"@inquirer/core@npm:^10.3.2": + version: 10.3.2 + resolution: "@inquirer/core@npm:10.3.2" + dependencies: + "@inquirer/ansi": "npm:^1.0.2" + "@inquirer/figures": "npm:^1.0.15" + "@inquirer/type": "npm:^3.0.10" + cli-width: "npm:^4.1.0" + mute-stream: "npm:^2.0.0" + signal-exit: "npm:^4.1.0" + wrap-ansi: "npm:^6.2.0" + yoctocolors-cjs: "npm:^2.1.3" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/f0f27e07fe288e01e3949b4ad216c19751f025ce77c610366e08d8b0f7a135d064dc074732031d251584b454c576f1e5c849e4abe259186dd5d4974c8f85c13e + languageName: node + linkType: hard + +"@inquirer/editor@npm:^4.2.23": + version: 4.2.23 + resolution: "@inquirer/editor@npm:4.2.23" + dependencies: + "@inquirer/core": "npm:^10.3.2" + "@inquirer/external-editor": "npm:^1.0.3" + "@inquirer/type": "npm:^3.0.10" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/aa02028ee35ae039a4857b6a9490d295a1b3558f042e7454dee0aa36fbc83ac25586a2dfe0b46a5ea7ea151e3f5cb97a8ee6229131b4619f3b3466ad74b9519f + languageName: node + linkType: hard + +"@inquirer/expand@npm:^4.0.23": + version: 4.0.23 + resolution: "@inquirer/expand@npm:4.0.23" + dependencies: + "@inquirer/core": "npm:^10.3.2" + "@inquirer/type": "npm:^3.0.10" + yoctocolors-cjs: "npm:^2.1.3" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/294c92652760c3d1a46c4b900a99fd553ea9e5734ba261d4e71d7b8499d86a8b15e38a2467ddb7c95c197daf7e472bdab209fc3f7c38cbc70842cd291f4ce39d + languageName: node + linkType: hard + +"@inquirer/external-editor@npm:^1.0.3": + version: 1.0.3 + resolution: "@inquirer/external-editor@npm:1.0.3" + dependencies: + chardet: "npm:^2.1.1" + iconv-lite: "npm:^0.7.0" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/82951cb7f3762dd78cca2ea291396841e3f4adfe26004b5badfed1cec4b6a04bb567dff94d0e41b35c61bdd7957317c64c22f58074d14b238d44e44d9e420019 + languageName: node + linkType: hard + +"@inquirer/figures@npm:^1.0.15": + version: 1.0.15 + resolution: "@inquirer/figures@npm:1.0.15" + checksum: 10c0/6e39a040d260ae234ae220180b7994ff852673e20be925f8aa95e78c7934d732b018cbb4d0ec39e600a410461bcb93dca771e7de23caa10630d255692e440f69 + languageName: node + linkType: hard + +"@inquirer/input@npm:^4.3.1": + version: 4.3.1 + resolution: "@inquirer/input@npm:4.3.1" + dependencies: + "@inquirer/core": "npm:^10.3.2" + "@inquirer/type": "npm:^3.0.10" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/9e81d6ae56e5b59f96475ae1327e7e7beeef0d917b83762e0c2ed5a75239ad6b1a39fc05553ce45fe6f6de49681dade8704b5f1c11c2f555663a74d0ac998af3 + languageName: node + linkType: hard + +"@inquirer/number@npm:^3.0.23": + version: 3.0.23 + resolution: "@inquirer/number@npm:3.0.23" + dependencies: + "@inquirer/core": "npm:^10.3.2" + "@inquirer/type": "npm:^3.0.10" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/3944a524be2a2e0834822a0e483f2e2fd56ad597b5feeca2155b956821f88e22e07ce3816f66113b040601636ed7146865aee7d7afb2a06939acc77491330ccc + languageName: node + linkType: hard + +"@inquirer/password@npm:^4.0.23": + version: 4.0.23 + resolution: "@inquirer/password@npm:4.0.23" + dependencies: + "@inquirer/ansi": "npm:^1.0.2" + "@inquirer/core": "npm:^10.3.2" + "@inquirer/type": "npm:^3.0.10" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/9fd3d0462d02735bb1521c4e221d057a94d9aaac308e9a192e59d6c1e8efc707c2376ab627151d589bc3633f6b14b74b60b91c3d473a32adfd100ef1f6cfdef7 + languageName: node + linkType: hard + +"@inquirer/prompts@npm:7.10.1": + version: 7.10.1 + resolution: "@inquirer/prompts@npm:7.10.1" + dependencies: + "@inquirer/checkbox": "npm:^4.3.2" + "@inquirer/confirm": "npm:^5.1.21" + "@inquirer/editor": "npm:^4.2.23" + "@inquirer/expand": "npm:^4.0.23" + "@inquirer/input": "npm:^4.3.1" + "@inquirer/number": "npm:^3.0.23" + "@inquirer/password": "npm:^4.0.23" + "@inquirer/rawlist": "npm:^4.1.11" + "@inquirer/search": "npm:^3.2.2" + "@inquirer/select": "npm:^4.4.2" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/eac309cc75712bc94fc8b6761d6a736786ca1942cf9c90805b2a6049a05ce6131bcfb3aa703d1dbe66874d1b78c2b446044ad9735a2bb76743b8ddcb3dcb4d2a + languageName: node + linkType: hard + +"@inquirer/rawlist@npm:^4.1.11": + version: 4.1.11 + resolution: "@inquirer/rawlist@npm:4.1.11" + dependencies: + "@inquirer/core": "npm:^10.3.2" + "@inquirer/type": "npm:^3.0.10" + yoctocolors-cjs: "npm:^2.1.3" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/33792b40cd0fbf77f547c9c4805087dd1188342c6a5ca512c73b0b6c4d132225fc5ae8bc4fd5035309484da3698a90fcef17aad100b9ae57624fda7b07d92227 + languageName: node + linkType: hard + +"@inquirer/search@npm:^3.2.2": + version: 3.2.2 + resolution: "@inquirer/search@npm:3.2.2" + dependencies: + "@inquirer/core": "npm:^10.3.2" + "@inquirer/figures": "npm:^1.0.15" + "@inquirer/type": "npm:^3.0.10" + yoctocolors-cjs: "npm:^2.1.3" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/e7849663a51fe95e3ce99d274c815b8dc8933d6a5ddcaaf6130bf43f5f10316062c9f7a37c2923a14b8dcd09d202b0bb9cc3eaf0adb0336f6a704ea52e03ef8c + languageName: node + linkType: hard + +"@inquirer/select@npm:^4.4.2": + version: 4.4.2 + resolution: "@inquirer/select@npm:4.4.2" + dependencies: + "@inquirer/ansi": "npm:^1.0.2" + "@inquirer/core": "npm:^10.3.2" + "@inquirer/figures": "npm:^1.0.15" + "@inquirer/type": "npm:^3.0.10" + yoctocolors-cjs: "npm:^2.1.3" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/6978a5a92928b4d439dd6b688f2db51fd49be209f24be224bb81ed8f75b76e0715e79bdb05dab2a33bbdc7091c779a99f8603fe0ca199f059528ca2b1d0d4944 + languageName: node + linkType: hard + +"@inquirer/type@npm:^3.0.10, @inquirer/type@npm:^3.0.8": + version: 3.0.10 + resolution: "@inquirer/type@npm:3.0.10" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/a846c7a570e3bf2657d489bcc5dcdc3179d24c7323719de1951dcdb722400ac76e5b2bfe9765d0a789bc1921fac810983d7999f021f30a78a6a174c23fc78dc9 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 + languageName: node + linkType: hard + +"@istanbuljs/schema@npm:^0.1.3": + version: 0.1.6 + resolution: "@istanbuljs/schema@npm:0.1.6" + checksum: 10c0/bb0d370bf3dd454d2f37f1bccb8921e2da99adacef2da56ef47850e25d7a4de69cf639ead8c189755aef38921369024b4afea3535a5c2ac9082b3e1171bcbc3a + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.12, @jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.13 + resolution: "@jridgewell/gen-mapping@npm:0.3.13" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/9a7d65fb13bd9aec1fbab74cda08496839b7e2ceb31f5ab922b323e94d7c481ce0fc4fd7e12e2610915ed8af51178bdc61e168e92a8c8b8303b030b03489b13b + languageName: node + linkType: hard + +"@jridgewell/remapping@npm:^2.3.5": + version: 2.3.5 + resolution: "@jridgewell/remapping@npm:2.3.5" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/3de494219ffeb2c5c38711d0d7bb128097edf91893090a2dbc8ee0b55d092bb7347b1fd0f478486c5eab010e855c73927b1666f2107516d472d24a73017d1194 + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0, @jridgewell/sourcemap-codec@npm:^1.5.5": + version: 1.5.5 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" + checksum: 10c0/f9e538f302b63c0ebc06eecb1dd9918dd4289ed36147a0ddce35d6ea4d7ebbda243cda7b2213b6a5e1d8087a298d5cf630fb2bd39329cdecb82017023f6081a0 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.28": + version: 0.3.31 + resolution: "@jridgewell/trace-mapping@npm:0.3.31" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/4b30ec8cd56c5fd9a661f088230af01e0c1a3888d11ffb6b47639700f71225be21d1f7e168048d6d4f9449207b978a235c07c8f15c07705685d16dc06280e9d9 + languageName: node + linkType: hard + +"@js-sdsl/ordered-map@npm:^4.4.2": + version: 4.4.2 + resolution: "@js-sdsl/ordered-map@npm:4.4.2" + checksum: 10c0/cc7e15dc4acf6d9ef663757279600bab70533d847dcc1ab01332e9e680bd30b77cdf9ad885cc774276f51d98b05a013571c940e5b360985af5eb798dc1a2ee2b + languageName: node + linkType: hard + +"@kurkle/color@npm:^0.3.0": + version: 0.3.4 + resolution: "@kurkle/color@npm:0.3.4" + checksum: 10c0/0e9fd55c614b005c5f0c4c755bca19ec0293bc7513b4ea3ec1725234f9c2fa81afbc78156baf555c8b9cb0d305619253c3f5bca016067daeebb3d00ebb4ea683 + languageName: node + linkType: hard + +"@listr2/prompt-adapter-inquirer@npm:3.0.5": + version: 3.0.5 + resolution: "@listr2/prompt-adapter-inquirer@npm:3.0.5" + dependencies: + "@inquirer/type": "npm:^3.0.8" + peerDependencies: + "@inquirer/prompts": ">= 3 < 8" + listr2: 9.0.5 + checksum: 10c0/c85a0eee6c610163be200c3cc9e51847ee95a595685835eb5fa3267f0c1107905aae50b9123d970797851f3acb456ad1fcf68c86022b56d5b3f42b757cec27b7 + languageName: node + linkType: hard + +"@lit-labs/signals@npm:^0.1.3": + version: 0.1.3 + resolution: "@lit-labs/signals@npm:0.1.3" + dependencies: + lit: "npm:^2.0.0 || ^3.0.0" + signal-polyfill: "npm:^0.2.0" + checksum: 10c0/299f35e522c183eba010697aad0cca061a725de13ef89990083b27a678965936abf70687f6af8a40617e0471b028c283e71f66c63f2d7b82fb9fe9e5b8b91733 + languageName: node + linkType: hard + +"@lit-labs/signals@npm:^0.3.0": + version: 0.3.0 + resolution: "@lit-labs/signals@npm:0.3.0" + dependencies: + lit: "npm:^2.0.0 || ^3.0.0" + signal-polyfill: "npm:^0.2.2" + checksum: 10c0/8b42262679ae64447b820dad46c3697afa8e82c19f0c67d24744d428b56a4b2244c19aa310ae3835da41cf466262afc3648d79c3549bc02b031963267bd3ac70 + languageName: node + linkType: hard + +"@lit-labs/ssr-dom-shim@npm:^1.5.0": + version: 1.6.0 + resolution: "@lit-labs/ssr-dom-shim@npm:1.6.0" + checksum: 10c0/deffcfd765d268820beef600a1c1cf9d3cf1a5cb4bbe7e80843796ff33d1a122f4e5651ef4a44b33d36e5fa6538e6ee87a95b9d40b4a26cabf3c35b45194c87a + languageName: node + linkType: hard + +"@lit/context@npm:^1.1.4, @lit/context@npm:^1.1.6": + version: 1.1.6 + resolution: "@lit/context@npm:1.1.6" + dependencies: + "@lit/reactive-element": "npm:^1.6.2 || ^2.1.0" + checksum: 10c0/203f761eda19c8b37d77f01d9a0148535c5b28c47b76e28b321cb6e5ed0546c45332512e68b1647ce92ca67690d8c66de31972ec115410b080d69fa25a5d86f3 + languageName: node + linkType: hard + +"@lit/reactive-element@npm:^1.6.2 || ^2.1.0, @lit/reactive-element@npm:^2.1.0": + version: 2.1.2 + resolution: "@lit/reactive-element@npm:2.1.2" + dependencies: + "@lit-labs/ssr-dom-shim": "npm:^1.5.0" + checksum: 10c0/557069ce6ebbbafb1140e1e0a25ce73d3501bf455cda231d42bb131baa9065c54b6b7ca1655507eede397decd7ddde16c84192cb72a07d4edf41d54e07725933 + languageName: node + linkType: hard + +"@lmdb/lmdb-darwin-arm64@npm:3.5.1": + version: 3.5.1 + resolution: "@lmdb/lmdb-darwin-arm64@npm:3.5.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@lmdb/lmdb-darwin-x64@npm:3.5.1": + version: 3.5.1 + resolution: "@lmdb/lmdb-darwin-x64@npm:3.5.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@lmdb/lmdb-linux-arm64@npm:3.5.1": + version: 3.5.1 + resolution: "@lmdb/lmdb-linux-arm64@npm:3.5.1" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@lmdb/lmdb-linux-arm@npm:3.5.1": + version: 3.5.1 + resolution: "@lmdb/lmdb-linux-arm@npm:3.5.1" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@lmdb/lmdb-linux-x64@npm:3.5.1": + version: 3.5.1 + resolution: "@lmdb/lmdb-linux-x64@npm:3.5.1" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@lmdb/lmdb-win32-arm64@npm:3.5.1": + version: 3.5.1 + resolution: "@lmdb/lmdb-win32-arm64@npm:3.5.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@lmdb/lmdb-win32-x64@npm:3.5.1": + version: 3.5.1 + resolution: "@lmdb/lmdb-win32-x64@npm:3.5.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@modelcontextprotocol/ext-apps@npm:^1.7.4": + version: 1.7.4 + resolution: "@modelcontextprotocol/ext-apps@npm:1.7.4" + dependencies: + "@standard-schema/spec": "npm:^1.1.0" + peerDependencies: + "@modelcontextprotocol/sdk": ^1.29.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + zod: ^3.25.0 || ^4.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + checksum: 10c0/0f356ba2d8ec90ea6fae0763977690b52e160b2ff742bf63026b0c0f2e5c2b985c92e1d3a36428cb0cf5060c0487e7427f3539954ca87a655fc43684bdcc8db0 + languageName: node + linkType: hard + +"@modelcontextprotocol/sdk@npm:1.26.0": + version: 1.26.0 + resolution: "@modelcontextprotocol/sdk@npm:1.26.0" + dependencies: + "@hono/node-server": "npm:^1.19.9" + ajv: "npm:^8.17.1" + ajv-formats: "npm:^3.0.1" + content-type: "npm:^1.0.5" + cors: "npm:^2.8.5" + cross-spawn: "npm:^7.0.5" + eventsource: "npm:^3.0.2" + eventsource-parser: "npm:^3.0.0" + express: "npm:^5.2.1" + express-rate-limit: "npm:^8.2.1" + hono: "npm:^4.11.4" + jose: "npm:^6.1.3" + json-schema-typed: "npm:^8.0.2" + pkce-challenge: "npm:^5.0.0" + raw-body: "npm:^3.0.0" + zod: "npm:^3.25 || ^4.0" + zod-to-json-schema: "npm:^3.25.1" + peerDependencies: + "@cfworker/json-schema": ^4.1.1 + zod: ^3.25 || ^4.0 + peerDependenciesMeta: + "@cfworker/json-schema": + optional: true + zod: + optional: false + checksum: 10c0/b4098789d9fbbc4d9e0df240b18ba28867e4990ca4305322d6724fd03bba6685bbf21b39e02578b959da620b5a704ab1d565d3dbf377778ee9e4a0677b790728 + languageName: node + linkType: hard + +"@msgpackr-extract/msgpackr-extract-darwin-arm64@npm:3.0.4": + version: 3.0.4 + resolution: "@msgpackr-extract/msgpackr-extract-darwin-arm64@npm:3.0.4" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@msgpackr-extract/msgpackr-extract-darwin-x64@npm:3.0.4": + version: 3.0.4 + resolution: "@msgpackr-extract/msgpackr-extract-darwin-x64@npm:3.0.4" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@msgpackr-extract/msgpackr-extract-linux-arm64@npm:3.0.4": + version: 3.0.4 + resolution: "@msgpackr-extract/msgpackr-extract-linux-arm64@npm:3.0.4" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@msgpackr-extract/msgpackr-extract-linux-arm@npm:3.0.4": + version: 3.0.4 + resolution: "@msgpackr-extract/msgpackr-extract-linux-arm@npm:3.0.4" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@msgpackr-extract/msgpackr-extract-linux-x64@npm:3.0.4": + version: 3.0.4 + resolution: "@msgpackr-extract/msgpackr-extract-linux-x64@npm:3.0.4" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@msgpackr-extract/msgpackr-extract-win32-x64@npm:3.0.4": + version: 3.0.4 + resolution: "@msgpackr-extract/msgpackr-extract-win32-x64@npm:3.0.4" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@napi-rs/nice-android-arm-eabi@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-android-arm-eabi@npm:1.1.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@napi-rs/nice-android-arm64@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-android-arm64@npm:1.1.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@napi-rs/nice-darwin-arm64@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-darwin-arm64@npm:1.1.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@napi-rs/nice-darwin-x64@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-darwin-x64@npm:1.1.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@napi-rs/nice-freebsd-x64@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-freebsd-x64@npm:1.1.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@napi-rs/nice-linux-arm-gnueabihf@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-linux-arm-gnueabihf@npm:1.1.1" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@napi-rs/nice-linux-arm64-gnu@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-linux-arm64-gnu@npm:1.1.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@napi-rs/nice-linux-arm64-musl@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-linux-arm64-musl@npm:1.1.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@napi-rs/nice-linux-ppc64-gnu@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-linux-ppc64-gnu@npm:1.1.1" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@napi-rs/nice-linux-riscv64-gnu@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-linux-riscv64-gnu@npm:1.1.1" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@napi-rs/nice-linux-s390x-gnu@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-linux-s390x-gnu@npm:1.1.1" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@napi-rs/nice-linux-x64-gnu@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-linux-x64-gnu@npm:1.1.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@napi-rs/nice-linux-x64-musl@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-linux-x64-musl@npm:1.1.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@napi-rs/nice-openharmony-arm64@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-openharmony-arm64@npm:1.1.1" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@napi-rs/nice-win32-arm64-msvc@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-win32-arm64-msvc@npm:1.1.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@napi-rs/nice-win32-ia32-msvc@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-win32-ia32-msvc@npm:1.1.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@napi-rs/nice-win32-x64-msvc@npm:1.1.1": + version: 1.1.1 + resolution: "@napi-rs/nice-win32-x64-msvc@npm:1.1.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@napi-rs/nice@npm:^1.0.4": + version: 1.1.1 + resolution: "@napi-rs/nice@npm:1.1.1" + dependencies: + "@napi-rs/nice-android-arm-eabi": "npm:1.1.1" + "@napi-rs/nice-android-arm64": "npm:1.1.1" + "@napi-rs/nice-darwin-arm64": "npm:1.1.1" + "@napi-rs/nice-darwin-x64": "npm:1.1.1" + "@napi-rs/nice-freebsd-x64": "npm:1.1.1" + "@napi-rs/nice-linux-arm-gnueabihf": "npm:1.1.1" + "@napi-rs/nice-linux-arm64-gnu": "npm:1.1.1" + "@napi-rs/nice-linux-arm64-musl": "npm:1.1.1" + "@napi-rs/nice-linux-ppc64-gnu": "npm:1.1.1" + "@napi-rs/nice-linux-riscv64-gnu": "npm:1.1.1" + "@napi-rs/nice-linux-s390x-gnu": "npm:1.1.1" + "@napi-rs/nice-linux-x64-gnu": "npm:1.1.1" + "@napi-rs/nice-linux-x64-musl": "npm:1.1.1" + "@napi-rs/nice-openharmony-arm64": "npm:1.1.1" + "@napi-rs/nice-win32-arm64-msvc": "npm:1.1.1" + "@napi-rs/nice-win32-ia32-msvc": "npm:1.1.1" + "@napi-rs/nice-win32-x64-msvc": "npm:1.1.1" + dependenciesMeta: + "@napi-rs/nice-android-arm-eabi": + optional: true + "@napi-rs/nice-android-arm64": + optional: true + "@napi-rs/nice-darwin-arm64": + optional: true + "@napi-rs/nice-darwin-x64": + optional: true + "@napi-rs/nice-freebsd-x64": + optional: true + "@napi-rs/nice-linux-arm-gnueabihf": + optional: true + "@napi-rs/nice-linux-arm64-gnu": + optional: true + "@napi-rs/nice-linux-arm64-musl": + optional: true + "@napi-rs/nice-linux-ppc64-gnu": + optional: true + "@napi-rs/nice-linux-riscv64-gnu": + optional: true + "@napi-rs/nice-linux-s390x-gnu": + optional: true + "@napi-rs/nice-linux-x64-gnu": + optional: true + "@napi-rs/nice-linux-x64-musl": + optional: true + "@napi-rs/nice-openharmony-arm64": + optional: true + "@napi-rs/nice-win32-arm64-msvc": + optional: true + "@napi-rs/nice-win32-ia32-msvc": + optional: true + "@napi-rs/nice-win32-x64-msvc": + optional: true + checksum: 10c0/517eacfd5d5de191f1469a6caad9f9e26924b25079550149fc792fb09d15184013a8a81966a666f08c0a93fbb17a458d50ba9e2e9d6a61141c6c515d083733b2 + languageName: node + linkType: hard + +"@napi-rs/wasm-runtime@npm:^1.1.1, @napi-rs/wasm-runtime@npm:^1.1.4": + version: 1.1.5 + resolution: "@napi-rs/wasm-runtime@npm:1.1.5" + dependencies: + "@tybys/wasm-util": "npm:^0.10.2" + peerDependencies: + "@emnapi/core": ^1.7.1 + "@emnapi/runtime": ^1.7.1 + checksum: 10c0/727f2b6ae0e68bbe5d39aeb68aa6f183314e9f03dc50bb55a962849535b2db53ecc3fbf1554d8656a54488a608df5a2634670595cf5874dc4af2ee59f817c65d + languageName: node + linkType: hard + +"@nodable/entities@npm:^2.1.0": + version: 2.2.0 + resolution: "@nodable/entities@npm:2.2.0" + checksum: 10c0/a5ace5b2f747ae5b851f68a1731526c3e10feacde80469415d15a0df0e960251b515e3cd4ea080a3534e0610ac74b0d3252f607ef2f536bcc97e22d324231578 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^4.0.0": + version: 4.0.2 + resolution: "@npmcli/agent@npm:4.0.2" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^11.2.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/7166c50776ff40dc79295a338da8649a131448f9f2b88694c0826b0e692c0f984402ab8486a5d7458cf0cb272f9130fea3d4aa2a13a26cc07bc10f29abd50ec3 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^5.0.0": + version: 5.0.0 + resolution: "@npmcli/fs@npm:5.0.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/26e376d780f60ff16e874a0ac9bc3399186846baae0b6e1352286385ac134d900cc5dafaded77f38d77f86898fc923ae1cee9d7399f0275b1aa24878915d722b + languageName: node + linkType: hard + +"@npmcli/git@npm:^7.0.0": + version: 7.0.2 + resolution: "@npmcli/git@npm:7.0.2" + dependencies: + "@gar/promise-retry": "npm:^1.0.0" + "@npmcli/promise-spawn": "npm:^9.0.0" + ini: "npm:^6.0.0" + lru-cache: "npm:^11.2.1" + npm-pick-manifest: "npm:^11.0.1" + proc-log: "npm:^6.0.0" + semver: "npm:^7.3.5" + which: "npm:^6.0.0" + checksum: 10c0/1936471c3188aa470d0c0dd4d49724bf144e381d122252d001475d69a96cd9de950936f55fec8c6a673a47cf607b11a662fc8b8a45c67d5c37c795b07d2be8e9 + languageName: node + linkType: hard + +"@npmcli/installed-package-contents@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/installed-package-contents@npm:4.0.0" + dependencies: + npm-bundled: "npm:^5.0.0" + npm-normalize-package-bin: "npm:^5.0.0" + bin: + installed-package-contents: bin/index.js + checksum: 10c0/297f32afc350e92c85981c1c793358af19e63c64d090f4e09997393fa2471f92da52317cb551356dc13594f2bdfad32d02c78bc2c664e2b7e0109d0d8713b39e + languageName: node + linkType: hard + +"@npmcli/node-gyp@npm:^5.0.0": + version: 5.0.0 + resolution: "@npmcli/node-gyp@npm:5.0.0" + checksum: 10c0/dc78219a848a30d26d46cd174816bdf21936aaee15469888cbd04433981ef866b35611275a1f94a31d68ea60cc18747d0d02430e4ce59f8a5c2423ec35b1bbed + languageName: node + linkType: hard + +"@npmcli/package-json@npm:^7.0.0": + version: 7.0.5 + resolution: "@npmcli/package-json@npm:7.0.5" + dependencies: + "@npmcli/git": "npm:^7.0.0" + glob: "npm:^13.0.0" + hosted-git-info: "npm:^9.0.0" + json-parse-even-better-errors: "npm:^5.0.0" + proc-log: "npm:^6.0.0" + semver: "npm:^7.5.3" + spdx-expression-parse: "npm:^4.0.0" + checksum: 10c0/4a04af494cd7273d4a5e930f53f30217dad389c7eaeb4de667aca84be27e668ebd8b16a6923ce58dc3090030f9126885b4cfc790517050acf179d0d9e0ca6de1 + languageName: node + linkType: hard + +"@npmcli/promise-spawn@npm:^9.0.0": + version: 9.0.1 + resolution: "@npmcli/promise-spawn@npm:9.0.1" + dependencies: + which: "npm:^6.0.0" + checksum: 10c0/361872192934bda684f590f140a2edd68add90d5936ca9a2e8792435447847adb59e249d5976950e20bbf213898c04da1b51b62fbc8f258b2fa8601af37fa0e2 + languageName: node + linkType: hard + +"@npmcli/redact@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/redact@npm:4.0.0" + checksum: 10c0/a1e9ba9c70a6b40e175bda2c3dd8cfdaf096e6b7f7a132c855c083c8dfe545c3237cd56702e2e6627a580b1d63373599d49a1192c4078a85bf47bbde824df31c + languageName: node + linkType: hard + +"@npmcli/run-script@npm:^10.0.0": + version: 10.0.4 + resolution: "@npmcli/run-script@npm:10.0.4" + dependencies: + "@npmcli/node-gyp": "npm:^5.0.0" + "@npmcli/package-json": "npm:^7.0.0" + "@npmcli/promise-spawn": "npm:^9.0.0" + node-gyp: "npm:^12.1.0" + proc-log: "npm:^6.0.0" + checksum: 10c0/4d65682491ce7462c6a16a3d20511f70074a0ab384e4e08786ff6c2df9630ad29caa564b5ace49ec3ba5a7f483dfbd13168da903c433a48e59c73189306b1a2f + languageName: node + linkType: hard + +"@opentelemetry/api@npm:^1.9.0": + version: 1.9.1 + resolution: "@opentelemetry/api@npm:1.9.1" + checksum: 10c0/c608485fc8b5a91e1f7e05e843b45b509307456b31cd2ad365933d90813e40ebfedf179f1451c762037e82d7c76aa8500e95d2da3609f640a1206cde5322cd14 + languageName: node + linkType: hard + +"@oxc-project/types@npm:=0.113.0": + version: 0.113.0 + resolution: "@oxc-project/types@npm:0.113.0" + checksum: 10c0/a5172494732d6f79eaa73246065e0c5ecfff94900191b930a6bc28f0eaced91b93276a971fdf088db902775ed3d3ea7dca9f45fa2795b69ec8ccc0c35dacaa0d + languageName: node + linkType: hard + +"@oxc-project/types@npm:=0.133.0": + version: 0.133.0 + resolution: "@oxc-project/types@npm:0.133.0" + checksum: 10c0/70c57ba58644f7ec217b670c301801f4d06995f4ccdba6b2bd106ea3e5ee49d616573e6ef8d55530b87571a960696543687f3850e87ad173d3f88965c30cdd63 + languageName: node + linkType: hard + +"@parcel/watcher-android-arm64@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-android-arm64@npm:2.5.6" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-darwin-arm64@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-darwin-arm64@npm:2.5.6" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-darwin-x64@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-darwin-x64@npm:2.5.6" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher-freebsd-x64@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-freebsd-x64@npm:2.5.6" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm-glibc@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-linux-arm-glibc@npm:2.5.6" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm-musl@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-linux-arm-musl@npm:2.5.6" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm64-glibc@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-linux-arm64-glibc@npm:2.5.6" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm64-musl@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-linux-arm64-musl@npm:2.5.6" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-linux-x64-glibc@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-linux-x64-glibc@npm:2.5.6" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-x64-musl@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-linux-x64-musl@npm:2.5.6" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-win32-arm64@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-win32-arm64@npm:2.5.6" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-win32-ia32@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-win32-ia32@npm:2.5.6" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@parcel/watcher-win32-x64@npm:2.5.6": + version: 2.5.6 + resolution: "@parcel/watcher-win32-x64@npm:2.5.6" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher@npm:^2.4.1": + version: 2.5.6 + resolution: "@parcel/watcher@npm:2.5.6" + dependencies: + "@parcel/watcher-android-arm64": "npm:2.5.6" + "@parcel/watcher-darwin-arm64": "npm:2.5.6" + "@parcel/watcher-darwin-x64": "npm:2.5.6" + "@parcel/watcher-freebsd-x64": "npm:2.5.6" + "@parcel/watcher-linux-arm-glibc": "npm:2.5.6" + "@parcel/watcher-linux-arm-musl": "npm:2.5.6" + "@parcel/watcher-linux-arm64-glibc": "npm:2.5.6" + "@parcel/watcher-linux-arm64-musl": "npm:2.5.6" + "@parcel/watcher-linux-x64-glibc": "npm:2.5.6" + "@parcel/watcher-linux-x64-musl": "npm:2.5.6" + "@parcel/watcher-win32-arm64": "npm:2.5.6" + "@parcel/watcher-win32-ia32": "npm:2.5.6" + "@parcel/watcher-win32-x64": "npm:2.5.6" + detect-libc: "npm:^2.0.3" + is-glob: "npm:^4.0.3" + node-addon-api: "npm:^7.0.0" + node-gyp: "npm:latest" + picomatch: "npm:^4.0.3" + dependenciesMeta: + "@parcel/watcher-android-arm64": + optional: true + "@parcel/watcher-darwin-arm64": + optional: true + "@parcel/watcher-darwin-x64": + optional: true + "@parcel/watcher-freebsd-x64": + optional: true + "@parcel/watcher-linux-arm-glibc": + optional: true + "@parcel/watcher-linux-arm-musl": + optional: true + "@parcel/watcher-linux-arm64-glibc": + optional: true + "@parcel/watcher-linux-arm64-musl": + optional: true + "@parcel/watcher-linux-x64-glibc": + optional: true + "@parcel/watcher-linux-x64-musl": + optional: true + "@parcel/watcher-win32-arm64": + optional: true + "@parcel/watcher-win32-ia32": + optional: true + "@parcel/watcher-win32-x64": + optional: true + checksum: 10c0/1e1d91f92e94e4640089a7cead243b2b81ca9aa8e1c862a97a25f589e84fbf1ad93abeb503f325c43a8c0e024ae0e74b48ec42c1cd84e8e423a3a87d25ded4f2 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + +"@preact/signals-core@npm:^1.13.0": + version: 1.14.2 + resolution: "@preact/signals-core@npm:1.14.2" + checksum: 10c0/898e6e22a5d2a11bd3d5b109c8d9bacff0e9bc9f23c01455901b7feab8c441dc03fdd53cfd7b5f9275b0df052fcaeb8c8928f537cebb190d9e02a6f2a3ac441e + languageName: node + linkType: hard + +"@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/aspromise@npm:1.1.2" + checksum: 10c0/a83343a468ff5b5ec6bff36fd788a64c839e48a07ff9f4f813564f58caf44d011cd6504ed2147bf34835bd7a7dd2107052af755961c6b098fd8902b4f6500d0f + languageName: node + linkType: hard + +"@protobufjs/base64@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/base64@npm:1.1.2" + checksum: 10c0/eec925e681081af190b8ee231f9bad3101e189abbc182ff279da6b531e7dbd2a56f1f306f37a80b1be9e00aa2d271690d08dcc5f326f71c9eed8546675c8caf6 + languageName: node + linkType: hard + +"@protobufjs/codegen@npm:^2.0.5": + version: 2.0.5 + resolution: "@protobufjs/codegen@npm:2.0.5" + checksum: 10c0/1b8a2ae56ee60a56e9d205cd4b6072a1503c5069b8ebb905710f974ff0098a0d0700641c137e0a8d98dedf14423156a106a9433695cbf52574810f55000fdcab + languageName: node + linkType: hard + +"@protobufjs/eventemitter@npm:^1.1.1": + version: 1.1.1 + resolution: "@protobufjs/eventemitter@npm:1.1.1" + checksum: 10c0/8e06193d4629c5e7c09d4f8c2ddba8fc4dfa739f0149f33a1d901568d35bb7b8b5277a4e8452baf3bdd0b302fd599cf255d193267aa93a0a4747e23cd073c4ac + languageName: node + linkType: hard + +"@protobufjs/fetch@npm:^1.1.1": + version: 1.1.1 + resolution: "@protobufjs/fetch@npm:1.1.1" + dependencies: + "@protobufjs/aspromise": "npm:^1.1.1" + checksum: 10c0/a497ff5433854e8577f0427983ea39b9113b49a8120f94515291d763327061d2c3013e60e24ea436d091dafae01a0f6eb1867e3b1616045d96a31d8b3c646ed4 + languageName: node + linkType: hard + +"@protobufjs/float@npm:^1.0.2": + version: 1.0.2 + resolution: "@protobufjs/float@npm:1.0.2" + checksum: 10c0/18f2bdede76ffcf0170708af15c9c9db6259b771e6b84c51b06df34a9c339dbbeec267d14ce0bddd20acc142b1d980d983d31434398df7f98eb0c94a0eb79069 + languageName: node + linkType: hard + +"@protobufjs/path@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/path@npm:1.1.2" + checksum: 10c0/cece0a938e7f5dfd2fa03f8c14f2f1cf8b0d6e13ac7326ff4c96ea311effd5fb7ae0bba754fbf505312af2e38500250c90e68506b97c02360a43793d88a0d8b4 + languageName: node + linkType: hard + +"@protobufjs/pool@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/pool@npm:1.1.0" + checksum: 10c0/eda2718b7f222ac6e6ad36f758a92ef90d26526026a19f4f17f668f45e0306a5bd734def3f48f51f8134ae0978b6262a5c517c08b115a551756d1a3aadfcf038 + languageName: node + linkType: hard + +"@protobufjs/utf8@npm:^1.1.1": + version: 1.1.1 + resolution: "@protobufjs/utf8@npm:1.1.1" + checksum: 10c0/641fc145f00626405e8984b6e90b9edcbcc072ffc82d0647ca3176e09c730b2d022f988e65f011a7a17e2e4d77cde7733643aa10d8ac2bfa30f134dbcad553fd + languageName: node + linkType: hard + +"@rolldown/binding-android-arm64@npm:1.0.0-rc.4": + version: 1.0.0-rc.4 + resolution: "@rolldown/binding-android-arm64@npm:1.0.0-rc.4" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-android-arm64@npm:1.0.3": + version: 1.0.3 + resolution: "@rolldown/binding-android-arm64@npm:1.0.3" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-darwin-arm64@npm:1.0.0-rc.4": + version: 1.0.0-rc.4 + resolution: "@rolldown/binding-darwin-arm64@npm:1.0.0-rc.4" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-darwin-arm64@npm:1.0.3": + version: 1.0.3 + resolution: "@rolldown/binding-darwin-arm64@npm:1.0.3" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-darwin-x64@npm:1.0.0-rc.4": + version: 1.0.0-rc.4 + resolution: "@rolldown/binding-darwin-x64@npm:1.0.0-rc.4" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/binding-darwin-x64@npm:1.0.3": + version: 1.0.3 + resolution: "@rolldown/binding-darwin-x64@npm:1.0.3" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/binding-freebsd-x64@npm:1.0.0-rc.4": + version: 1.0.0-rc.4 + resolution: "@rolldown/binding-freebsd-x64@npm:1.0.0-rc.4" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/binding-freebsd-x64@npm:1.0.3": + version: 1.0.3 + resolution: "@rolldown/binding-freebsd-x64@npm:1.0.3" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.4": + version: 1.0.0-rc.4 + resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.4" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.3": + version: 1.0.3 + resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.0.3" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.4": + version: 1.0.0-rc.4 + resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.4" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm64-gnu@npm:1.0.3": + version: 1.0.3 + resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.0.3" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.4": + version: 1.0.0-rc.4 + resolution: "@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.4" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm64-musl@npm:1.0.3": + version: 1.0.3 + resolution: "@rolldown/binding-linux-arm64-musl@npm:1.0.3" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rolldown/binding-linux-ppc64-gnu@npm:1.0.3": + version: 1.0.3 + resolution: "@rolldown/binding-linux-ppc64-gnu@npm:1.0.3" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-s390x-gnu@npm:1.0.3": + version: 1.0.3 + resolution: "@rolldown/binding-linux-s390x-gnu@npm:1.0.3" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.4": + version: 1.0.0-rc.4 + resolution: "@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.4" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-x64-gnu@npm:1.0.3": + version: 1.0.3 + resolution: "@rolldown/binding-linux-x64-gnu@npm:1.0.3" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.4": + version: 1.0.0-rc.4 + resolution: "@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.4" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rolldown/binding-linux-x64-musl@npm:1.0.3": + version: 1.0.3 + resolution: "@rolldown/binding-linux-x64-musl@npm:1.0.3" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.4": + version: 1.0.0-rc.4 + resolution: "@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.4" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-openharmony-arm64@npm:1.0.3": + version: 1.0.3 + resolution: "@rolldown/binding-openharmony-arm64@npm:1.0.3" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.4": + version: 1.0.0-rc.4 + resolution: "@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.4" + dependencies: + "@napi-rs/wasm-runtime": "npm:^1.1.1" + conditions: cpu=wasm32 + languageName: node + linkType: hard + +"@rolldown/binding-wasm32-wasi@npm:1.0.3": + version: 1.0.3 + resolution: "@rolldown/binding-wasm32-wasi@npm:1.0.3" + dependencies: + "@emnapi/core": "npm:1.10.0" + "@emnapi/runtime": "npm:1.10.0" + "@napi-rs/wasm-runtime": "npm:^1.1.4" + conditions: cpu=wasm32 + languageName: node + linkType: hard + +"@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.4": + version: 1.0.0-rc.4 + resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.4" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-win32-arm64-msvc@npm:1.0.3": + version: 1.0.3 + resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.0.3" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.4": + version: 1.0.0-rc.4 + resolution: "@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.4" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/binding-win32-x64-msvc@npm:1.0.3": + version: 1.0.3 + resolution: "@rolldown/binding-win32-x64-msvc@npm:1.0.3" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/pluginutils@npm:1.0.0-rc.4": + version: 1.0.0-rc.4 + resolution: "@rolldown/pluginutils@npm:1.0.0-rc.4" + checksum: 10c0/c3a4e8c3a4cda43294d04fbaa5066476b933c75b0b5dbee66aaa4ea9bbcf34675dbddd53ffaaf6160b244f1a868a42282aec85a00942fd5a166652f4e2fca192 + languageName: node + linkType: hard + +"@rolldown/pluginutils@npm:^1.0.0": + version: 1.0.1 + resolution: "@rolldown/pluginutils@npm:1.0.1" + checksum: 10c0/99d9b06d90196823e4d8c841f258db7a16e5dbba5824a2962b05d907b79f1ba929d56f22dd744fd530936e568c865ee56a719dc31e57e13bc0a8eb4764a8d8dd + languageName: node + linkType: hard + +"@rollup/plugin-json@npm:^6.1.0": + version: 6.1.0 + resolution: "@rollup/plugin-json@npm:6.1.0" + dependencies: + "@rollup/pluginutils": "npm:^5.1.0" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/9400c431b5e0cf3088ba2eb2d038809a2b0fb2a84ed004997da85582f48cd64958ed3168893c4f2c8109e38652400ed68282d0c92bf8ec07a3b2ef2e1ceab0b7 + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^5.1.0": + version: 5.4.0 + resolution: "@rollup/pluginutils@npm:5.4.0" + dependencies: + "@types/estree": "npm:^1.0.0" + estree-walker: "npm:^2.0.2" + picomatch: "npm:^4.0.2" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/ccc2cbd3a05df642df60ab05ffb81b2e564bd945e2a118bb8a474ea75b941033c8f44273133d4865643cca1492d0c80b14de1281f74779a64285a80fc3a194d8 + languageName: node + linkType: hard + +"@rollup/rollup-android-arm-eabi@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.61.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-android-arm64@npm:4.61.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-darwin-arm64@npm:4.61.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-darwin-x64@npm:4.61.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-arm64@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.61.1" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-freebsd-x64@npm:4.61.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.61.1" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.61.1" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.61.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.61.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-gnu@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.61.1" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-musl@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-linux-loong64-musl@npm:4.61.1" + conditions: os=linux & cpu=loong64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-gnu@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.61.1" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-musl@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.61.1" + conditions: os=linux & cpu=ppc64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.61.1" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-musl@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.61.1" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.61.1" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.61.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.61.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-openbsd-x64@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-openbsd-x64@npm:4.61.1" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-openharmony-arm64@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-openharmony-arm64@npm:4.61.1" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.61.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.61.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-gnu@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-win32-x64-gnu@npm:4.61.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.61.1": + version: 4.61.1 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.61.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rollup/wasm-node@npm:^4.24.0": + version: 4.61.1 + resolution: "@rollup/wasm-node@npm:4.61.1" + dependencies: + "@types/estree": "npm:1.0.9" + fsevents: "npm:~2.3.2" + dependenciesMeta: + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/b3d44b62727809615a4e31b48b94ced56ff940fdb197dde58e55f267a40d3fff23cc49d2d2cfcb6647cab17174e43e0599b5e3aa06dccc989d0c87fadb62a249 + languageName: node + linkType: hard + +"@schematics/angular@npm:21.2.15": + version: 21.2.15 + resolution: "@schematics/angular@npm:21.2.15" + dependencies: + "@angular-devkit/core": "npm:21.2.15" + "@angular-devkit/schematics": "npm:21.2.15" + jsonc-parser: "npm:3.3.1" + checksum: 10c0/17cd6d1f7c701e502b793cbc2308a79545ec54dd2296bae5f810e47d61aa46cba2bf74f889ec1b56e9c12b03d081fedbbe9f9d6c725c9899692aeea32617636d + languageName: node + linkType: hard + +"@sigstore/bundle@npm:^4.0.0": + version: 4.0.0 + resolution: "@sigstore/bundle@npm:4.0.0" + dependencies: + "@sigstore/protobuf-specs": "npm:^0.5.0" + checksum: 10c0/0606ed6274f8e042298cdbcbef293d57de7dc00082e6ab076c8bda9c1765dc502e160aecaa034c112c1f1d08266dd7376437a86e7ecab03e3865cb4e03ee24c2 + languageName: node + linkType: hard + +"@sigstore/core@npm:^3.2.0, @sigstore/core@npm:^3.2.1": + version: 3.2.1 + resolution: "@sigstore/core@npm:3.2.1" + checksum: 10c0/b7f7dadf07234b6fa110dfeedd8453c6d81fa0fc77731c097dc72b3fb9e0e8750e7b3fa82c33f4b9d8bdda1be634eda18231f5dad1679bdf31f204f855926f61 + languageName: node + linkType: hard + +"@sigstore/protobuf-specs@npm:^0.5.0": + version: 0.5.1 + resolution: "@sigstore/protobuf-specs@npm:0.5.1" + checksum: 10c0/4284797bcac5f7250b7cb7000a67e76045d38da05a24a5912085b2472e0635efe4db3c6dd118e4023d7ba7ec5adc06cc8c35bf750cf2b39743e73c9f35311fe0 + languageName: node + linkType: hard + +"@sigstore/sign@npm:^4.1.1": + version: 4.1.1 + resolution: "@sigstore/sign@npm:4.1.1" + dependencies: + "@gar/promise-retry": "npm:^1.0.2" + "@sigstore/bundle": "npm:^4.0.0" + "@sigstore/core": "npm:^3.2.0" + "@sigstore/protobuf-specs": "npm:^0.5.0" + make-fetch-happen: "npm:^15.0.4" + proc-log: "npm:^6.1.0" + checksum: 10c0/88a6e5d2ce49477a52574d5dd5f4531cbb3472435fad29730969b77988efb23bdd5ce031a74f738da5b24c950f99030704b75b8cc65d5179b56ce9ede9711784 + languageName: node + linkType: hard + +"@sigstore/tuf@npm:^4.0.2": + version: 4.0.2 + resolution: "@sigstore/tuf@npm:4.0.2" + dependencies: + "@sigstore/protobuf-specs": "npm:^0.5.0" + tuf-js: "npm:^4.1.0" + checksum: 10c0/eb7ba5b9d4859948bfd5552a1c6d93f0d05b9482bf21dede53779ea429f833dcd13c3a52524596c556729d75d85326ce0a7d0857d3d23ef99784b0e94e948818 + languageName: node + linkType: hard + +"@sigstore/verify@npm:^3.1.1": + version: 3.1.1 + resolution: "@sigstore/verify@npm:3.1.1" + dependencies: + "@sigstore/bundle": "npm:^4.0.0" + "@sigstore/core": "npm:^3.2.1" + "@sigstore/protobuf-specs": "npm:^0.5.0" + checksum: 10c0/3b8c0b224b23a0e215e90a60a03193b77f333d9fd6838671aec2aef1bc9e8d42b9cb5cf246d5fb31135705bef0384e919364c5ba7f749e2cb4c10c93ae856a5c + languageName: node + linkType: hard + +"@standard-schema/spec@npm:^1.0.0, @standard-schema/spec@npm:^1.1.0": + version: 1.1.0 + resolution: "@standard-schema/spec@npm:1.1.0" + checksum: 10c0/d90f55acde4b2deb983529c87e8025fa693de1a5e8b49ecc6eb84d1fd96328add0e03d7d551442156c7432fd78165b2c26ff561b970a9a881f046abb78d6a526 + languageName: node + linkType: hard + +"@tootallnate/once@npm:2": + version: 2.0.1 + resolution: "@tootallnate/once@npm:2.0.1" + checksum: 10c0/23b01a341485be711c602077936d70f8e695405bb88ab4433dc6d1e6cb4556401518789574d399eded790b70b27738136c9a8f02df7ae4219f4ba28bb22d586b + languageName: node + linkType: hard + +"@tufjs/canonical-json@npm:2.0.0": + version: 2.0.0 + resolution: "@tufjs/canonical-json@npm:2.0.0" + checksum: 10c0/52c5ffaef1483ed5c3feedfeba26ca9142fa386eea54464e70ff515bd01c5e04eab05d01eff8c2593291dcaf2397ca7d9c512720e11f52072b04c47a5c279415 + languageName: node + linkType: hard + +"@tufjs/models@npm:4.1.0": + version: 4.1.0 + resolution: "@tufjs/models@npm:4.1.0" + dependencies: + "@tufjs/canonical-json": "npm:2.0.0" + minimatch: "npm:^10.1.1" + checksum: 10c0/0a4ab524061c97bb43ccd3ffaaaed224eb41469fa2b748f66599d298798f7556e7158a12a9cbdfb89476df0ae538ca562292ac10909e411aa17f81f72b3e8931 + languageName: node + linkType: hard + +"@tybys/wasm-util@npm:^0.10.2": + version: 0.10.2 + resolution: "@tybys/wasm-util@npm:0.10.2" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/26165bcd1fd7269f42d7fbe3de318f854a8968de8397e89fc9a423bb3e2da35a52150f382e6323b3367595beb16d9800a6f35971a5599daf76da1742ec3afc25 + languageName: node + linkType: hard + +"@types/body-parser@npm:*": + version: 1.19.6 + resolution: "@types/body-parser@npm:1.19.6" + dependencies: + "@types/connect": "npm:*" + "@types/node": "npm:*" + checksum: 10c0/542da05c924dce58ee23f50a8b981fee36921850c82222e384931fda3e106f750f7880c47be665217d72dbe445129049db6eb1f44e7a06b09d62af8f3cca8ea7 + languageName: node + linkType: hard + +"@types/caseless@npm:*": + version: 0.12.5 + resolution: "@types/caseless@npm:0.12.5" + checksum: 10c0/b1f8b8a38ce747b643115d37a40ea824c658bd7050e4b69427a10e9d12d1606ed17a0f6018241c08291cd59f70aeb3c1f3754ad61e45f8dbba708ec72dde7ec8 + languageName: node + linkType: hard + +"@types/connect@npm:*": + version: 3.4.38 + resolution: "@types/connect@npm:3.4.38" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/2e1cdba2c410f25649e77856505cd60223250fa12dff7a503e492208dbfdd25f62859918f28aba95315251fd1f5e1ffbfca1e25e73037189ab85dd3f8d0a148c + languageName: node + linkType: hard + +"@types/esrecurse@npm:^4.3.1": + version: 4.3.1 + resolution: "@types/esrecurse@npm:4.3.1" + checksum: 10c0/90dad74d5da3ad27606d8e8e757322f33171cfeaa15ad558b615cf71bb2a516492d18f55f4816384685a3eb2412142e732bbae9a4a7cd2cf3deb7572aa4ebe03 + languageName: node + linkType: hard + +"@types/estree@npm:1.0.9, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6, @types/estree@npm:^1.0.8": + version: 1.0.9 + resolution: "@types/estree@npm:1.0.9" + checksum: 10c0/3ad3286ca2988cd550dafb8f2ad599c8474868e954fa601a36655bdfefd8039f7c714b8c1c7f2ae219ffbd58bd4660e66fa7479a0120fc02d4777057d4865387 + languageName: node + linkType: hard + +"@types/express-serve-static-core@npm:^5.0.0": + version: 5.1.1 + resolution: "@types/express-serve-static-core@npm:5.1.1" + dependencies: + "@types/node": "npm:*" + "@types/qs": "npm:*" + "@types/range-parser": "npm:*" + "@types/send": "npm:*" + checksum: 10c0/ee88216e114368ef06bcafeceb74a7e8671b90900fb0ab1d49ff41542c3a344231ef0d922bf63daa79f0585f3eebe2ce5ec7f83facc581eff8bcdb136a225ef3 + languageName: node + linkType: hard + +"@types/express@npm:^5.0.6": + version: 5.0.6 + resolution: "@types/express@npm:5.0.6" + dependencies: + "@types/body-parser": "npm:*" + "@types/express-serve-static-core": "npm:^5.0.0" + "@types/serve-static": "npm:^2" + checksum: 10c0/f1071e3389a955d4f9a38aae38634121c7cd9b3171ba4201ec9b56bd534aba07866839d278adc0dda05b942b05a901a02fd174201c3b1f70ce22b10b6c68f24b + languageName: node + linkType: hard + +"@types/google.maps@npm:^3.54.10": + version: 3.65.1 + resolution: "@types/google.maps@npm:3.65.1" + checksum: 10c0/9a7da04d9f27be7a3f9a4de2e6dd9271b68b83aa8a6050fc53ec5cc1366669ead4c27185200adf56f07d69c9a2bba72d82a0cf706e41ed4e7e89d98c44c5c6a1 + languageName: node + linkType: hard + +"@types/http-errors@npm:*": + version: 2.0.5 + resolution: "@types/http-errors@npm:2.0.5" + checksum: 10c0/00f8140fbc504f47356512bd88e1910c2f07e04233d99c88c854b3600ce0523c8cd0ba7d1897667243282eb44c59abb9245959e2428b9de004f93937f52f7c15 + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.15": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db + languageName: node + linkType: hard + +"@types/jsonwebtoken@npm:^9.0.4": + version: 9.0.10 + resolution: "@types/jsonwebtoken@npm:9.0.10" + dependencies: + "@types/ms": "npm:*" + "@types/node": "npm:*" + checksum: 10c0/0688ac8fb75f809201cb7e18a12b9d80ce539cb9dd27e1b01e11807cb1a337059e899b8ee3abc3f2c9417f02e363a3069d9eab9ef9724b1da1f0e10713514f94 + languageName: node + linkType: hard + +"@types/linkify-it@npm:^5": + version: 5.0.0 + resolution: "@types/linkify-it@npm:5.0.0" + checksum: 10c0/7bbbf45b9dde17bf3f184fee585aef0e7342f6954f0377a24e4ff42ab5a85d5b806aaa5c8d16e2faf2a6b87b2d94467a196b7d2b85c9c7de2f0eaac5487aaab8 + languageName: node + linkType: hard + +"@types/markdown-it@npm:^14.1.2": + version: 14.1.2 + resolution: "@types/markdown-it@npm:14.1.2" + dependencies: + "@types/linkify-it": "npm:^5" + "@types/mdurl": "npm:^2" + checksum: 10c0/34f709f0476bd4e7b2ba7c3341072a6d532f1f4cb6f70aef371e403af8a08a7c372ba6907ac426bc618d356dab660c5b872791ff6c1ead80c483e0d639c6f127 + languageName: node + linkType: hard + +"@types/mdurl@npm:^2": + version: 2.0.0 + resolution: "@types/mdurl@npm:2.0.0" + checksum: 10c0/cde7bb571630ed1ceb3b92a28f7b59890bb38b8f34cd35326e2df43eebfc74985e6aa6fd4184e307393bad8a9e0783a519a3f9d13c8e03788c0f98e5ec869c5e + languageName: node + linkType: hard + +"@types/ms@npm:*": + version: 2.1.0 + resolution: "@types/ms@npm:2.1.0" + checksum: 10c0/5ce692ffe1549e1b827d99ef8ff71187457e0eb44adbae38fdf7b9a74bae8d20642ee963c14516db1d35fa2652e65f47680fdf679dcbde52bbfadd021f497225 + languageName: node + linkType: hard + +"@types/node@npm:*, @types/node@npm:>=12.12.47, @types/node@npm:>=13.7.0, @types/node@npm:^25.9.3": + version: 25.9.3 + resolution: "@types/node@npm:25.9.3" + dependencies: + undici-types: "npm:>=7.24.0 <7.24.7" + checksum: 10c0/72d3aece9d42c2c641bcd3f3cb2dc2828b4bd384dfcbd910c404b8859a68bd69d50c4769ce7defd4ff5e049768e23e615f09407ea2cbbb5f44b90d75a7c6b8ca + languageName: node + linkType: hard + +"@types/qs@npm:*": + version: 6.15.1 + resolution: "@types/qs@npm:6.15.1" + checksum: 10c0/1dfdbcb4cf2a8f66d57f0b9a9fe6b1c7091cb816687b6698c1351eaf31f62e412cea9b7453a9637b570cd5fad8dced527e5a9e69b4fcc6e318daacd8b749f094 + languageName: node + linkType: hard + +"@types/range-parser@npm:*": + version: 1.2.7 + resolution: "@types/range-parser@npm:1.2.7" + checksum: 10c0/361bb3e964ec5133fa40644a0b942279ed5df1949f21321d77de79f48b728d39253e5ce0408c9c17e4e0fd95ca7899da36841686393b9f7a1e209916e9381a3c + languageName: node + linkType: hard + +"@types/request@npm:^2.48.8": + version: 2.48.13 + resolution: "@types/request@npm:2.48.13" + dependencies: + "@types/caseless": "npm:*" + "@types/node": "npm:*" + "@types/tough-cookie": "npm:*" + form-data: "npm:^2.5.5" + checksum: 10c0/1c6798d926a6577f213dbc04aa09945590f260ea367537c20824ff337b0a49d56e5199a6a6029e625568d97c3bbb98908bdb8d9158eb421f70a0d03ae230ff72 + languageName: node + linkType: hard + +"@types/retry@npm:0.12.0": + version: 0.12.0 + resolution: "@types/retry@npm:0.12.0" + checksum: 10c0/7c5c9086369826f569b83a4683661557cab1361bac0897a1cefa1a915ff739acd10ca0d62b01071046fe3f5a3f7f2aec80785fe283b75602dc6726781ea3e328 + languageName: node + linkType: hard + +"@types/send@npm:*": + version: 1.2.1 + resolution: "@types/send@npm:1.2.1" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/7673747f8c2d8e67f3b1b3b57e9d4d681801a4f7b526ecf09987bb9a84a61cf94aa411c736183884dc762c1c402a61681eb1ef200d8d45d7e5ec0ab67ea5f6c1 + languageName: node + linkType: hard + +"@types/serve-static@npm:^2": + version: 2.2.0 + resolution: "@types/serve-static@npm:2.2.0" + dependencies: + "@types/http-errors": "npm:*" + "@types/node": "npm:*" + checksum: 10c0/a3c6126bdbf9685e6c7dc03ad34639666eff32754e912adeed9643bf3dd3aa0ff043002a7f69039306e310d233eb8e160c59308f95b0a619f32366bbc48ee094 + languageName: node + linkType: hard + +"@types/tough-cookie@npm:*": + version: 4.0.5 + resolution: "@types/tough-cookie@npm:4.0.5" + checksum: 10c0/68c6921721a3dcb40451543db2174a145ef915bc8bcbe7ad4e59194a0238e776e782b896c7a59f4b93ac6acefca9161fccb31d1ce3b3445cb6faa467297fb473 + languageName: node + linkType: hard + +"@types/trusted-types@npm:^2.0.2, @types/trusted-types@npm:^2.0.7": + version: 2.0.7 + resolution: "@types/trusted-types@npm:2.0.7" + checksum: 10c0/4c4855f10de7c6c135e0d32ce462419d8abbbc33713b31d294596c0cc34ae1fa6112a2f9da729c8f7a20707782b0d69da3b1f8df6645b0366d08825ca1522e0c + languageName: node + linkType: hard + +"@types/uuid@npm:^11.0.0": + version: 11.0.0 + resolution: "@types/uuid@npm:11.0.0" + dependencies: + uuid: "npm:*" + checksum: 10c0/6ebf1448d8fdc78d348a8a84389b74083f2f58bed75a5a6cf3be8419d33dcf757735c8b2de746b066ff8ef07f4384d02549774dc84195ffa46b24745471e9d8e + languageName: node + linkType: hard + +"@vitejs/plugin-basic-ssl@npm:2.1.4": + version: 2.1.4 + resolution: "@vitejs/plugin-basic-ssl@npm:2.1.4" + peerDependencies: + vite: ^6.0.0 || ^7.0.0 + checksum: 10c0/fcbec6f089d3f16f3c2011a8d7cf41920a0b9a97907a36f1dc367527582f98e6e376fa29b1f4d93c265be765ccd90752bfe6558bfaf71cc4f171196dccd19b56 + languageName: node + linkType: hard + +"@yarnpkg/lockfile@npm:1.1.0": + version: 1.1.0 + resolution: "@yarnpkg/lockfile@npm:1.1.0" + checksum: 10c0/0bfa50a3d756623d1f3409bc23f225a1d069424dbc77c6fd2f14fb377390cd57ec703dc70286e081c564be9051ead9ba85d81d66a3e68eeb6eb506d4e0c0fbda + languageName: node + linkType: hard + +"a2a-chat-canvas@workspace:client/angular/projects/a2a-chat-canvas": + version: 0.0.0-use.local + resolution: "a2a-chat-canvas@workspace:client/angular/projects/a2a-chat-canvas" + dependencies: + tslib: "npm:^2.8.1" + wireit: "npm:^0.15.0-pre.2" + peerDependencies: + "@a2ui/angular": ^0.10.0 + "@a2ui/web_core": ^0.10.0 + "@angular/common": ^21.2.5 + "@angular/core": ^21.2.5 + "@angular/platform-browser": ^21.2.5 + languageName: unknown + linkType: soft + +"a2ui-community-samples@workspace:.": + version: 0.0.0-use.local + resolution: "a2ui-community-samples@workspace:." + languageName: unknown + linkType: soft + +"abbrev@npm:^4.0.0": + version: 4.0.0 + resolution: "abbrev@npm:4.0.0" + checksum: 10c0/b4cc16935235e80702fc90192e349e32f8ef0ed151ef506aa78c81a7c455ec18375c4125414b99f84b2e055199d66383e787675f0bcd87da7a4dbd59f9eac1d5 + languageName: node + linkType: hard + +"abbrev@npm:^5.0.0": + version: 5.0.0 + resolution: "abbrev@npm:5.0.0" + checksum: 10c0/8e88f5c798ea4562d28c5a3e9ad69e3879890bc5d695d8f2dffb8609be4c890aacc8f80ef4553fdd2c6a62d70c2ce8bc57b38074e383beb7487bdafa9ed42ea5 + languageName: node + linkType: hard + +"abort-controller@npm:^3.0.0": + version: 3.0.0 + resolution: "abort-controller@npm:3.0.0" + dependencies: + event-target-shim: "npm:^5.0.0" + checksum: 10c0/90ccc50f010250152509a344eb2e71977fbf8db0ab8f1061197e3275ddf6c61a41a6edfd7b9409c664513131dd96e962065415325ef23efa5db931b382d24ca5 + languageName: node + linkType: hard + +"accepts@npm:^2.0.0": + version: 2.0.0 + resolution: "accepts@npm:2.0.0" + dependencies: + mime-types: "npm:^3.0.0" + negotiator: "npm:^1.0.0" + checksum: 10c0/98374742097e140891546076215f90c32644feacf652db48412329de4c2a529178a81aa500fbb13dd3e6cbf6e68d829037b123ac037fc9a08bcec4b87b358eef + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 + languageName: node + linkType: hard + +"acorn@npm:^8.16.0": + version: 8.17.0 + resolution: "acorn@npm:8.17.0" + bin: + acorn: bin/acorn + checksum: 10c0/5dcefea5f8f023b6cc24cbe71fb5a8112b601d36c4fa07d14e4e6ffc2ee47383332c46b36c766d9437725aa6660156eae50efa0c838719823b50d7c327c4ed42 + languageName: node + linkType: hard + +"agent-base@npm:6": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: "npm:4" + checksum: 10c0/dc4f757e40b5f3e3d674bc9beb4f1048f4ee83af189bae39be99f57bf1f48dde166a8b0a5342a84b5944ee8e6ed1e5a9d801858f4ad44764e84957122fe46261 + languageName: node + linkType: hard + +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.4 + resolution: "agent-base@npm:7.1.4" + checksum: 10c0/c2c9ab7599692d594b6a161559ada307b7a624fa4c7b03e3afdb5a5e31cd0e53269115b620fcab024c5ac6a6f37fa5eb2e004f076ad30f5f7e6b8b671f7b35fe + languageName: node + linkType: hard + +"ajv-formats@npm:3.0.1, ajv-formats@npm:^3.0.1": + version: 3.0.1 + resolution: "ajv-formats@npm:3.0.1" + dependencies: + ajv: "npm:^8.0.0" + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 10c0/168d6bca1ea9f163b41c8147bae537e67bd963357a5488a1eaf3abe8baa8eec806d4e45f15b10767e6020679315c7e1e5e6803088dfb84efa2b4e9353b83dd0a + languageName: node + linkType: hard + +"ajv@npm:8.18.0": + version: 8.18.0 + resolution: "ajv@npm:8.18.0" + dependencies: + fast-deep-equal: "npm:^3.1.3" + fast-uri: "npm:^3.0.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + checksum: 10c0/e7517c426173513a07391be951879932bdf3348feaebd2199f5b901c20f99d60db8cd1591502d4d551dc82f594e82a05c4fe1c70139b15b8937f7afeaed9532f + languageName: node + linkType: hard + +"ajv@npm:^6.14.0": + version: 6.15.0 + resolution: "ajv@npm:6.15.0" + dependencies: + fast-deep-equal: "npm:^3.1.1" + fast-json-stable-stringify: "npm:^2.0.0" + json-schema-traverse: "npm:^0.4.1" + uri-js: "npm:^4.2.2" + checksum: 10c0/67966499dd272ecde1c2e467084411132891523d057487587879d39ac04207f4351b7b2324c83198013967fbfa632c1612adc960114a30770fbe07a0773b32c2 + languageName: node + linkType: hard + +"ajv@npm:^8.0.0, ajv@npm:^8.17.1": + version: 8.20.0 + resolution: "ajv@npm:8.20.0" + dependencies: + fast-deep-equal: "npm:^3.1.3" + fast-uri: "npm:^3.0.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + checksum: 10c0/5df9a1c8f83863cde1bd3a9ddb426f599718f88e3dc9153616c79fb28e0be455335830d7f21d745576519f057b371352daa31047b6a33d7036fe08777d60cf2a + languageName: node + linkType: hard + +"algoliasearch@npm:5.48.1": + version: 5.48.1 + resolution: "algoliasearch@npm:5.48.1" + dependencies: + "@algolia/abtesting": "npm:1.14.1" + "@algolia/client-abtesting": "npm:5.48.1" + "@algolia/client-analytics": "npm:5.48.1" + "@algolia/client-common": "npm:5.48.1" + "@algolia/client-insights": "npm:5.48.1" + "@algolia/client-personalization": "npm:5.48.1" + "@algolia/client-query-suggestions": "npm:5.48.1" + "@algolia/client-search": "npm:5.48.1" + "@algolia/ingestion": "npm:1.48.1" + "@algolia/monitoring": "npm:1.48.1" + "@algolia/recommend": "npm:5.48.1" + "@algolia/requester-browser-xhr": "npm:5.48.1" + "@algolia/requester-fetch": "npm:5.48.1" + "@algolia/requester-node-http": "npm:5.48.1" + checksum: 10c0/592a9682faf1279b2230099e07aaf48f0886d9da5ae8552e1453e920ae4133070724a7248fc4c2669c1346d5f5960f8f8976516306a5924f1ccea43c75b47006 + languageName: node + linkType: hard + +"angular-a2ui@workspace:client/angular": + version: 0.0.0-use.local + resolution: "angular-a2ui@workspace:client/angular" + dependencies: + "@a2a-js/sdk": "npm:^0.3.13" + "@a2ui/angular": "npm:^0.10.0" + "@a2ui/markdown-it": "npm:^0.0.4" + "@a2ui/web_core": "npm:^0.10.0" + "@angular/build": "npm:^21.2.5" + "@angular/cdk": "npm:^21.2.5" + "@angular/cli": "npm:^21.2.5" + "@angular/common": "npm:^21.2.5" + "@angular/compiler": "npm:^21.2.5" + "@angular/compiler-cli": "npm:^21.2.5" + "@angular/core": "npm:^21.2.5" + "@angular/forms": "npm:^21.2.5" + "@angular/google-maps": "npm:^21.2.5" + "@angular/material": "npm:^21.2.5" + "@angular/platform-browser": "npm:^21.2.5" + "@angular/platform-server": "npm:^21.2.5" + "@angular/router": "npm:^21.2.5" + "@angular/ssr": "npm:^21.2.5" + "@google/genai": "npm:^2.8.0" + "@modelcontextprotocol/ext-apps": "npm:^1.7.4" + "@types/express": "npm:^5.0.6" + "@types/markdown-it": "npm:^14.1.2" + "@types/node": "npm:^25.9.3" + "@types/uuid": "npm:^11.0.0" + chart.js: "npm:^4.5.1" + chartjs-plugin-datalabels: "npm:^2.2.0" + eslint: "npm:^10.4.1" + express: "npm:^5.2.1" + markdown-it: "npm:^14.2.0" + ng-packagr: "npm:^22.0.0" + ng2-charts: "npm:^10.0.0" + prettier: "npm:^3.8.4" + rxjs: "npm:^7.8.2" + sass: "npm:^1.100.0" + tslib: "npm:^2.8.1" + typescript: "npm:5.9.3" + uuid: "npm:^14.0.0" + zod: "npm:^3.25.76" + zone.js: "npm:~0.16.2" + languageName: unknown + linkType: soft + +"ansi-escapes@npm:^7.0.0": + version: 7.3.0 + resolution: "ansi-escapes@npm:7.3.0" + dependencies: + environment: "npm:^1.0.0" + checksum: 10c0/068961d99f0ef28b661a4a9f84a5d645df93ccf3b9b93816cc7d46bbe1913321d4cdf156bb842a4e1e4583b7375c631fa963efb43001c4eb7ff9ab8f78fc0679 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.2.2": + version: 6.2.2 + resolution: "ansi-regex@npm:6.2.2" + checksum: 10c0/05d4acb1d2f59ab2cf4b794339c7b168890d44dda4bf0ce01152a8da0213aca207802f930442ce8cd22d7a92f44907664aac6508904e75e038fa944d2601b30f + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0, ansi-styles@npm:^6.2.1, ansi-styles@npm:^6.2.3": + version: 6.2.3 + resolution: "ansi-styles@npm:6.2.3" + checksum: 10c0/23b8a4ce14e18fb854693b95351e286b771d23d8844057ed2e7d083cd3e708376c3323707ec6a24365f7d7eda3ca00327fe04092e29e551499ec4c8b7bfac868 + languageName: node + linkType: hard + +"anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: "npm:^3.0.0" + picomatch: "npm:^2.0.4" + checksum: 10c0/57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac + languageName: node + linkType: hard + +"anynum@npm:^1.0.0": + version: 1.0.0 + resolution: "anynum@npm:1.0.0" + checksum: 10c0/c929fed8f4127cd706312da58ae2aa83a06e62059eef04392fe2bacec003b6f6b7ca5f2719bd09c693b100f185bcf6405419744812f1096cdb53aed4034b9209 + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e + languageName: node + linkType: hard + +"arrify@npm:^2.0.0": + version: 2.0.1 + resolution: "arrify@npm:2.0.1" + checksum: 10c0/3fb30b5e7c37abea1907a60b28a554d2f0fc088757ca9bf5b684786e583fdf14360721eb12575c1ce6f995282eab936712d3c4389122682eafab0e0b57f78dbb + languageName: node + linkType: hard + +"async-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-function@npm:1.0.0" + checksum: 10c0/669a32c2cb7e45091330c680e92eaeb791bc1d4132d827591e499cd1f776ff5a873e77e5f92d0ce795a8d60f10761dec9ddfe7225a5de680f5d357f67b1aac73 + languageName: node + linkType: hard + +"async-generator-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-generator-function@npm:1.0.0" + checksum: 10c0/2c50ef856c543ad500d8d8777d347e3c1ba623b93e99c9263ecc5f965c1b12d2a140e2ab6e43c3d0b85366110696f28114649411cbcd10b452a92a2318394186 + languageName: node + linkType: hard + +"async-retry@npm:^1.3.3": + version: 1.3.3 + resolution: "async-retry@npm:1.3.3" + dependencies: + retry: "npm:0.13.1" + checksum: 10c0/cabced4fb46f8737b95cc88dc9c0ff42656c62dc83ce0650864e891b6c155a063af08d62c446269b51256f6fbcb69a6563b80e76d0ea4a5117b0c0377b6b19d8 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"balanced-match@npm:^3.0.0": + version: 3.0.1 + resolution: "balanced-match@npm:3.0.1" + checksum: 10c0/ac8dd63a5b260610c2cbda982f436e964c1b9ae8764d368a523769da40a31710abd6e19f0fdf1773c4ad7b2ea7ba7b285d547375dc723f6e754369835afc8e9f + languageName: node + linkType: hard + +"balanced-match@npm:^4.0.2": + version: 4.0.4 + resolution: "balanced-match@npm:4.0.4" + checksum: 10c0/07e86102a3eb2ee2a6a1a89164f29d0dbaebd28f2ca3f5ca786f36b8b23d9e417eb3be45a4acf754f837be5ac0a2317de90d3fcb7f4f4dc95720a1f36b26a17b + languageName: node + linkType: hard + +"base64-js@npm:^1.3.0": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf + languageName: node + linkType: hard + +"baseline-browser-mapping@npm:^2.10.12": + version: 2.10.37 + resolution: "baseline-browser-mapping@npm:2.10.37" + bin: + baseline-browser-mapping: dist/cli.cjs + checksum: 10c0/ff489d3ffecd9e440ccabc49401b49f693ecae4a0e73ab71c8c24d43c760399eab8d3eebc9a7798255ef9dc9ed26bb987db813ef9d2044f35455428561f9084b + languageName: node + linkType: hard + +"beasties@npm:0.4.1": + version: 0.4.1 + resolution: "beasties@npm:0.4.1" + dependencies: + css-select: "npm:^6.0.0" + css-what: "npm:^7.0.0" + dom-serializer: "npm:^2.0.0" + domhandler: "npm:^5.0.3" + htmlparser2: "npm:^10.0.0" + picocolors: "npm:^1.1.1" + postcss: "npm:^8.4.49" + postcss-media-query-parser: "npm:^0.2.3" + postcss-safe-parser: "npm:^7.0.1" + checksum: 10c0/acc4394ab01fdb0d56604ca5b8019226eabdb1a7640a350425941a66d2b28593f4303f61142496a1ac68e1d530bab067d5bd6a196405dcfb34421bdbd8f2b459 + languageName: node + linkType: hard + +"bignumber.js@npm:^9.0.0": + version: 9.3.1 + resolution: "bignumber.js@npm:9.3.1" + checksum: 10c0/61342ba5fe1c10887f0ecf5be02ff6709271481aff48631f86b4d37d55a99b87ce441cfd54df3d16d10ee07ceab7e272fc0be430c657ffafbbbf7b7d631efb75 + languageName: node + linkType: hard + +"binary-extensions@npm:^2.0.0": + version: 2.3.0 + resolution: "binary-extensions@npm:2.3.0" + checksum: 10c0/75a59cafc10fb12a11d510e77110c6c7ae3f4ca22463d52487709ca7f18f69d886aa387557cc9864fbdb10153d0bdb4caacabf11541f55e89ed6e18d12ece2b5 + languageName: node + linkType: hard + +"body-parser@npm:^2.2.1": + version: 2.2.2 + resolution: "body-parser@npm:2.2.2" + dependencies: + bytes: "npm:^3.1.2" + content-type: "npm:^1.0.5" + debug: "npm:^4.4.3" + http-errors: "npm:^2.0.0" + iconv-lite: "npm:^0.7.0" + on-finished: "npm:^2.4.1" + qs: "npm:^6.14.1" + raw-body: "npm:^3.0.1" + type-is: "npm:^2.0.1" + checksum: 10c0/95a830a003b38654b75166ca765358aa92ee3d561bf0e41d6ccdde0e1a0c9783cab6b90b20eb635d23172c010b59d3563a137a738e74da4ba714463510d05137 + languageName: node + linkType: hard + +"boolbase@npm:^1.0.0": + version: 1.0.0 + resolution: "boolbase@npm:1.0.0" + checksum: 10c0/e4b53deb4f2b85c52be0e21a273f2045c7b6a6ea002b0e139c744cb6f95e9ec044439a52883b0d74dedd1ff3da55ed140cfdddfed7fb0cccbed373de5dce1bcf + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.2": + version: 2.1.1 + resolution: "brace-expansion@npm:2.1.1" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/63b5ddce608b70b50a76817c0526faf8ea67a9180073d88bb402f6bbc22a22da6b1dfac4f65efc53e5faa80222fb7d44bbf2fc638c3f55365975573f671d0ccb + languageName: node + linkType: hard + +"brace-expansion@npm:^4.0.0": + version: 4.0.1 + resolution: "brace-expansion@npm:4.0.1" + dependencies: + balanced-match: "npm:^3.0.0" + checksum: 10c0/cbe2d8a1be94aea03c47322bd42003bba8f2194eb76b0d4e38e1aac7ddab785c151330642ce87a22f4052ef847d69d55b63468eecf5411a0db5421e261034993 + languageName: node + linkType: hard + +"brace-expansion@npm:^5.0.5": + version: 5.0.6 + resolution: "brace-expansion@npm:5.0.6" + dependencies: + balanced-match: "npm:^4.0.2" + checksum: 10c0/8c919869b90f61d533b341d3340be5ee4413232ea89b8246cbc2f38eb014f1d8182785c98a006eaf6111d02dc9eeffefdc240d5ac158625b2ed084dccd4bbf9b + languageName: node + linkType: hard + +"braces@npm:^3.0.3, braces@npm:~3.0.2": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 + languageName: node + linkType: hard + +"browserslist@npm:^4.24.0, browserslist@npm:^4.26.0": + version: 4.28.2 + resolution: "browserslist@npm:4.28.2" + dependencies: + baseline-browser-mapping: "npm:^2.10.12" + caniuse-lite: "npm:^1.0.30001782" + electron-to-chromium: "npm:^1.5.328" + node-releases: "npm:^2.0.36" + update-browserslist-db: "npm:^1.2.3" + bin: + browserslist: cli.js + checksum: 10c0/c0228b6330f785b7fa59d2d360124ec6d9322f96ed9f3ee1f873e33ecc9503a6f0ffc3b71191a28c4ff6e930b753b30043da1c33844a9548f3018d491f09ce60 + languageName: node + linkType: hard + +"buffer-equal-constant-time@npm:^1.0.1": + version: 1.0.1 + resolution: "buffer-equal-constant-time@npm:1.0.1" + checksum: 10c0/fb2294e64d23c573d0dd1f1e7a466c3e978fe94a4e0f8183937912ca374619773bef8e2aceb854129d2efecbbc515bbd0cc78d2734a3e3031edb0888531bbc8e + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 + languageName: node + linkType: hard + +"bytes@npm:^3.1.2, bytes@npm:~3.1.2": + version: 3.1.2 + resolution: "bytes@npm:3.1.2" + checksum: 10c0/76d1c43cbd602794ad8ad2ae94095cddeb1de78c5dddaa7005c51af10b0176c69971a6d88e805a90c2b6550d76636e43c40d8427a808b8645ede885de4a0358e + languageName: node + linkType: hard + +"cacache@npm:^20.0.0, cacache@npm:^20.0.1": + version: 20.0.4 + resolution: "cacache@npm:20.0.4" + dependencies: + "@npmcli/fs": "npm:^5.0.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^13.0.0" + lru-cache: "npm:^11.1.0" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^7.0.2" + ssri: "npm:^13.0.0" + checksum: 10c0/539bf4020e44ba9ca5afc2ec435623ed7e0dd80c020097677e6b4a0545df5cc9d20b473212d01209c8b4aea43c0d095af0bb6da97bcb991642ea6fac0d7c462b + languageName: node + linkType: hard + +"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind-apply-helpers@npm:1.0.2" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 + languageName: node + linkType: hard + +"call-bound@npm:^1.0.2": + version: 1.0.4 + resolution: "call-bound@npm:1.0.4" + dependencies: + call-bind-apply-helpers: "npm:^1.0.2" + get-intrinsic: "npm:^1.3.0" + checksum: 10c0/f4796a6a0941e71c766aea672f63b72bc61234c4f4964dc6d7606e3664c307e7d77845328a8f3359ce39ddb377fed67318f9ee203dea1d47e46165dcf2917644 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001782": + version: 1.0.30001799 + resolution: "caniuse-lite@npm:1.0.30001799" + checksum: 10c0/f24f9834edc7b60188f368ce44714695c3901bc4acb7f2a977dd9b7b697e39ddc0f9947fad6224a955b789f36a73432cb888d620aa7280d728f582d3bd8927a7 + languageName: node + linkType: hard + +"chalk@npm:5.6.2, chalk@npm:^5.6.2": + version: 5.6.2 + resolution: "chalk@npm:5.6.2" + checksum: 10c0/99a4b0f0e7991796b1e7e3f52dceb9137cae2a9dfc8fc0784a550dc4c558e15ab32ed70b14b21b52beb2679b4892b41a0aa44249bcb996f01e125d58477c6976 + languageName: node + linkType: hard + +"chardet@npm:^2.1.1": + version: 2.1.1 + resolution: "chardet@npm:2.1.1" + checksum: 10c0/d8391dd412338442b3de0d3a488aa9327f8bcf74b62b8723d6bd0b85c4084d50b731320e0a7c710edb1d44de75969995d2784b80e4c13b004a6c7a0db4c6e793 + languageName: node + linkType: hard + +"chart.js@npm:^4.5.1": + version: 4.5.1 + resolution: "chart.js@npm:4.5.1" + dependencies: + "@kurkle/color": "npm:^0.3.0" + checksum: 10c0/3f2a11dcaae9079e8e6b8ad077e2ae311f04996f9da14815730891e66215ee8b5f2c0eb70b5a156e5bde0f89a41bae13506dc6153e50fd22dcb282b21eec706f + languageName: node + linkType: hard + +"chartjs-plugin-datalabels@npm:^2.2.0": + version: 2.2.0 + resolution: "chartjs-plugin-datalabels@npm:2.2.0" + peerDependencies: + chart.js: ">=3.0.0" + checksum: 10c0/de4855a795e4eef34869a16db1a8a0f905b6dfed0258c733338f472625361eb56fb899214b18651c1c1064cd343a78285ba576576693a40ec51285a84f022ea0 + languageName: node + linkType: hard + +"chokidar@npm:^3.5.3": + version: 3.6.0 + resolution: "chokidar@npm:3.6.0" + dependencies: + anymatch: "npm:~3.1.2" + braces: "npm:~3.0.2" + fsevents: "npm:~2.3.2" + glob-parent: "npm:~5.1.2" + is-binary-path: "npm:~2.1.0" + is-glob: "npm:~4.0.1" + normalize-path: "npm:~3.0.0" + readdirp: "npm:~3.6.0" + dependenciesMeta: + fsevents: + optional: true + checksum: 10c0/8361dcd013f2ddbe260eacb1f3cb2f2c6f2b0ad118708a343a5ed8158941a39cb8fb1d272e0f389712e74ee90ce8ba864eece9e0e62b9705cb468a2f6d917462 + languageName: node + linkType: hard + +"chokidar@npm:^4.0.0": + version: 4.0.3 + resolution: "chokidar@npm:4.0.3" + dependencies: + readdirp: "npm:^4.0.1" + checksum: 10c0/a58b9df05bb452f7d105d9e7229ac82fa873741c0c40ddcc7bb82f8a909fbe3f7814c9ebe9bc9a2bef9b737c0ec6e2d699d179048ef06ad3ec46315df0ebe6ad + languageName: node + linkType: hard + +"chokidar@npm:^5.0.0": + version: 5.0.0 + resolution: "chokidar@npm:5.0.0" + dependencies: + readdirp: "npm:^5.0.0" + checksum: 10c0/42fc907cb2a7ff5c9e220f84dae75380a77997f851c2a5e7865a2cf9ae45dd407a23557208cdcdbf3ac8c93341135a1748e4c48c31855f3bfa095e5159b6bdec + languageName: node + linkType: hard + +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 + languageName: node + linkType: hard + +"cli-cursor@npm:^5.0.0": + version: 5.0.0 + resolution: "cli-cursor@npm:5.0.0" + dependencies: + restore-cursor: "npm:^5.0.0" + checksum: 10c0/7ec62f69b79f6734ab209a3e4dbdc8af7422d44d360a7cb1efa8a0887bbe466a6e625650c466fe4359aee44dbe2dc0b6994b583d40a05d0808a5cb193641d220 + languageName: node + linkType: hard + +"cli-spinners@npm:^3.2.0": + version: 3.4.0 + resolution: "cli-spinners@npm:3.4.0" + checksum: 10c0/91296c32e147d5b973c9d439d1512306499215437b92f0c0d8be44ec850b555acb8795c19c606b2f6747f31d50c4e41fdde7dcef653f18f0ae7cdd58e99a4764 + languageName: node + linkType: hard + +"cli-truncate@npm:^5.0.0": + version: 5.2.0 + resolution: "cli-truncate@npm:5.2.0" + dependencies: + slice-ansi: "npm:^8.0.0" + string-width: "npm:^8.2.0" + checksum: 10c0/0d4ec94702ca85b64522ac93633837fb5ea7db17b79b1322a60f6045e6ae2b8cd7bd4c1d19ac7d1f9e10e3bbda1112e172e439b68c02b785ee00da8d6a5c5471 + languageName: node + linkType: hard + +"cli-width@npm:^4.1.0": + version: 4.1.0 + resolution: "cli-width@npm:4.1.0" + checksum: 10c0/1fbd56413578f6117abcaf858903ba1f4ad78370a4032f916745fa2c7e390183a9d9029cf837df320b0fdce8137668e522f60a30a5f3d6529ff3872d265a955f + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^7.0.0" + checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5 + languageName: node + linkType: hard + +"cliui@npm:^9.0.1": + version: 9.0.1 + resolution: "cliui@npm:9.0.1" + dependencies: + string-width: "npm:^7.2.0" + strip-ansi: "npm:^7.1.0" + wrap-ansi: "npm:^9.0.0" + checksum: 10c0/13441832e9efe7c7a76bd2b8e683555c478d461a9f249dc5db9b17fe8d4b47fa9277b503914b90bd00e4a151abb6b9b02b2288972ffe2e5e3ca40bcb1c2330d3 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"colorette@npm:^2.0.20": + version: 2.0.20 + resolution: "colorette@npm:2.0.20" + checksum: 10c0/e94116ff33b0ff56f3b83b9ace895e5bf87c2a7a47b3401b8c3f3226e050d5ef76cf4072fb3325f9dc24d1698f9b730baf4e05eeaf861d74a1883073f4c98a40 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + +"commander@npm:^14.0.0": + version: 14.0.3 + resolution: "commander@npm:14.0.3" + checksum: 10c0/755652564bbf56ff2ff083313912b326450d3f8d8c85f4b71416539c9a05c3c67dbd206821ca72635bf6b160e2afdefcb458e86b317827d5cb333b69ce7f1a24 + languageName: node + linkType: hard + +"common-path-prefix@npm:^3.0.0": + version: 3.0.0 + resolution: "common-path-prefix@npm:3.0.0" + checksum: 10c0/c4a74294e1b1570f4a8ab435285d185a03976c323caa16359053e749db4fde44e3e6586c29cd051100335e11895767cbbd27ea389108e327d62f38daf4548fdb + languageName: node + linkType: hard + +"concurrently@npm:^10.0.3": + version: 10.0.3 + resolution: "concurrently@npm:10.0.3" + dependencies: + chalk: "npm:5.6.2" + rxjs: "npm:7.8.2" + shell-quote: "npm:1.8.4" + supports-color: "npm:10.2.2" + tree-kill: "npm:1.2.2" + yargs: "npm:18.0.0" + bin: + conc: dist/bin/index.js + concurrently: dist/bin/index.js + checksum: 10c0/59a4d9a7946fdbfbfa380543e5e5a40eb5b993cde18862126e8c7fe117813ebd26d67aa67b64781543c0e357eb23fb551f303b622e439354398ff0d7d71735b6 + languageName: node + linkType: hard + +"content-disposition@npm:^1.0.0": + version: 1.1.0 + resolution: "content-disposition@npm:1.1.0" + checksum: 10c0/94e0aef65873e69330f5f187fbc44ebce593bdcb8013dd8a68b7d0f159ca089bd30db3f8095d829f81c341695b60a6085ee6e15e6d775c4a325b586cc8d91974 + languageName: node + linkType: hard + +"content-type@npm:^1.0.5": + version: 1.0.5 + resolution: "content-type@npm:1.0.5" + checksum: 10c0/b76ebed15c000aee4678c3707e0860cb6abd4e680a598c0a26e17f0bfae723ec9cc2802f0ff1bc6e4d80603719010431d2231018373d4dde10f9ccff9dadf5af + languageName: node + linkType: hard + +"content-type@npm:^2.0.0": + version: 2.0.0 + resolution: "content-type@npm:2.0.0" + checksum: 10c0/491539fff707d7594b0ca4fabcc084bef2a31ffa754ff0a4f80c4377e3963cff0394317f9271c24087596c97fa675bc123d61fa34ffe65b4904e7d3d3098de72 + languageName: node + linkType: hard + +"convert-source-map@npm:^1.5.1": + version: 1.9.0 + resolution: "convert-source-map@npm:1.9.0" + checksum: 10c0/281da55454bf8126cbc6625385928c43479f2060984180c42f3a86c8b8c12720a24eac260624a7d1e090004028d2dee78602330578ceec1a08e27cb8bb0a8a5b + languageName: node + linkType: hard + +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 10c0/8f2f7a27a1a011cc6cc88cc4da2d7d0cfa5ee0369508baae3d98c260bb3ac520691464e5bbe4ae7cdf09860c1d69ecc6f70c63c6e7c7f7e3f18ec08484dc7d9b + languageName: node + linkType: hard + +"cookie-signature@npm:^1.2.1": + version: 1.2.2 + resolution: "cookie-signature@npm:1.2.2" + checksum: 10c0/54e05df1a293b3ce81589b27dddc445f462f6fa6812147c033350cd3561a42bc14481674e05ed14c7bd0ce1e8bb3dc0e40851bad75415733711294ddce0b7bc6 + languageName: node + linkType: hard + +"cookie@npm:^0.7.1": + version: 0.7.2 + resolution: "cookie@npm:0.7.2" + checksum: 10c0/9596e8ccdbf1a3a88ae02cf5ee80c1c50959423e1022e4e60b91dd87c622af1da309253d8abdb258fb5e3eacb4f08e579dc58b4897b8087574eee0fd35dfa5d2 + languageName: node + linkType: hard + +"copy-anything@npm:^3.0.5": + version: 3.0.5 + resolution: "copy-anything@npm:3.0.5" + dependencies: + is-what: "npm:^4.1.8" + checksum: 10c0/01eadd500c7e1db71d32d95a3bfaaedcb839ef891c741f6305ab0461398056133de08f2d1bf4c392b364e7bdb7ce498513896e137a7a183ac2516b065c28a4fe + languageName: node + linkType: hard + +"cors@npm:^2.8.5": + version: 2.8.6 + resolution: "cors@npm:2.8.6" + dependencies: + object-assign: "npm:^4" + vary: "npm:^1" + checksum: 10c0/ab2bc57b8af8ef8476682a59647f7c55c1a7d406b559ac06119aa1c5f70b96d35036864d197b24cf86e228e4547231088f1f94ca05061dbb14d89cc0bc9d4cab + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.5, cross-spawn@npm:^7.0.6": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 + languageName: node + linkType: hard + +"css-select@npm:^6.0.0": + version: 6.0.0 + resolution: "css-select@npm:6.0.0" + dependencies: + boolbase: "npm:^1.0.0" + css-what: "npm:^7.0.0" + domhandler: "npm:^5.0.3" + domutils: "npm:^3.2.2" + nth-check: "npm:^2.1.1" + checksum: 10c0/2f63e954b8a9475f25ea3ff23d20c556a99e464113e7dff53711bc63e5b579f17ebc82fe49d6443aa65f656e25f97e2b32b9e8143181fe22758536730b6999ca + languageName: node + linkType: hard + +"css-what@npm:^7.0.0": + version: 7.0.0 + resolution: "css-what@npm:7.0.0" + checksum: 10c0/590329e773d8103dcc4f2aefa48d824d5b934b53baae7d8bcc3b61f0a917a0d6b6a1154d7319c6416421e7eb3b1c94704ec21924c485f4b174f0218416211fd9 + languageName: node + linkType: hard + +"data-uri-to-buffer@npm:^4.0.0": + version: 4.0.1 + resolution: "data-uri-to-buffer@npm:4.0.1" + checksum: 10c0/20a6b93107597530d71d4cb285acee17f66bcdfc03fd81040921a81252f19db27588d87fc8fc69e1950c55cfb0bf8ae40d0e5e21d907230813eb5d5a7f9eb45b + languageName: node + linkType: hard + +"date-fns@npm:^4.1.0": + version: 4.4.0 + resolution: "date-fns@npm:4.4.0" + checksum: 10c0/988f0a13db183f5dfc85c36bbb6847a9c135a9225888bbea4005876ec15539a8613c21a07370a4e7ea543918d5a1cafb423c528b42cdbbde5fdfddb178126b21 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.4.0, debug@npm:^4.4.3": + version: 4.4.3 + resolution: "debug@npm:4.4.3" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/d79136ec6c83ecbefd0f6a5593da6a9c91ec4d7ddc4b54c883d6e71ec9accb5f67a1a5e96d00a328196b5b5c86d365e98d8a3a70856aaf16b4e7b1985e67f5a6 + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 + languageName: node + linkType: hard + +"depd@npm:^2.0.0, depd@npm:~2.0.0": + version: 2.0.0 + resolution: "depd@npm:2.0.0" + checksum: 10c0/58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c + languageName: node + linkType: hard + +"dependency-graph@npm:^1.0.0": + version: 1.0.0 + resolution: "dependency-graph@npm:1.0.0" + checksum: 10c0/10d1e248ab68a33654335559bae5ec142c51959cbff1cba8b35cdccfdc12eb8d136227df85c31b71b9ee9fed1b2bfbd01721661b4f927e12d890d13c4230788f + languageName: node + linkType: hard + +"detect-libc@npm:^2.0.1, detect-libc@npm:^2.0.3": + version: 2.1.2 + resolution: "detect-libc@npm:2.1.2" + checksum: 10c0/acc675c29a5649fa1fb6e255f993b8ee829e510b6b56b0910666949c80c364738833417d0edb5f90e4e46be17228b0f2b66a010513984e18b15deeeac49369c4 + languageName: node + linkType: hard + +"dom-serializer@npm:^2.0.0": + version: 2.0.0 + resolution: "dom-serializer@npm:2.0.0" + dependencies: + domelementtype: "npm:^2.3.0" + domhandler: "npm:^5.0.2" + entities: "npm:^4.2.0" + checksum: 10c0/d5ae2b7110ca3746b3643d3ef60ef823f5f078667baf530cec096433f1627ec4b6fa8c072f09d079d7cda915fd2c7bc1b7b935681e9b09e591e1e15f4040b8e2 + languageName: node + linkType: hard + +"domelementtype@npm:^2.3.0": + version: 2.3.0 + resolution: "domelementtype@npm:2.3.0" + checksum: 10c0/686f5a9ef0fff078c1412c05db73a0dce096190036f33e400a07e2a4518e9f56b1e324f5c576a0a747ef0e75b5d985c040b0d51945ce780c0dd3c625a18cd8c9 + languageName: node + linkType: hard + +"domhandler@npm:^5.0.2, domhandler@npm:^5.0.3": + version: 5.0.3 + resolution: "domhandler@npm:5.0.3" + dependencies: + domelementtype: "npm:^2.3.0" + checksum: 10c0/bba1e5932b3e196ad6862286d76adc89a0dbf0c773e5ced1eb01f9af930c50093a084eff14b8de5ea60b895c56a04d5de8bbc4930c5543d029091916770b2d2a + languageName: node + linkType: hard + +"dompurify@npm:^3.3.1": + version: 3.4.10 + resolution: "dompurify@npm:3.4.10" + dependencies: + "@types/trusted-types": "npm:^2.0.7" + dependenciesMeta: + "@types/trusted-types": + optional: true + checksum: 10c0/6ffbc564c09ae11f9e1ab97040d556f8fafb0a5221248fca02539378d442f4fbe737ebb72dd34309c46896f1093714622895cc6815a7a57599c4511e30e234ae + languageName: node + linkType: hard + +"domutils@npm:^3.2.2": + version: 3.2.2 + resolution: "domutils@npm:3.2.2" + dependencies: + dom-serializer: "npm:^2.0.0" + domelementtype: "npm:^2.3.0" + domhandler: "npm:^5.0.3" + checksum: 10c0/47938f473b987ea71cd59e59626eb8666d3aa8feba5266e45527f3b636c7883cca7e582d901531961f742c519d7514636b7973353b648762b2e3bedbf235fada + languageName: node + linkType: hard + +"dotenv@npm:^17.4.2": + version: 17.4.2 + resolution: "dotenv@npm:17.4.2" + checksum: 10c0/164f8e77a646c8446867d5b588d26ea6005c8ea7c5eb41cf926f6113d23f2191355f6e0cfd95ea9bab98394a5b0a3f1e51a8399711b666fe55cc7b0bd745f942 + languageName: node + linkType: hard + +"dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.2.0" + checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 + languageName: node + linkType: hard + +"duplexify@npm:^4.1.3": + version: 4.1.3 + resolution: "duplexify@npm:4.1.3" + dependencies: + end-of-stream: "npm:^1.4.1" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.1.1" + stream-shift: "npm:^1.0.2" + checksum: 10c0/8a7621ae95c89f3937f982fe36d72ea997836a708471a75bb2a0eecde3330311b1e128a6dad510e0fd64ace0c56bff3484ed2e82af0e465600c82117eadfbda5 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + +"ecdsa-sig-formatter@npm:1.0.11, ecdsa-sig-formatter@npm:^1.0.11": + version: 1.0.11 + resolution: "ecdsa-sig-formatter@npm:1.0.11" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 10c0/ebfbf19d4b8be938f4dd4a83b8788385da353d63307ede301a9252f9f7f88672e76f2191618fd8edfc2f24679236064176fab0b78131b161ee73daa37125408c + languageName: node + linkType: hard + +"ee-first@npm:1.1.1": + version: 1.1.1 + resolution: "ee-first@npm:1.1.1" + checksum: 10c0/b5bb125ee93161bc16bfe6e56c6b04de5ad2aa44234d8f644813cc95d861a6910903132b05093706de2b706599367c4130eb6d170f6b46895686b95f87d017b7 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.5.328": + version: 1.5.372 + resolution: "electron-to-chromium@npm:1.5.372" + checksum: 10c0/2071da5329cde5f2eb6c01b181ee4b61c09f8da38609b6203155357427dd3b5489e9cdb0b7686b0be4b0633d5df5c86a96d588fc599be4fb7a65169270a8568b + languageName: node + linkType: hard + +"emoji-regex@npm:^10.3.0": + version: 10.6.0 + resolution: "emoji-regex@npm:10.6.0" + checksum: 10c0/1e4aa097bb007301c3b4b1913879ae27327fdc48e93eeefefe3b87e495eb33c5af155300be951b4349ff6ac084f4403dc9eff970acba7c1c572d89396a9a32d7 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + +"encodeurl@npm:^2.0.0": + version: 2.0.0 + resolution: "encodeurl@npm:2.0.0" + checksum: 10c0/5d317306acb13e6590e28e27924c754163946a2480de11865c991a3a7eed4315cd3fba378b543ca145829569eefe9b899f3d84bb09870f675ae60bc924b01ceb + languageName: node + linkType: hard + +"end-of-stream@npm:^1.4.1": + version: 1.4.5 + resolution: "end-of-stream@npm:1.4.5" + dependencies: + once: "npm:^1.4.0" + checksum: 10c0/b0701c92a10b89afb1cb45bf54a5292c6f008d744eb4382fa559d54775ff31617d1d7bc3ef617575f552e24fad2c7c1a1835948c66b3f3a4be0a6c1f35c883d8 + languageName: node + linkType: hard + +"entities@npm:^4.2.0, entities@npm:^4.4.0": + version: 4.5.0 + resolution: "entities@npm:4.5.0" + checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250 + languageName: node + linkType: hard + +"entities@npm:^6.0.0": + version: 6.0.1 + resolution: "entities@npm:6.0.1" + checksum: 10c0/ed836ddac5acb34341094eb495185d527bd70e8632b6c0d59548cbfa23defdbae70b96f9a405c82904efa421230b5b3fd2283752447d737beffd3f3e6ee74414 + languageName: node + linkType: hard + +"entities@npm:^7.0.1": + version: 7.0.1 + resolution: "entities@npm:7.0.1" + checksum: 10c0/b4fb9937bb47ecb00aaaceb9db9cdd1cc0b0fb649c0e843d05cf5dbbd2e9d2df8f98721d8b1b286445689c72af7b54a7242fc2d63ef7c9739037a8c73363e7ca + languageName: node + linkType: hard + +"entities@npm:^8.0.0": + version: 8.0.0 + resolution: "entities@npm:8.0.0" + checksum: 10c0/938e631664c19451823344a351aeeafd74fae2d5fa51e4d5b6ff635afaefd4bacf0f609989888c04c42733f46ffdac15211608267ebb02488005891a4793e94d + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"environment@npm:^1.0.0": + version: 1.1.0 + resolution: "environment@npm:1.1.0" + checksum: 10c0/fb26434b0b581ab397039e51ff3c92b34924a98b2039dcb47e41b7bca577b9dbf134a8eadb364415c74464b682e2d3afe1a4c0eb9873dc44ea814c5d3103331d + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + +"errno@npm:^0.1.1": + version: 0.1.8 + resolution: "errno@npm:0.1.8" + dependencies: + prr: "npm:~1.0.1" + bin: + errno: cli.js + checksum: 10c0/83758951967ec57bf00b5f5b7dc797e6d65a6171e57ea57adcf1bd1a0b477fd9b5b35fae5be1ff18f4090ed156bce1db749fe7e317aac19d485a5d150f6a4936 + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": + version: 1.1.2 + resolution: "es-object-atoms@npm:1.1.2" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 10c0/1772861f094f739d6f41b579cfb9a18579daffeb434552a370a5fbef50a32d22227e27b63fdbb757b7ddd429d1b42fe52ccae7966d9302a2ec221b6f1b41bbc4 + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.1.0": + version: 2.1.0 + resolution: "es-set-tostringtag@npm:2.1.0" + dependencies: + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af + languageName: node + linkType: hard + +"es-toolkit@npm:^1.39.7": + version: 1.47.1 + resolution: "es-toolkit@npm:1.47.1" + dependenciesMeta: + "@trivago/prettier-plugin-sort-imports@4.3.0": + unplugged: true + prettier-plugin-sort-re-exports@0.0.1: + unplugged: true + vitepress-plugin-sandpack@1.1.4: + unplugged: true + checksum: 10c0/d6dff140a71e15d22209f8482f1ce34bab433f449e569c28b9c535963b18b2c3b89b00d7cf7156b5c74cace4c5f96283f0a5fee3be8802dd2cf7481da90cfe0a + languageName: node + linkType: hard + +"esbuild@npm:0.27.3": + version: 0.27.3 + resolution: "esbuild@npm:0.27.3" + dependencies: + "@esbuild/aix-ppc64": "npm:0.27.3" + "@esbuild/android-arm": "npm:0.27.3" + "@esbuild/android-arm64": "npm:0.27.3" + "@esbuild/android-x64": "npm:0.27.3" + "@esbuild/darwin-arm64": "npm:0.27.3" + "@esbuild/darwin-x64": "npm:0.27.3" + "@esbuild/freebsd-arm64": "npm:0.27.3" + "@esbuild/freebsd-x64": "npm:0.27.3" + "@esbuild/linux-arm": "npm:0.27.3" + "@esbuild/linux-arm64": "npm:0.27.3" + "@esbuild/linux-ia32": "npm:0.27.3" + "@esbuild/linux-loong64": "npm:0.27.3" + "@esbuild/linux-mips64el": "npm:0.27.3" + "@esbuild/linux-ppc64": "npm:0.27.3" + "@esbuild/linux-riscv64": "npm:0.27.3" + "@esbuild/linux-s390x": "npm:0.27.3" + "@esbuild/linux-x64": "npm:0.27.3" + "@esbuild/netbsd-arm64": "npm:0.27.3" + "@esbuild/netbsd-x64": "npm:0.27.3" + "@esbuild/openbsd-arm64": "npm:0.27.3" + "@esbuild/openbsd-x64": "npm:0.27.3" + "@esbuild/openharmony-arm64": "npm:0.27.3" + "@esbuild/sunos-x64": "npm:0.27.3" + "@esbuild/win32-arm64": "npm:0.27.3" + "@esbuild/win32-ia32": "npm:0.27.3" + "@esbuild/win32-x64": "npm:0.27.3" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/openharmony-arm64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/fdc3f87a3f08b3ef98362f37377136c389a0d180fda4b8d073b26ba930cf245521db0a368f119cc7624bc619248fff1439f5811f062d853576f8ffa3df8ee5f1 + languageName: node + linkType: hard + +"esbuild@npm:^0.27.0": + version: 0.27.7 + resolution: "esbuild@npm:0.27.7" + dependencies: + "@esbuild/aix-ppc64": "npm:0.27.7" + "@esbuild/android-arm": "npm:0.27.7" + "@esbuild/android-arm64": "npm:0.27.7" + "@esbuild/android-x64": "npm:0.27.7" + "@esbuild/darwin-arm64": "npm:0.27.7" + "@esbuild/darwin-x64": "npm:0.27.7" + "@esbuild/freebsd-arm64": "npm:0.27.7" + "@esbuild/freebsd-x64": "npm:0.27.7" + "@esbuild/linux-arm": "npm:0.27.7" + "@esbuild/linux-arm64": "npm:0.27.7" + "@esbuild/linux-ia32": "npm:0.27.7" + "@esbuild/linux-loong64": "npm:0.27.7" + "@esbuild/linux-mips64el": "npm:0.27.7" + "@esbuild/linux-ppc64": "npm:0.27.7" + "@esbuild/linux-riscv64": "npm:0.27.7" + "@esbuild/linux-s390x": "npm:0.27.7" + "@esbuild/linux-x64": "npm:0.27.7" + "@esbuild/netbsd-arm64": "npm:0.27.7" + "@esbuild/netbsd-x64": "npm:0.27.7" + "@esbuild/openbsd-arm64": "npm:0.27.7" + "@esbuild/openbsd-x64": "npm:0.27.7" + "@esbuild/openharmony-arm64": "npm:0.27.7" + "@esbuild/sunos-x64": "npm:0.27.7" + "@esbuild/win32-arm64": "npm:0.27.7" + "@esbuild/win32-ia32": "npm:0.27.7" + "@esbuild/win32-x64": "npm:0.27.7" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/openharmony-arm64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/ccd51f0555708bc9ff4ec9dc3ac92d3daacd45ecaac949ca8645984c5c323bf8cefe98c2df307418685e0b4ce37f9a3bdbfe8e3651fe632a0059a436195a17d4 + languageName: node + linkType: hard + +"esbuild@npm:^0.28.0, esbuild@npm:~0.28.0": + version: 0.28.1 + resolution: "esbuild@npm:0.28.1" + dependencies: + "@esbuild/aix-ppc64": "npm:0.28.1" + "@esbuild/android-arm": "npm:0.28.1" + "@esbuild/android-arm64": "npm:0.28.1" + "@esbuild/android-x64": "npm:0.28.1" + "@esbuild/darwin-arm64": "npm:0.28.1" + "@esbuild/darwin-x64": "npm:0.28.1" + "@esbuild/freebsd-arm64": "npm:0.28.1" + "@esbuild/freebsd-x64": "npm:0.28.1" + "@esbuild/linux-arm": "npm:0.28.1" + "@esbuild/linux-arm64": "npm:0.28.1" + "@esbuild/linux-ia32": "npm:0.28.1" + "@esbuild/linux-loong64": "npm:0.28.1" + "@esbuild/linux-mips64el": "npm:0.28.1" + "@esbuild/linux-ppc64": "npm:0.28.1" + "@esbuild/linux-riscv64": "npm:0.28.1" + "@esbuild/linux-s390x": "npm:0.28.1" + "@esbuild/linux-x64": "npm:0.28.1" + "@esbuild/netbsd-arm64": "npm:0.28.1" + "@esbuild/netbsd-x64": "npm:0.28.1" + "@esbuild/openbsd-arm64": "npm:0.28.1" + "@esbuild/openbsd-x64": "npm:0.28.1" + "@esbuild/openharmony-arm64": "npm:0.28.1" + "@esbuild/sunos-x64": "npm:0.28.1" + "@esbuild/win32-arm64": "npm:0.28.1" + "@esbuild/win32-ia32": "npm:0.28.1" + "@esbuild/win32-x64": "npm:0.28.1" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/openharmony-arm64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/29cd456a79ce35ac2c7e05fe871330416b2c395c045d849653f843e51378d6e0d6e774d6dcd01b35f4e83238a29bf8decd04fcd34b3780c589a250b21e5f92bb + languageName: node + linkType: hard + +"escalade@npm:^3.1.1, escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 + languageName: node + linkType: hard + +"escape-html@npm:^1.0.3": + version: 1.0.3 + resolution: "escape-html@npm:1.0.3" + checksum: 10c0/524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 + languageName: node + linkType: hard + +"eslint-scope@npm:^9.1.2": + version: 9.1.2 + resolution: "eslint-scope@npm:9.1.2" + dependencies: + "@types/esrecurse": "npm:^4.3.1" + "@types/estree": "npm:^1.0.8" + esrecurse: "npm:^4.3.0" + estraverse: "npm:^5.2.0" + checksum: 10c0/9fb8bca5a73e5741efb6cec84467027b6cb6f4203ff9b43a938e272c5cd30800bde46a5c20dfd1609f840225f0b62b7673be391b20acadf8658ca9fa4729b3dd + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^5.0.1": + version: 5.0.1 + resolution: "eslint-visitor-keys@npm:5.0.1" + checksum: 10c0/16190bdf2cbae40a1109384c94450c526a79b0b9c3cb21e544256ed85ac48a4b84db66b74a6561d20fe6ab77447f150d711c2ad5ad74df4fcc133736bce99678 + languageName: node + linkType: hard + +"eslint@npm:^10.4.1": + version: 10.5.0 + resolution: "eslint@npm:10.5.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.8.0" + "@eslint-community/regexpp": "npm:^4.12.2" + "@eslint/config-array": "npm:^0.23.5" + "@eslint/config-helpers": "npm:^0.6.0" + "@eslint/core": "npm:^1.2.1" + "@eslint/plugin-kit": "npm:^0.7.2" + "@humanfs/node": "npm:^0.16.6" + "@humanwhocodes/module-importer": "npm:^1.0.1" + "@humanwhocodes/retry": "npm:^0.4.2" + "@types/estree": "npm:^1.0.6" + ajv: "npm:^6.14.0" + cross-spawn: "npm:^7.0.6" + debug: "npm:^4.3.2" + escape-string-regexp: "npm:^4.0.0" + eslint-scope: "npm:^9.1.2" + eslint-visitor-keys: "npm:^5.0.1" + espree: "npm:^11.2.0" + esquery: "npm:^1.7.0" + esutils: "npm:^2.0.2" + fast-deep-equal: "npm:^3.1.3" + file-entry-cache: "npm:^8.0.0" + find-up: "npm:^5.0.0" + glob-parent: "npm:^6.0.2" + ignore: "npm:^5.2.0" + imurmurhash: "npm:^0.1.4" + is-glob: "npm:^4.0.0" + json-stable-stringify-without-jsonify: "npm:^1.0.1" + minimatch: "npm:^10.2.4" + natural-compare: "npm:^1.4.0" + optionator: "npm:^0.9.3" + peerDependencies: + jiti: "*" + peerDependenciesMeta: + jiti: + optional: true + bin: + eslint: bin/eslint.js + checksum: 10c0/e1f7a1d442027e5478945cb07b6a382adc3f149fbfd3dbc14951a7a9fa312546b27fb35b0556897ca1d04539ad16ee85bda75ad9f724873e1153d1fbca0d6145 + languageName: node + linkType: hard + +"espree@npm:^11.2.0": + version: 11.2.0 + resolution: "espree@npm:11.2.0" + dependencies: + acorn: "npm:^8.16.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^5.0.1" + checksum: 10c0/cf87e18ffd9dc113eb8d16588e7757701bc10c9934a71cce8b89c2611d51672681a918307bd6b19ac3ccd0e7ba1cbccc2f815b36b52fa7e73097b251014c3d81 + languageName: node + linkType: hard + +"esquery@npm:^1.7.0": + version: 1.7.0 + resolution: "esquery@npm:1.7.0" + dependencies: + estraverse: "npm:^5.1.0" + checksum: 10c0/77d5173db450b66f3bc685d11af4c90cffeedb340f34a39af96d43509a335ce39c894fd79233df32d38f5e4e219fa0f7076f6ec90bae8320170ba082c0db4793 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + +"estree-walker@npm:^2.0.2": + version: 2.0.2 + resolution: "estree-walker@npm:2.0.2" + checksum: 10c0/53a6c54e2019b8c914dc395890153ffdc2322781acf4bd7d1a32d7aedc1710807bdcd866ac133903d5629ec601fbb50abe8c2e5553c7f5a0afdd9b6af6c945af + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 + languageName: node + linkType: hard + +"etag@npm:^1.8.1": + version: 1.8.1 + resolution: "etag@npm:1.8.1" + checksum: 10c0/12be11ef62fb9817314d790089a0a49fae4e1b50594135dcb8076312b7d7e470884b5100d249b28c18581b7fd52f8b485689ffae22a11ed9ec17377a33a08f84 + languageName: node + linkType: hard + +"event-target-shim@npm:^5.0.0": + version: 5.0.1 + resolution: "event-target-shim@npm:5.0.1" + checksum: 10c0/0255d9f936215fd206156fd4caa9e8d35e62075d720dc7d847e89b417e5e62cf1ce6c9b4e0a1633a9256de0efefaf9f8d26924b1f3c8620cffb9db78e7d3076b + languageName: node + linkType: hard + +"eventemitter3@npm:^5.0.1": + version: 5.0.4 + resolution: "eventemitter3@npm:5.0.4" + checksum: 10c0/575b8cac8d709e1473da46f8f15ef311b57ff7609445a7c71af5cd42598583eee6f098fa7a593e30f27e94b8865642baa0689e8fa97c016f742abdb3b1bf6d9a + languageName: node + linkType: hard + +"eventsource-parser@npm:^3.0.0, eventsource-parser@npm:^3.0.1": + version: 3.1.0 + resolution: "eventsource-parser@npm:3.1.0" + checksum: 10c0/5ab4c6c9a2a042be0b387b6d03810eb580bac4ce90e299ede56458125a97ffe3af8145b2740089fc898a96cfa5aae792ee79f2a06257fba2776b0e7bce037071 + languageName: node + linkType: hard + +"eventsource@npm:^3.0.2": + version: 3.0.7 + resolution: "eventsource@npm:3.0.7" + dependencies: + eventsource-parser: "npm:^3.0.1" + checksum: 10c0/c48a73c38f300e33e9f11375d4ee969f25cbb0519608a12378a38068055ae8b55b6e0e8a49c3f91c784068434efe1d9f01eb49b6315b04b0da9157879ce2f67d + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.3 + resolution: "exponential-backoff@npm:3.1.3" + checksum: 10c0/77e3ae682b7b1f4972f563c6dbcd2b0d54ac679e62d5d32f3e5085feba20483cf28bd505543f520e287a56d4d55a28d7874299941faf637e779a1aa5994d1267 + languageName: node + linkType: hard + +"express-rate-limit@npm:^8.2.1": + version: 8.5.2 + resolution: "express-rate-limit@npm:8.5.2" + dependencies: + ip-address: "npm:^10.2.0" + peerDependencies: + express: ">= 4.11" + checksum: 10c0/c98c49b93e94627940cf5e7c2578718b94d77163357161c3343d148e46257136c988933a96d6e1e728a010683133a58f68cad46928b063cf8d99521c8772578d + languageName: node + linkType: hard + +"express@npm:^5.2.1": + version: 5.2.1 + resolution: "express@npm:5.2.1" + dependencies: + accepts: "npm:^2.0.0" + body-parser: "npm:^2.2.1" + content-disposition: "npm:^1.0.0" + content-type: "npm:^1.0.5" + cookie: "npm:^0.7.1" + cookie-signature: "npm:^1.2.1" + debug: "npm:^4.4.0" + depd: "npm:^2.0.0" + encodeurl: "npm:^2.0.0" + escape-html: "npm:^1.0.3" + etag: "npm:^1.8.1" + finalhandler: "npm:^2.1.0" + fresh: "npm:^2.0.0" + http-errors: "npm:^2.0.0" + merge-descriptors: "npm:^2.0.0" + mime-types: "npm:^3.0.0" + on-finished: "npm:^2.4.1" + once: "npm:^1.4.0" + parseurl: "npm:^1.3.3" + proxy-addr: "npm:^2.0.7" + qs: "npm:^6.14.0" + range-parser: "npm:^1.2.1" + router: "npm:^2.2.0" + send: "npm:^1.1.0" + serve-static: "npm:^2.2.0" + statuses: "npm:^2.0.1" + type-is: "npm:^2.0.1" + vary: "npm:^1.1.2" + checksum: 10c0/45e8c841ad188a41402ddcd1294901e861ee0819f632fb494f2ed344ef9c43315d294d443fb48d594e6586a3b779785120f43321417adaef8567316a55072949 + languageName: node + linkType: hard + +"extend@npm:^3.0.2": + version: 3.0.2 + resolution: "extend@npm:3.0.2" + checksum: 10c0/73bf6e27406e80aa3e85b0d1c4fd987261e628064e170ca781125c0b635a3dabad5e05adbf07595ea0cf1e6c5396cacb214af933da7cbaf24fe75ff14818e8f9 + languageName: node + linkType: hard + +"farmhash-modern@npm:^1.1.0": + version: 1.1.0 + resolution: "farmhash-modern@npm:1.1.0" + checksum: 10c0/eca8a1e40e5ca78395d585298f813f8e33ef884624795969ac708d7b855ab9a7e543d31fc14ba715bc7aa302d464e1db6ddc38e6c87816ed8f5a75db482d7071 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.11": + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.8" + checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 + languageName: node + linkType: hard + +"fast-uri@npm:^3.0.1": + version: 3.1.2 + resolution: "fast-uri@npm:3.1.2" + checksum: 10c0/5b35641895959f3f7ab7a7b1b5542bded159346f25ec9f256817b206d50b64eda5828e90d605a2e2fc645c90519a7259c2bab2c942ee728c88b88e5be21b090d + languageName: node + linkType: hard + +"fast-xml-builder@npm:^1.2.0": + version: 1.2.0 + resolution: "fast-xml-builder@npm:1.2.0" + dependencies: + path-expression-matcher: "npm:^1.5.0" + xml-naming: "npm:^0.1.0" + checksum: 10c0/84bb105cd04e91d6dcb746c4dbaeb12903b510e7ab9a06ffde55b5a582e005559a87d84467f18a655c6c4baf098f696fd74cee3cbe1aea9d01385907768ba32d + languageName: node + linkType: hard + +"fast-xml-parser@npm:^5.3.4": + version: 5.8.0 + resolution: "fast-xml-parser@npm:5.8.0" + dependencies: + "@nodable/entities": "npm:^2.1.0" + fast-xml-builder: "npm:^1.2.0" + path-expression-matcher: "npm:^1.5.0" + strnum: "npm:^2.3.0" + xml-naming: "npm:^0.1.0" + bin: + fxparser: src/cli/cli.js + checksum: 10c0/cd0828b7daf3f683c64d0d6a0c719f1476d4f02f1089cf345a9bc0b886e7d5fa18c11da025d480ea67a41765be63135cbd952051942c9d0b422a5d4dde11814e + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.20.1 + resolution: "fastq@npm:1.20.1" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/e5dd725884decb1f11e5c822221d76136f239d0236f176fab80b7b8f9e7619ae57e6b4e5b73defc21e6b9ef99437ee7b545cff8e6c2c337819633712fa9d352e + languageName: node + linkType: hard + +"faye-websocket@npm:0.11.4": + version: 0.11.4 + resolution: "faye-websocket@npm:0.11.4" + dependencies: + websocket-driver: "npm:>=0.5.1" + checksum: 10c0/c6052a0bb322778ce9f89af92890f6f4ce00d5ec92418a35e5f4c6864a4fe736fec0bcebd47eac7c0f0e979b01530746b1c85c83cb04bae789271abf19737420 + languageName: node + linkType: hard + +"fdir@npm:^6.5.0": + version: 6.5.0 + resolution: "fdir@npm:6.5.0" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 10c0/e345083c4306b3aed6cb8ec551e26c36bab5c511e99ea4576a16750ddc8d3240e63826cc624f5ae17ad4dc82e68a253213b60d556c11bfad064b7607847ed07f + languageName: node + linkType: hard + +"fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4": + version: 3.2.0 + resolution: "fetch-blob@npm:3.2.0" + dependencies: + node-domexception: "npm:^1.0.0" + web-streams-polyfill: "npm:^3.0.3" + checksum: 10c0/60054bf47bfa10fb0ba6cb7742acec2f37c1f56344f79a70bb8b1c48d77675927c720ff3191fa546410a0442c998d27ab05e9144c32d530d8a52fbe68f843b69 + languageName: node + linkType: hard + +"file-entry-cache@npm:^8.0.0": + version: 8.0.0 + resolution: "file-entry-cache@npm:8.0.0" + dependencies: + flat-cache: "npm:^4.0.0" + checksum: 10c0/9e2b5938b1cd9b6d7e3612bdc533afd4ac17b2fc646569e9a8abbf2eb48e5eb8e316bc38815a3ef6a1b456f4107f0d0f055a614ca613e75db6bf9ff4d72c1638 + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + languageName: node + linkType: hard + +"finalhandler@npm:^2.1.0": + version: 2.1.1 + resolution: "finalhandler@npm:2.1.1" + dependencies: + debug: "npm:^4.4.0" + encodeurl: "npm:^2.0.0" + escape-html: "npm:^1.0.3" + on-finished: "npm:^2.4.1" + parseurl: "npm:^1.3.3" + statuses: "npm:^2.0.1" + checksum: 10c0/6bd664e21b7b2e79efcaace7d1a427169f61cce048fae68eb56290e6934e676b78e55d89f5998c5508871345bc59a61f47002dc505dc7288be68cceac1b701e2 + languageName: node + linkType: hard + +"find-cache-directory@npm:^6.0.0": + version: 6.0.0 + resolution: "find-cache-directory@npm:6.0.0" + dependencies: + common-path-prefix: "npm:^3.0.0" + pkg-dir: "npm:^8.0.0" + checksum: 10c0/a4ac657f63bc3aac120f71d90dde0fe471b80d8d7572f2cd2c38499a27f30d87526b4590d217fb3732f5bf4a2d11e15d85e39ea12965731824e3e4da0e01b246 + languageName: node + linkType: hard + +"find-up-simple@npm:^1.0.0": + version: 1.0.1 + resolution: "find-up-simple@npm:1.0.1" + checksum: 10c0/ad34de157b7db925d50ff78302fefb28e309f3bc947c93ffca0f9b0bccf9cf1a2dc57d805d5c94ec9fc60f4838f5dbdfd2a48ecd77c23015fa44c6dd5f60bc40 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: "npm:^6.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a + languageName: node + linkType: hard + +"firebase-admin@npm:^14.0.0": + version: 14.0.0 + resolution: "firebase-admin@npm:14.0.0" + dependencies: + "@fastify/busboy": "npm:^3.0.0" + "@firebase/database-compat": "npm:^2.1.4" + "@firebase/database-types": "npm:^1.0.20" + "@google-cloud/firestore": "npm:^8.6.0" + "@google-cloud/storage": "npm:^7.19.0" + farmhash-modern: "npm:^1.1.0" + fast-deep-equal: "npm:^3.1.1" + google-auth-library: "npm:^10.6.2" + jsonwebtoken: "npm:^9.0.0" + jwks-rsa: "npm:^4.0.1" + dependenciesMeta: + "@google-cloud/firestore": + optional: true + "@google-cloud/storage": + optional: true + checksum: 10c0/46588d9d107779c1ca06b6fc99c77265ea2e20cb9975128c4f1ad627d860d13d88afb4fb8c10a47482643f43d287db4e59e5d36a91a26dc070c14e59c0ac8094 + languageName: node + linkType: hard + +"firebase@npm:^12.14.0": + version: 12.14.0 + resolution: "firebase@npm:12.14.0" + dependencies: + "@firebase/ai": "npm:2.13.0" + "@firebase/analytics": "npm:0.10.22" + "@firebase/analytics-compat": "npm:0.2.28" + "@firebase/app": "npm:0.14.13" + "@firebase/app-check": "npm:0.11.4" + "@firebase/app-check-compat": "npm:0.4.4" + "@firebase/app-compat": "npm:0.5.13" + "@firebase/app-types": "npm:0.9.5" + "@firebase/auth": "npm:1.13.2" + "@firebase/auth-compat": "npm:0.6.7" + "@firebase/data-connect": "npm:0.7.1" + "@firebase/database": "npm:1.1.3" + "@firebase/database-compat": "npm:2.1.4" + "@firebase/firestore": "npm:4.15.0" + "@firebase/firestore-compat": "npm:0.4.10" + "@firebase/functions": "npm:0.13.5" + "@firebase/functions-compat": "npm:0.4.5" + "@firebase/installations": "npm:0.6.22" + "@firebase/installations-compat": "npm:0.2.22" + "@firebase/messaging": "npm:0.13.0" + "@firebase/messaging-compat": "npm:0.2.27" + "@firebase/performance": "npm:0.7.12" + "@firebase/performance-compat": "npm:0.2.25" + "@firebase/remote-config": "npm:0.8.4" + "@firebase/remote-config-compat": "npm:0.2.25" + "@firebase/storage": "npm:0.14.3" + "@firebase/storage-compat": "npm:0.4.3" + "@firebase/util": "npm:1.15.1" + checksum: 10c0/7e82d1d6cbe72debd0c7511436d2fb4e6e5157631167a4117fa82a2795c154e97dbea184b88379da051d6b626a69bb7da091968dd43429a3768eaeb958b4ef30 + languageName: node + linkType: hard + +"flat-cache@npm:^4.0.0": + version: 4.0.1 + resolution: "flat-cache@npm:4.0.1" + dependencies: + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.4" + checksum: 10c0/2c59d93e9faa2523e4fda6b4ada749bed432cfa28c8e251f33b25795e426a1c6dbada777afb1f74fcfff33934fdbdea921ee738fcc33e71adc9d6eca984a1cfc + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.4.2 + resolution: "flatted@npm:3.4.2" + checksum: 10c0/a65b67aae7172d6cdf63691be7de6c5cd5adbdfdfe2e9da1a09b617c9512ed794037741ee53d93114276bff3f93cd3b0d97d54f9b316e1e4885dde6e9ffdf7ed + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.3.1 + resolution: "foreground-child@npm:3.3.1" + dependencies: + cross-spawn: "npm:^7.0.6" + signal-exit: "npm:^4.0.1" + checksum: 10c0/8986e4af2430896e65bc2788d6679067294d6aee9545daefc84923a0a4b399ad9c7a3ea7bd8c0b2b80fdf4a92de4c69df3f628233ff3224260e9c1541a9e9ed3 + languageName: node + linkType: hard + +"form-data@npm:^2.5.5": + version: 2.5.6 + resolution: "form-data@npm:2.5.6" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + es-set-tostringtag: "npm:^2.1.0" + hasown: "npm:^2.0.4" + mime-types: "npm:^2.1.35" + safe-buffer: "npm:^5.2.1" + checksum: 10c0/de6b085a2b0d013299ccc888b677dbdb3d2a54ef8d74982bda9ad7d928f57440abae1bc736a5b85ea01077cfb6c72e9a7752dc786304271c03bd0013ef8f08cb + languageName: node + linkType: hard + +"formdata-polyfill@npm:^4.0.10": + version: 4.0.10 + resolution: "formdata-polyfill@npm:4.0.10" + dependencies: + fetch-blob: "npm:^3.1.2" + checksum: 10c0/5392ec484f9ce0d5e0d52fb5a78e7486637d516179b0eb84d81389d7eccf9ca2f663079da56f761355c0a65792810e3b345dc24db9a8bbbcf24ef3c8c88570c6 + languageName: node + linkType: hard + +"forwarded@npm:0.2.0": + version: 0.2.0 + resolution: "forwarded@npm:0.2.0" + checksum: 10c0/9b67c3fac86acdbc9ae47ba1ddd5f2f81526fa4c8226863ede5600a3f7c7416ef451f6f1e240a3cc32d0fd79fcfe6beb08fd0da454f360032bde70bf80afbb33 + languageName: node + linkType: hard + +"fresh@npm:^2.0.0": + version: 2.0.0 + resolution: "fresh@npm:2.0.0" + checksum: 10c0/0557548194cb9a809a435bf92bcfbc20c89e8b5eb38861b73ced36750437251e39a111fc3a18b98531be9dd91fe1411e4969f229dc579ec0251ce6c5d4900bbc + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 + languageName: node + linkType: hard + +"functional-red-black-tree@npm:^1.0.1": + version: 1.0.1 + resolution: "functional-red-black-tree@npm:1.0.1" + checksum: 10c0/5959eed0375803d9924f47688479bb017e0c6816a0e5ac151e22ba6bfe1d12c41de2f339188885e0aa8eeea2072dad509d8e4448467e816bde0a2ca86a0670d3 + languageName: node + linkType: hard + +"gaxios@npm:7.1.3": + version: 7.1.3 + resolution: "gaxios@npm:7.1.3" + dependencies: + extend: "npm:^3.0.2" + https-proxy-agent: "npm:^7.0.1" + node-fetch: "npm:^3.3.2" + rimraf: "npm:^5.0.1" + checksum: 10c0/a4a1cdf9a392c0c22e9734a40dca5a77a2903f505b939a50f1e68e312458b1289b7993d2f72d011426e89657cae77a3aa9fc62fb140e8ba90a1faa31fdbde4d2 + languageName: node + linkType: hard + +"gaxios@npm:^6.0.0, gaxios@npm:^6.0.2, gaxios@npm:^6.1.1": + version: 6.7.1 + resolution: "gaxios@npm:6.7.1" + dependencies: + extend: "npm:^3.0.2" + https-proxy-agent: "npm:^7.0.1" + is-stream: "npm:^2.0.0" + node-fetch: "npm:^2.6.9" + uuid: "npm:^9.0.1" + checksum: 10c0/53e92088470661c5bc493a1de29d05aff58b1f0009ec5e7903f730f892c3642a93e264e61904383741ccbab1ce6e519f12a985bba91e13527678b32ee6d7d3fd + languageName: node + linkType: hard + +"gaxios@npm:^7.0.0, gaxios@npm:^7.1.4": + version: 7.1.5 + resolution: "gaxios@npm:7.1.5" + dependencies: + extend: "npm:^3.0.2" + https-proxy-agent: "npm:^7.0.1" + node-fetch: "npm:^3.3.2" + checksum: 10c0/a3d12a9d2b781c548b40b4f2d7792281d091b63ffdd92713301a6e55bc9072fe7c1c54fa014416ca1fcdba40c171389bd409d0e3e326f4ae5ae60b25ae8ea540 + languageName: node + linkType: hard + +"gcp-metadata@npm:8.1.2": + version: 8.1.2 + resolution: "gcp-metadata@npm:8.1.2" + dependencies: + gaxios: "npm:^7.0.0" + google-logging-utils: "npm:^1.0.0" + json-bigint: "npm:^1.0.0" + checksum: 10c0/15a61231a9410dc11c2828d2c9fdc8b0a939f1af746195c44edc6f2ffea0acab52cef3a7b9828069a36fd5d68bda730f7328a415fe42a01258f6e249dfba6908 + languageName: node + linkType: hard + +"gcp-metadata@npm:^6.1.0": + version: 6.1.1 + resolution: "gcp-metadata@npm:6.1.1" + dependencies: + gaxios: "npm:^6.1.1" + google-logging-utils: "npm:^0.0.2" + json-bigint: "npm:^1.0.0" + checksum: 10c0/71f6ad4800aa622c246ceec3955014c0c78cdcfe025971f9558b9379f4019f5e65772763428ee8c3244fa81b8631977316eaa71a823493f82e5c44d7259ffac8 + languageName: node + linkType: hard + +"gcp-metadata@npm:^8.0.0": + version: 8.1.3 + resolution: "gcp-metadata@npm:8.1.3" + dependencies: + gaxios: "npm:7.1.3" + google-logging-utils: "npm:1.1.3" + json-bigint: "npm:^1.0.0" + checksum: 10c0/42a4f8a42084f66136891a256a7acc89eefcb07ec55509b39f3f99ecf1fed9ed8216bb1990722192eaea2bbf3f96e23631a81d68cc166c5bac90a540fbf892c8 + languageName: node + linkType: hard + +"generator-function@npm:^2.0.0": + version: 2.0.1 + resolution: "generator-function@npm:2.0.1" + checksum: 10c0/8a9f59df0f01cfefafdb3b451b80555e5cf6d76487095db91ac461a0e682e4ff7a9dbce15f4ecec191e53586d59eece01949e05a4b4492879600bbbe8e28d6b8 + languageName: node + linkType: hard + +"gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: 10c0/782aba6cba65b1bb5af3b095d96249d20edbe8df32dbf4696fd49be2583faf676173bf4809386588828e4dd76a3354fcbeb577bab1c833ccd9fc4577f26103f8 + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde + languageName: node + linkType: hard + +"get-east-asian-width@npm:^1.0.0, get-east-asian-width@npm:^1.3.1, get-east-asian-width@npm:^1.5.0": + version: 1.6.0 + resolution: "get-east-asian-width@npm:1.6.0" + checksum: 10c0/7e72e9550fd49ca5b246f9af6bb2afc129c96412845ff6556b3274fd44817a381702ca17028efe9866b261a3d44254cbf21e6c90cf05b4b61675630af776d431 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.3.0": + version: 1.3.1 + resolution: "get-intrinsic@npm:1.3.1" + dependencies: + async-function: "npm:^1.0.0" + async-generator-function: "npm:^1.0.0" + call-bind-apply-helpers: "npm:^1.0.2" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.1.1" + function-bind: "npm:^1.1.2" + generator-function: "npm:^2.0.0" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + math-intrinsics: "npm:^1.1.0" + checksum: 10c0/9f4ab0cf7efe0fd2c8185f52e6f637e708f3a112610c88869f8f041bb9ecc2ce44bf285dfdbdc6f4f7c277a5b88d8e94a432374d97cca22f3de7fc63795deb5d + languageName: node + linkType: hard + +"get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: "npm:^1.0.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: "npm:^4.0.3" + checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 + languageName: node + linkType: hard + +"glob-to-regexp@npm:^0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: 10c0/0486925072d7a916f052842772b61c3e86247f0a80cc0deb9b5a3e8a1a9faad5b04fb6f58986a09f34d3e96cd2a22a24b7e9882fb1cf904c31e9a310de96c429 + languageName: node + linkType: hard + +"glob@npm:^10.3.7": + version: 10.5.0 + resolution: "glob@npm:10.5.0" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/100705eddbde6323e7b35e1d1ac28bcb58322095bd8e63a7d0bef1a2cdafe0d0f7922a981b2b48369a4f8c1b077be5c171804534c3509dfe950dde15fbe6d828 + languageName: node + linkType: hard + +"glob@npm:^13.0.0": + version: 13.0.6 + resolution: "glob@npm:13.0.6" + dependencies: + minimatch: "npm:^10.2.2" + minipass: "npm:^7.1.3" + path-scurry: "npm:^2.0.2" + checksum: 10c0/269c236f11a9b50357fe7a8c6aadac667e01deb5242b19c84975628f05f4438d8ee1354bb62c5d6c10f37fd59911b54d7799730633a2786660d8c69f1d18120a + languageName: node + linkType: hard + +"google-auth-library@npm:10.5.0": + version: 10.5.0 + resolution: "google-auth-library@npm:10.5.0" + dependencies: + base64-js: "npm:^1.3.0" + ecdsa-sig-formatter: "npm:^1.0.11" + gaxios: "npm:^7.0.0" + gcp-metadata: "npm:^8.0.0" + google-logging-utils: "npm:^1.0.0" + gtoken: "npm:^8.0.0" + jws: "npm:^4.0.0" + checksum: 10c0/49d3931d20b1f4a4d075216bf5518e2b3396dcf441a8f1952611cf3b6080afb1261c3d32009609047ee4a1cc545269a74b4957e6bba9cce840581df309c4b145 + languageName: node + linkType: hard + +"google-auth-library@npm:^10.3.0, google-auth-library@npm:^10.6.2, google-auth-library@npm:^10.7.0": + version: 10.7.0 + resolution: "google-auth-library@npm:10.7.0" + dependencies: + base64-js: "npm:^1.3.0" + ecdsa-sig-formatter: "npm:^1.0.11" + gaxios: "npm:^7.1.4" + gcp-metadata: "npm:8.1.2" + google-logging-utils: "npm:1.1.3" + jws: "npm:^4.0.0" + checksum: 10c0/e8827ff84a69bbd6573229d8245d8fbb8870304e255c213571541d039c33764a6f4a8d773c002a16d6d75e35b9a596310b5c6f8e25b189a02eb4cebd6f022321 + languageName: node + linkType: hard + +"google-auth-library@npm:^9.6.3": + version: 9.15.1 + resolution: "google-auth-library@npm:9.15.1" + dependencies: + base64-js: "npm:^1.3.0" + ecdsa-sig-formatter: "npm:^1.0.11" + gaxios: "npm:^6.1.1" + gcp-metadata: "npm:^6.1.0" + gtoken: "npm:^7.0.0" + jws: "npm:^4.0.0" + checksum: 10c0/6eef36d9a9cb7decd11e920ee892579261c6390104b3b24d3e0f3889096673189fe2ed0ee43fd563710e2560de98e63ad5aa4967b91e7f4e69074a422d5f7b65 + languageName: node + linkType: hard + +"google-gax@npm:^5.0.1": + version: 5.0.7 + resolution: "google-gax@npm:5.0.7" + dependencies: + "@grpc/grpc-js": "npm:^1.12.6" + "@grpc/proto-loader": "npm:^0.8.0" + duplexify: "npm:^4.1.3" + google-auth-library: "npm:10.5.0" + google-logging-utils: "npm:1.1.3" + node-fetch: "npm:^3.3.2" + object-hash: "npm:^3.0.0" + proto3-json-serializer: "npm:3.0.4" + protobufjs: "npm:^7.5.4" + retry-request: "npm:^8.0.2" + rimraf: "npm:^5.0.1" + checksum: 10c0/23589773ed578b96e31a5a8c2c327237854db3d1109f1e7dd2355c73ff2cd93d63c17b2505d237db8330b283c85440120b57db0f64dbcff76a3076ffc49ec6ec + languageName: node + linkType: hard + +"google-logging-utils@npm:1.1.3": + version: 1.1.3 + resolution: "google-logging-utils@npm:1.1.3" + checksum: 10c0/e65201c7e96543bd1423b9324013736646b9eed60941e0bfa47b9bfd146d2f09cf3df1c99ca60b7d80a726075263ead049ee72de53372cb8458c3bc55c2c1e59 + languageName: node + linkType: hard + +"google-logging-utils@npm:^0.0.2": + version: 0.0.2 + resolution: "google-logging-utils@npm:0.0.2" + checksum: 10c0/9a4bbd470dd101c77405e450fffca8592d1d7114f245a121288d04a957aca08c9dea2dd1a871effe71e41540d1bb0494731a0b0f6fea4358e77f06645e4268c1 + languageName: node + linkType: hard + +"google-logging-utils@npm:^1.0.0": + version: 1.1.4 + resolution: "google-logging-utils@npm:1.1.4" + checksum: 10c0/860873974dd31678553f1074eb8fcf49c6417807086f4645ee8d4eaa81e8dce39f8f7a4b6856be4fda6e5d812b2df10e7abeb6dfe28353d28724cf81357c5a53 + languageName: node + linkType: hard + +"gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"gtoken@npm:^7.0.0": + version: 7.1.0 + resolution: "gtoken@npm:7.1.0" + dependencies: + gaxios: "npm:^6.0.0" + jws: "npm:^4.0.0" + checksum: 10c0/0a3dcacb1a3c4578abe1ee01c7d0bf20bffe8ded3ee73fc58885d53c00f6eb43b4e1372ff179f0da3ed5cfebd5b7c6ab8ae2776f1787e90d943691b4fe57c716 + languageName: node + linkType: hard + +"gtoken@npm:^8.0.0": + version: 8.0.0 + resolution: "gtoken@npm:8.0.0" + dependencies: + gaxios: "npm:^7.0.0" + jws: "npm:^4.0.0" + checksum: 10c0/058538e5bbe081d30ada5f1fd34d3a8194357c2e6ecbf7c8a98daeefbf13f7e06c15649c7dace6a1d4cc3bc6dc5483bd484d6d7adc5852021896d7c05c439f37 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: "npm:^1.0.3" + checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c + languageName: node + linkType: hard + +"hasown@npm:^2.0.2, hasown@npm:^2.0.4": + version: 2.0.4 + resolution: "hasown@npm:2.0.4" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/2d8de939e270b70618f8cebb69746620db10617dbb495bc66ddad326955ea24d3ca4af133aff3eb7c1853e0218f867bc2b050ec26fe02e3aea58f880ffc5e506 + languageName: node + linkType: hard + +"hono@npm:^4.11.4": + version: 4.12.25 + resolution: "hono@npm:4.12.25" + checksum: 10c0/9216d647fe2f39b17855b0e74913688b837e3fa9519d367c7beeec399265b36608a820928cc33ab926eee58fe2daf7e33296235b52e56dbfac0fbcd51a5e818e + languageName: node + linkType: hard + +"hosted-git-info@npm:^9.0.0": + version: 9.0.3 + resolution: "hosted-git-info@npm:9.0.3" + dependencies: + lru-cache: "npm:^11.1.0" + checksum: 10c0/8f216ccb461ca54ae1846745325ced6a880b53101a58c820b813f067caa301576bf974f787df5688b7f0f1b752cdfcbaa2979751d1fcfd604032cc57bc538607 + languageName: node + linkType: hard + +"html-entities@npm:^2.5.2": + version: 2.6.0 + resolution: "html-entities@npm:2.6.0" + checksum: 10c0/7c8b15d9ea0cd00dc9279f61bab002ba6ca8a7a0f3c36ed2db3530a67a9621c017830d1d2c1c65beb9b8e3436ea663e9cf8b230472e0e413359399413b27c8b7 + languageName: node + linkType: hard + +"htmlparser2@npm:^10.0.0": + version: 10.1.0 + resolution: "htmlparser2@npm:10.1.0" + dependencies: + domelementtype: "npm:^2.3.0" + domhandler: "npm:^5.0.3" + domutils: "npm:^3.2.2" + entities: "npm:^7.0.1" + checksum: 10c0/36394e29b80cfcc5e78e0fa4d3aa21fdaac3e6778d23e5c933e625c290987cd9a724a2eb0753ab60ed0c69dfaba0ab115f0ee50fb112fd8f0c4d522e7e0089a2 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.2.0 + resolution: "http-cache-semantics@npm:4.2.0" + checksum: 10c0/45b66a945cf13ec2d1f29432277201313babf4a01d9e52f44b31ca923434083afeca03f18417f599c9ab3d0e7b618ceb21257542338b57c54b710463b4a53e37 + languageName: node + linkType: hard + +"http-errors@npm:^2.0.0, http-errors@npm:^2.0.1, http-errors@npm:~2.0.1": + version: 2.0.1 + resolution: "http-errors@npm:2.0.1" + dependencies: + depd: "npm:~2.0.0" + inherits: "npm:~2.0.4" + setprototypeof: "npm:~1.2.0" + statuses: "npm:~2.0.2" + toidentifier: "npm:~1.0.1" + checksum: 10c0/fb38906cef4f5c83952d97661fe14dc156cb59fe54812a42cd448fa57b5c5dfcb38a40a916957737bd6b87aab257c0648d63eb5b6a9ca9f548e105b6072712d4 + languageName: node + linkType: hard + +"http-parser-js@npm:>=0.5.1": + version: 0.5.10 + resolution: "http-parser-js@npm:0.5.10" + checksum: 10c0/8bbcf1832a8d70b2bd515270112116333add88738a2cc05bfb94ba6bde3be4b33efee5611584113818d2bcf654fdc335b652503be5a6b4c0b95e46f214187d93 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "http-proxy-agent@npm:5.0.0" + dependencies: + "@tootallnate/once": "npm:2" + agent-base: "npm:6" + debug: "npm:4" + checksum: 10c0/32a05e413430b2c1e542e5c74b38a9f14865301dd69dff2e53ddb684989440e3d2ce0c4b64d25eb63cf6283e6265ff979a61cf93e3ca3d23047ddfdc8df34a32 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + +"https-proxy-agent@npm:7.0.6, https-proxy-agent@npm:^7.0.1": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:4" + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac + languageName: node + linkType: hard + +"https-proxy-agent@npm:^5.0.0": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: "npm:6" + debug: "npm:4" + checksum: 10c0/6dd639f03434003577c62b27cafdb864784ef19b2de430d8ae2a1d45e31c4fd60719e5637b44db1a88a046934307da7089e03d6089ec3ddacc1189d8de8897d1 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.3": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.7.0, iconv-lite@npm:^0.7.2, iconv-lite@npm:~0.7.0": + version: 0.7.2 + resolution: "iconv-lite@npm:0.7.2" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/3c228920f3bd307f56bf8363706a776f4a060eb042f131cd23855ceca962951b264d0997ab38a1ad340e1c5df8499ed26e1f4f0db6b2a2ad9befaff22f14b722 + languageName: node + linkType: hard + +"idb@npm:7.1.1": + version: 7.1.1 + resolution: "idb@npm:7.1.1" + checksum: 10c0/72418e4397638797ee2089f97b45fc29f937b830bc0eb4126f4a9889ecf10320ceacf3a177fe5d7ffaf6b4fe38b20bbd210151549bfdc881db8081eed41c870d + languageName: node + linkType: hard + +"ignore-walk@npm:^8.0.0": + version: 8.0.0 + resolution: "ignore-walk@npm:8.0.0" + dependencies: + minimatch: "npm:^10.0.3" + checksum: 10c0/fec71d904adaaf233f2f5a67cc547857d960abe1f41a8b43f675617a322aabe9401fb9afa13aba825d21d91c454d5cad72ecba156e69443f3df40288d6ebd058 + languageName: node + linkType: hard + +"ignore@npm:^5.2.0": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 + languageName: node + linkType: hard + +"image-size@npm:~0.5.0": + version: 0.5.5 + resolution: "image-size@npm:0.5.5" + bin: + image-size: bin/image-size.js + checksum: 10c0/655204163af06732f483a9fe7cce9dff4a29b7b2e88f5c957a5852e8143fa750f5e54b1955a2ca83de99c5220dbd680002d0d4e09140b01433520f4d5a0b1f4c + languageName: node + linkType: hard + +"immutable@npm:^5.0.2, immutable@npm:^5.1.5": + version: 5.1.6 + resolution: "immutable@npm:5.1.6" + checksum: 10c0/79eb033f68ca70fca60fb052c87b5420034e460e306ce9bea2558fd7b5e0b3b59c28c4a4653867305992b4a30e169b353175d78126c1be6ed0113794b27e3317 + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"inherits@npm:^2.0.3, inherits@npm:~2.0.4": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"ini@npm:6.0.0, ini@npm:^6.0.0": + version: 6.0.0 + resolution: "ini@npm:6.0.0" + checksum: 10c0/9a7f55f306e2b25b41ae67c8b526e8f4673f057b70852b9025816ef4f15f07bf1ba35ed68ea4471ff7b31718f7ef1bc50d709f8d03cb012e10a3135eb99c7206 + languageName: node + linkType: hard + +"injection-js@npm:^2.4.0": + version: 2.6.1 + resolution: "injection-js@npm:2.6.1" + dependencies: + tslib: "npm:^2.0.0" + checksum: 10c0/8947b3382c5e9e9aab2e80a010ae339cdfda1fd5d8116138bb3098a1e99316f5bc09d057ea57627707b56527e24119d3e8c5afdb01a82911d80025a4fe4c3b92 + languageName: node + linkType: hard + +"ip-address@npm:^10.1.1, ip-address@npm:^10.2.0": + version: 10.2.0 + resolution: "ip-address@npm:10.2.0" + checksum: 10c0/5a00aada6e922c9c69dfc800ed5d0fa3348675ebdeed0e1575f503f27ca385b5f534363c9af7ad1daf64c1f1409388cdd3cc2e9b9b0fe1c924a431378d55075a + languageName: node + linkType: hard + +"ipaddr.js@npm:1.9.1": + version: 1.9.1 + resolution: "ipaddr.js@npm:1.9.1" + checksum: 10c0/0486e775047971d3fdb5fb4f063829bac45af299ae0b82dcf3afa2145338e08290563a2a70f34b732d795ecc8311902e541a8530eeb30d75860a78ff4e94ce2a + languageName: node + linkType: hard + +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: "npm:^2.0.0" + checksum: 10c0/a16eaee59ae2b315ba36fad5c5dcaf8e49c3e27318f8ab8fa3cdb8772bf559c8d1ba750a589c2ccb096113bb64497084361a25960899cb6172a6925ab6123d38 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^5.0.0, is-fullwidth-code-point@npm:^5.1.0": + version: 5.1.0 + resolution: "is-fullwidth-code-point@npm:5.1.0" + dependencies: + get-east-asian-width: "npm:^1.3.1" + checksum: 10c0/c1172c2e417fb73470c56c431851681591f6a17233603a9e6f94b7ba870b2e8a5266506490573b607fb1081318589372034aa436aec07b465c2029c0bc7f07a4 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-interactive@npm:^2.0.0": + version: 2.0.0 + resolution: "is-interactive@npm:2.0.0" + checksum: 10c0/801c8f6064f85199dc6bf99b5dd98db3282e930c3bc197b32f2c5b89313bb578a07d1b8a01365c4348c2927229234f3681eb861b9c2c92bee72ff397390fa600 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-promise@npm:^4.0.0": + version: 4.0.0 + resolution: "is-promise@npm:4.0.0" + checksum: 10c0/ebd5c672d73db781ab33ccb155fb9969d6028e37414d609b115cc534654c91ccd061821d5b987eefaa97cf4c62f0b909bb2f04db88306de26e91bfe8ddc01503 + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5 + languageName: node + linkType: hard + +"is-unicode-supported@npm:^2.0.0, is-unicode-supported@npm:^2.1.0": + version: 2.1.0 + resolution: "is-unicode-supported@npm:2.1.0" + checksum: 10c0/a0f53e9a7c1fdbcf2d2ef6e40d4736fdffff1c9f8944c75e15425118ff3610172c87bf7bc6c34d3903b04be59790bb2212ddbe21ee65b5a97030fc50370545a5 + languageName: node + linkType: hard + +"is-what@npm:^4.1.8": + version: 4.1.16 + resolution: "is-what@npm:4.1.16" + checksum: 10c0/611f1947776826dcf85b57cfb7bd3b3ea6f4b94a9c2f551d4a53f653cf0cb9d1e6518846648256d46ee6c91d114b6d09d2ac8a07306f7430c5900f87466aae5b + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^4.0.0": + version: 4.0.0 + resolution: "isexe@npm:4.0.0" + checksum: 10c0/5884815115bceac452877659a9c7726382531592f43dc29e5d48b7c4100661aed54018cb90bd36cb2eaeba521092570769167acbb95c18d39afdccbcca06c5ce + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.2 + resolution: "istanbul-lib-coverage@npm:3.2.2" + checksum: 10c0/6c7ff2106769e5f592ded1fb418f9f73b4411fd5a084387a5410538332b6567cd1763ff6b6cadca9b9eb2c443cce2f7ea7d7f1b8d315f9ce58539793b1e0922b + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:6.0.3": + version: 6.0.3 + resolution: "istanbul-lib-instrument@npm:6.0.3" + dependencies: + "@babel/core": "npm:^7.23.9" + "@babel/parser": "npm:^7.23.9" + "@istanbuljs/schema": "npm:^0.1.3" + istanbul-lib-coverage: "npm:^3.2.0" + semver: "npm:^7.5.4" + checksum: 10c0/a1894e060dd2a3b9f046ffdc87b44c00a35516f5e6b7baf4910369acca79e506fc5323a816f811ae23d82334b38e3ddeb8b3b331bd2c860540793b59a8689128 + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + languageName: node + linkType: hard + +"jose@npm:^6.1.3": + version: 6.2.3 + resolution: "jose@npm:6.2.3" + checksum: 10c0/aa91bccba22cc84d86308f833749bcb0b00441e35c24e0ac79abeac5f76dc62d47bdef9c1da6a0c609f5da6478595f52b252085888b89dbdb163861e40ea4188 + languageName: node + linkType: hard + +"js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed + languageName: node + linkType: hard + +"jsesc@npm:^3.0.2": + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" + bin: + jsesc: bin/jsesc + checksum: 10c0/531779df5ec94f47e462da26b4cbf05eb88a83d9f08aac2ba04206508fc598527a153d08bd462bae82fc78b3eaa1a908e1a4a79f886e9238641c4cdefaf118b1 + languageName: node + linkType: hard + +"json-bigint@npm:^1.0.0": + version: 1.0.0 + resolution: "json-bigint@npm:1.0.0" + dependencies: + bignumber.js: "npm:^9.0.0" + checksum: 10c0/e3f34e43be3284b573ea150a3890c92f06d54d8ded72894556357946aeed9877fd795f62f37fe16509af189fd314ab1104d0fd0f163746ad231b9f378f5b33f4 + languageName: node + linkType: hard + +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^5.0.0": + version: 5.0.0 + resolution: "json-parse-even-better-errors@npm:5.0.0" + checksum: 10c0/9a33d120090a7637a2aa850acec610c011d7c6488c5184d7ffc0460ee0401057f3131a4dff70c6510900cf15a95ab99d3f0f2d959f59edfe6438d227e90bf5ca + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce + languageName: node + linkType: hard + +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 10c0/71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6 + languageName: node + linkType: hard + +"json-schema-typed@npm:^8.0.2": + version: 8.0.2 + resolution: "json-schema-typed@npm:8.0.2" + checksum: 10c0/89f5e2fb1495483b705c027203c07277ee6bf2665165ad25a9cb55de5af7f72570326d13d32565180781e4083ad5c9688102f222baed7b353c2f39c1e02b0428 + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 + languageName: node + linkType: hard + +"json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 10c0/5a04eed94810fa55c5ea138b2f7a5c12b97c3750bc63d11e511dcecbfef758003861522a070c2272764ee0f4e3e323862f386945aeb5b85b87ee43f084ba586c + languageName: node + linkType: hard + +"jsonc-parser@npm:3.3.1, jsonc-parser@npm:^3.0.0, jsonc-parser@npm:^3.3.1": + version: 3.3.1 + resolution: "jsonc-parser@npm:3.3.1" + checksum: 10c0/269c3ae0a0e4f907a914bf334306c384aabb9929bd8c99f909275ebd5c2d3bc70b9bcd119ad794f339dec9f24b6a4ee9cd5a8ab2e6435e730ad4075388fc2ab6 + languageName: node + linkType: hard + +"jsonparse@npm:^1.3.1": + version: 1.3.1 + resolution: "jsonparse@npm:1.3.1" + checksum: 10c0/89bc68080cd0a0e276d4b5ab1b79cacd68f562467008d176dc23e16e97d4efec9e21741d92ba5087a8433526a45a7e6a9d5ef25408696c402ca1cfbc01a90bf0 + languageName: node + linkType: hard + +"jsonwebtoken@npm:^9.0.0": + version: 9.0.3 + resolution: "jsonwebtoken@npm:9.0.3" + dependencies: + jws: "npm:^4.0.1" + lodash.includes: "npm:^4.3.0" + lodash.isboolean: "npm:^3.0.3" + lodash.isinteger: "npm:^4.0.4" + lodash.isnumber: "npm:^3.0.3" + lodash.isplainobject: "npm:^4.0.6" + lodash.isstring: "npm:^4.0.1" + lodash.once: "npm:^4.0.0" + ms: "npm:^2.1.1" + semver: "npm:^7.5.4" + checksum: 10c0/6ca7f1e54886ea3bde7146a5a22b53847c46e25453c7f7307a69818b9a6ad48c390b2e59d5690fcfd03c529b01960060cc4bb0c686991d6edae2285dfd30f4ba + languageName: node + linkType: hard + +"jwa@npm:^2.0.1": + version: 2.0.1 + resolution: "jwa@npm:2.0.1" + dependencies: + buffer-equal-constant-time: "npm:^1.0.1" + ecdsa-sig-formatter: "npm:1.0.11" + safe-buffer: "npm:^5.0.1" + checksum: 10c0/ab3ebc6598e10dc11419d4ed675c9ca714a387481466b10e8a6f3f65d8d9c9237e2826f2505280a739cf4cbcf511cb288eeec22b5c9c63286fc5a2e4f97e78cf + languageName: node + linkType: hard + +"jwks-rsa@npm:^4.0.1": + version: 4.0.1 + resolution: "jwks-rsa@npm:4.0.1" + dependencies: + "@types/jsonwebtoken": "npm:^9.0.4" + debug: "npm:^4.3.4" + jose: "npm:^6.1.3" + limiter: "npm:^1.1.5" + lru-memoizer: "npm:^3.0.0" + checksum: 10c0/aeca4b1de959707002150556f4f08ed3677fe9dd12bd0be0aa01220a86b88867357c7d2241f4975de9f53125d41cc3f5e4c5e929a8922f257b61634b208d7e3c + languageName: node + linkType: hard + +"jws@npm:^4.0.0, jws@npm:^4.0.1": + version: 4.0.1 + resolution: "jws@npm:4.0.1" + dependencies: + jwa: "npm:^2.0.1" + safe-buffer: "npm:^5.0.1" + checksum: 10c0/6be1ed93023aef570ccc5ea8d162b065840f3ef12f0d1bb3114cade844de7a357d5dc558201d9a65101e70885a6fa56b17462f520e6b0d426195510618a154d0 + languageName: node + linkType: hard + +"keyv@npm:^4.5.4": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e + languageName: node + linkType: hard + +"less@npm:^4.2.0": + version: 4.6.4 + resolution: "less@npm:4.6.4" + dependencies: + copy-anything: "npm:^3.0.5" + errno: "npm:^0.1.1" + graceful-fs: "npm:^4.1.2" + image-size: "npm:~0.5.0" + make-dir: "npm:^2.1.0" + mime: "npm:^1.4.1" + needle: "npm:^3.1.0" + parse-node-version: "npm:^1.0.1" + source-map: "npm:~0.6.0" + dependenciesMeta: + errno: + optional: true + graceful-fs: + optional: true + image-size: + optional: true + make-dir: + optional: true + mime: + optional: true + needle: + optional: true + source-map: + optional: true + bin: + lessc: bin/lessc + checksum: 10c0/34fc96e617f1c8b9bff019ffcab6304550d733fdb5daaa4a69dd404d83aa8566c21d8905bbb75f025334875188f38126edd4af10604e9ee634f43f6d41430837 + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: "npm:^1.2.1" + type-check: "npm:~0.4.0" + checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e + languageName: node + linkType: hard + +"lightningcss-android-arm64@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-android-arm64@npm:1.32.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"lightningcss-darwin-arm64@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-darwin-arm64@npm:1.32.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"lightningcss-darwin-x64@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-darwin-x64@npm:1.32.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"lightningcss-freebsd-x64@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-freebsd-x64@npm:1.32.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"lightningcss-linux-arm-gnueabihf@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-linux-arm-gnueabihf@npm:1.32.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"lightningcss-linux-arm64-gnu@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-linux-arm64-gnu@npm:1.32.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"lightningcss-linux-arm64-musl@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-linux-arm64-musl@npm:1.32.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"lightningcss-linux-x64-gnu@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-linux-x64-gnu@npm:1.32.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"lightningcss-linux-x64-musl@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-linux-x64-musl@npm:1.32.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"lightningcss-win32-arm64-msvc@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-win32-arm64-msvc@npm:1.32.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"lightningcss-win32-x64-msvc@npm:1.32.0": + version: 1.32.0 + resolution: "lightningcss-win32-x64-msvc@npm:1.32.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"lightningcss@npm:^1.32.0": + version: 1.32.0 + resolution: "lightningcss@npm:1.32.0" + dependencies: + detect-libc: "npm:^2.0.3" + lightningcss-android-arm64: "npm:1.32.0" + lightningcss-darwin-arm64: "npm:1.32.0" + lightningcss-darwin-x64: "npm:1.32.0" + lightningcss-freebsd-x64: "npm:1.32.0" + lightningcss-linux-arm-gnueabihf: "npm:1.32.0" + lightningcss-linux-arm64-gnu: "npm:1.32.0" + lightningcss-linux-arm64-musl: "npm:1.32.0" + lightningcss-linux-x64-gnu: "npm:1.32.0" + lightningcss-linux-x64-musl: "npm:1.32.0" + lightningcss-win32-arm64-msvc: "npm:1.32.0" + lightningcss-win32-x64-msvc: "npm:1.32.0" + dependenciesMeta: + lightningcss-android-arm64: + optional: true + lightningcss-darwin-arm64: + optional: true + lightningcss-darwin-x64: + optional: true + lightningcss-freebsd-x64: + optional: true + lightningcss-linux-arm-gnueabihf: + optional: true + lightningcss-linux-arm64-gnu: + optional: true + lightningcss-linux-arm64-musl: + optional: true + lightningcss-linux-x64-gnu: + optional: true + lightningcss-linux-x64-musl: + optional: true + lightningcss-win32-arm64-msvc: + optional: true + lightningcss-win32-x64-msvc: + optional: true + checksum: 10c0/70945bd55097af46fc9fab7f5ed09cd5869d85940a2acab7ee06d0117004a1d68155708a2d462531cea2fc3c67aefc9333a7068c80b0b78dd404c16838809e03 + languageName: node + linkType: hard + +"limiter@npm:^1.1.5": + version: 1.1.5 + resolution: "limiter@npm:1.1.5" + checksum: 10c0/ebe2b20a820d1f67b8e1724051246434c419b2da041a7e9cd943f6daf113b8d17a52a1bd88fb79be5b624c10283ecb737f50edb5c1c88c71f4cd367108c97300 + languageName: node + linkType: hard + +"linkify-it@npm:^5.0.1": + version: 5.0.1 + resolution: "linkify-it@npm:5.0.1" + dependencies: + uc.micro: "npm:^2.0.0" + checksum: 10c0/d06d04f1ed03be131740fc900a5e74ea1f49886b052213599e306d469d5ffe2303db76dd8f771de9f28e2b0b38852de22ec46ae597d245f8b66439b0ceb19b10 + languageName: node + linkType: hard + +"listr2@npm:9.0.5": + version: 9.0.5 + resolution: "listr2@npm:9.0.5" + dependencies: + cli-truncate: "npm:^5.0.0" + colorette: "npm:^2.0.20" + eventemitter3: "npm:^5.0.1" + log-update: "npm:^6.1.0" + rfdc: "npm:^1.4.1" + wrap-ansi: "npm:^9.0.0" + checksum: 10c0/46448d1ba0addc9d71aeafd05bb8e86ded9641ccad930ac302c2bd2ad71580375604743e18586fcb8f11906edf98e8e17fca75ba0759947bf275d381f68e311d + languageName: node + linkType: hard + +"lit-element@npm:^4.2.0": + version: 4.2.2 + resolution: "lit-element@npm:4.2.2" + dependencies: + "@lit-labs/ssr-dom-shim": "npm:^1.5.0" + "@lit/reactive-element": "npm:^2.1.0" + lit-html: "npm:^3.3.0" + checksum: 10c0/114ab5837f1f9e03a30b1ed1c055fa0e31f01e444464e5ab0453ef88be12d778508235533267c42614d323e3048ee58f865b5c612948a53bd6219abca404c710 + languageName: node + linkType: hard + +"lit-html@npm:^3.3.0": + version: 3.3.3 + resolution: "lit-html@npm:3.3.3" + dependencies: + "@types/trusted-types": "npm:^2.0.2" + checksum: 10c0/84e57314412ff385cc67fc482d26b77057370e2cfe3c6495cc45f692bdad840d5ed0519ddddcfae1d043bb098c66daa7e807593d5a21ac72094da14274497879 + languageName: node + linkType: hard + +"lit@npm:^2.0.0 || ^3.0.0, lit@npm:^3.3.1, lit@npm:^3.3.3": + version: 3.3.3 + resolution: "lit@npm:3.3.3" + dependencies: + "@lit/reactive-element": "npm:^2.1.0" + lit-element: "npm:^4.2.0" + lit-html: "npm:^3.3.0" + checksum: 10c0/11b6175ebffce92f4cf835ddd8a198d49707c27f34b0a7c538d2cb294f6c2fb7ff40aabd3589fcf0c2ed162404faaf2bb7c966fad9024bb9e02d013e2d5aa0b5 + languageName: node + linkType: hard + +"lmdb@npm:3.5.1": + version: 3.5.1 + resolution: "lmdb@npm:3.5.1" + dependencies: + "@harperfast/extended-iterable": "npm:^1.0.3" + "@lmdb/lmdb-darwin-arm64": "npm:3.5.1" + "@lmdb/lmdb-darwin-x64": "npm:3.5.1" + "@lmdb/lmdb-linux-arm": "npm:3.5.1" + "@lmdb/lmdb-linux-arm64": "npm:3.5.1" + "@lmdb/lmdb-linux-x64": "npm:3.5.1" + "@lmdb/lmdb-win32-arm64": "npm:3.5.1" + "@lmdb/lmdb-win32-x64": "npm:3.5.1" + msgpackr: "npm:^1.11.2" + node-addon-api: "npm:^6.1.0" + node-gyp: "npm:latest" + node-gyp-build-optional-packages: "npm:5.2.2" + ordered-binary: "npm:^1.5.3" + weak-lru-cache: "npm:^1.2.2" + dependenciesMeta: + "@lmdb/lmdb-darwin-arm64": + optional: true + "@lmdb/lmdb-darwin-x64": + optional: true + "@lmdb/lmdb-linux-arm": + optional: true + "@lmdb/lmdb-linux-arm64": + optional: true + "@lmdb/lmdb-linux-x64": + optional: true + "@lmdb/lmdb-win32-arm64": + optional: true + "@lmdb/lmdb-win32-x64": + optional: true + bin: + download-lmdb-prebuilds: bin/download-prebuilds.js + checksum: 10c0/1fd63b1fa981569ec79ea952886a5ac31773cca19d4d4d21f26297dda52c21ae67818cf2026af0adcc80efd675189afaf4c57e130308beaa1a4cfdb379b5c10a + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: "npm:^5.0.0" + checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 + languageName: node + linkType: hard + +"lodash.camelcase@npm:^4.3.0": + version: 4.3.0 + resolution: "lodash.camelcase@npm:4.3.0" + checksum: 10c0/fcba15d21a458076dd309fce6b1b4bf611d84a0ec252cb92447c948c533ac250b95d2e00955801ebc367e5af5ed288b996d75d37d2035260a937008e14eaf432 + languageName: node + linkType: hard + +"lodash.clonedeep@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.clonedeep@npm:4.5.0" + checksum: 10c0/2caf0e4808f319d761d2939ee0642fa6867a4bbf2cfce43276698828380756b99d4c4fa226d881655e6ac298dd453fe12a5ec8ba49861777759494c534936985 + languageName: node + linkType: hard + +"lodash.includes@npm:^4.3.0": + version: 4.3.0 + resolution: "lodash.includes@npm:4.3.0" + checksum: 10c0/7ca498b9b75bf602d04e48c0adb842dfc7d90f77bcb2a91a2b2be34a723ad24bc1c8b3683ec6b2552a90f216c723cdea530ddb11a3320e08fa38265703978f4b + languageName: node + linkType: hard + +"lodash.isboolean@npm:^3.0.3": + version: 3.0.3 + resolution: "lodash.isboolean@npm:3.0.3" + checksum: 10c0/0aac604c1ef7e72f9a6b798e5b676606042401dd58e49f051df3cc1e3adb497b3d7695635a5cbec4ae5f66456b951fdabe7d6b387055f13267cde521f10ec7f7 + languageName: node + linkType: hard + +"lodash.isinteger@npm:^4.0.4": + version: 4.0.4 + resolution: "lodash.isinteger@npm:4.0.4" + checksum: 10c0/4c3e023a2373bf65bf366d3b8605b97ec830bca702a926939bcaa53f8e02789b6a176e7f166b082f9365bfec4121bfeb52e86e9040cb8d450e64c858583f61b7 + languageName: node + linkType: hard + +"lodash.isnumber@npm:^3.0.3": + version: 3.0.3 + resolution: "lodash.isnumber@npm:3.0.3" + checksum: 10c0/2d01530513a1ee4f72dd79528444db4e6360588adcb0e2ff663db2b3f642d4bb3d687051ae1115751ca9082db4fdef675160071226ca6bbf5f0c123dbf0aa12d + languageName: node + linkType: hard + +"lodash.isplainobject@npm:^4.0.6": + version: 4.0.6 + resolution: "lodash.isplainobject@npm:4.0.6" + checksum: 10c0/afd70b5c450d1e09f32a737bed06ff85b873ecd3d3d3400458725283e3f2e0bb6bf48e67dbe7a309eb371a822b16a26cca4a63c8c52db3fc7dc9d5f9dd324cbb + languageName: node + linkType: hard + +"lodash.isstring@npm:^4.0.1": + version: 4.0.1 + resolution: "lodash.isstring@npm:4.0.1" + checksum: 10c0/09eaf980a283f9eef58ef95b30ec7fee61df4d6bf4aba3b5f096869cc58f24c9da17900febc8ffd67819b4e29de29793190e88dc96983db92d84c95fa85d1c92 + languageName: node + linkType: hard + +"lodash.once@npm:^4.0.0": + version: 4.1.1 + resolution: "lodash.once@npm:4.1.1" + checksum: 10c0/46a9a0a66c45dd812fcc016e46605d85ad599fe87d71a02f6736220554b52ffbe82e79a483ad40f52a8a95755b0d1077fba259da8bfb6694a7abbf4a48f1fc04 + languageName: node + linkType: hard + +"log-symbols@npm:^7.0.1": + version: 7.0.1 + resolution: "log-symbols@npm:7.0.1" + dependencies: + is-unicode-supported: "npm:^2.0.0" + yoctocolors: "npm:^2.1.1" + checksum: 10c0/71d30f9a44b8604b14df5e7c9b579d739997253db7385339d493ece41ee2cc74c1f96c5b4c0b2c1e0829b05348d4f287e68faab495b7a094a80f51351c816075 + languageName: node + linkType: hard + +"log-update@npm:^6.1.0": + version: 6.1.0 + resolution: "log-update@npm:6.1.0" + dependencies: + ansi-escapes: "npm:^7.0.0" + cli-cursor: "npm:^5.0.0" + slice-ansi: "npm:^7.1.0" + strip-ansi: "npm:^7.1.0" + wrap-ansi: "npm:^9.0.0" + checksum: 10c0/4b350c0a83d7753fea34dcac6cd797d1dc9603291565de009baa4aa91c0447eab0d3815a05c8ec9ac04fdfffb43c82adcdb03ec1fceafd8518e1a8c1cff4ff89 + languageName: node + linkType: hard + +"long@npm:^5.0.0, long@npm:^5.3.2": + version: 5.3.2 + resolution: "long@npm:5.3.2" + checksum: 10c0/7130fe1cbce2dca06734b35b70d380ca3f70271c7f8852c922a7c62c86c4e35f0c39290565eca7133c625908d40e126ac57c02b1b1a4636b9457d77e1e60b981 + languageName: node + linkType: hard + +"lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb + languageName: node + linkType: hard + +"lru-cache@npm:^11.0.0, lru-cache@npm:^11.0.1, lru-cache@npm:^11.1.0, lru-cache@npm:^11.2.1": + version: 11.5.1 + resolution: "lru-cache@npm:11.5.1" + checksum: 10c0/7b341cea79a8efe9c6a6f20c8757a77eca5b25d7ff983ccf4e11e547b81f6787824baa1c84705251dff84ab4ffac85717ac354b9d02e465f86a9f8b166409979 + languageName: node + linkType: hard + +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: "npm:^3.0.2" + checksum: 10c0/89b2ef2ef45f543011e38737b8a8622a2f8998cddf0e5437174ef8f1f70a8b9d14a918ab3e232cb3ba343b7abddffa667f0b59075b2b80e6b4d63c3de6127482 + languageName: node + linkType: hard + +"lru-memoizer@npm:^3.0.0": + version: 3.0.0 + resolution: "lru-memoizer@npm:3.0.0" + dependencies: + lodash.clonedeep: "npm:^4.5.0" + lru-cache: "npm:^11.0.1" + checksum: 10c0/d4d1abedd56a79da6416e0c1ae736c6bc084155d45efe427182d4a8318a1054c5fbd9bba154e6dfe8a8b7de7630392186b81faa84f15746eb5459dc0567f181c + languageName: node + linkType: hard + +"magic-string@npm:0.30.21, magic-string@npm:^0.30.21": + version: 0.30.21 + resolution: "magic-string@npm:0.30.21" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.5" + checksum: 10c0/299378e38f9a270069fc62358522ddfb44e94244baa0d6a8980ab2a9b2490a1d03b236b447eee309e17eb3bddfa482c61259d47960eb018a904f0ded52780c4a + languageName: node + linkType: hard + +"make-dir@npm:^2.1.0": + version: 2.1.0 + resolution: "make-dir@npm:2.1.0" + dependencies: + pify: "npm:^4.0.1" + semver: "npm:^5.6.0" + checksum: 10c0/ada869944d866229819735bee5548944caef560d7a8536ecbc6536edca28c72add47cc4f6fc39c54fb25d06b58da1f8994cf7d9df7dadea047064749efc085d8 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^15.0.0, make-fetch-happen@npm:^15.0.1, make-fetch-happen@npm:^15.0.4": + version: 15.0.6 + resolution: "make-fetch-happen@npm:15.0.6" + dependencies: + "@gar/promise-retry": "npm:^1.0.0" + "@npmcli/agent": "npm:^4.0.0" + "@npmcli/redact": "npm:^4.0.0" + cacache: "npm:^20.0.1" + http-cache-semantics: "npm:^4.1.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^5.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^1.0.0" + proc-log: "npm:^6.0.0" + ssri: "npm:^13.0.0" + checksum: 10c0/2c5805dee83efd1cd1d3f57505120ae98f4a328be72d82447e24b8f72b8e5475910d7dbc49d7da1c5bd96a62bf8ef6ffda88ebadfdfbec7c715cfde2459c9295 + languageName: node + linkType: hard + +"markdown-it@npm:^14.1.0, markdown-it@npm:^14.2.0": + version: 14.2.0 + resolution: "markdown-it@npm:14.2.0" + dependencies: + argparse: "npm:^2.0.1" + entities: "npm:^4.4.0" + linkify-it: "npm:^5.0.1" + mdurl: "npm:^2.0.0" + punycode.js: "npm:^2.3.1" + uc.micro: "npm:^2.1.0" + bin: + markdown-it: bin/markdown-it.mjs + checksum: 10c0/1d3a50061d2fe4efbcf317aac853dbee6892ed6f5a217570eead723f2ef2dd1c9baaeef5a687cd283480c45c2d20724a73e84a9ed72843cf7b3b719067af40ef + languageName: node + linkType: hard + +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f + languageName: node + linkType: hard + +"mdurl@npm:^2.0.0": + version: 2.0.0 + resolution: "mdurl@npm:2.0.0" + checksum: 10c0/633db522272f75ce4788440669137c77540d74a83e9015666a9557a152c02e245b192edc20bc90ae953bbab727503994a53b236b4d9c99bdaee594d0e7dd2ce0 + languageName: node + linkType: hard + +"media-typer@npm:^1.1.0": + version: 1.1.0 + resolution: "media-typer@npm:1.1.0" + checksum: 10c0/7b4baa40b25964bb90e2121ee489ec38642127e48d0cc2b6baa442688d3fde6262bfdca86d6bbf6ba708784afcac168c06840c71facac70e390f5f759ac121b9 + languageName: node + linkType: hard + +"merge-descriptors@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-descriptors@npm:2.0.0" + checksum: 10c0/95389b7ced3f9b36fbdcf32eb946dc3dd1774c2fdf164609e55b18d03aa499b12bd3aae3a76c1c7185b96279e9803525550d3eb292b5224866060a288f335cb3 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + +"micromatch@npm:^4.0.8": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-db@npm:^1.54.0": + version: 1.54.0 + resolution: "mime-db@npm:1.54.0" + checksum: 10c0/8d907917bc2a90fa2df842cdf5dfeaf509adc15fe0531e07bb2f6ab15992416479015828d6a74200041c492e42cce3ebf78e5ce714388a0a538ea9c53eece284 + languageName: node + linkType: hard + +"mime-types@npm:^2.1.35": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + +"mime-types@npm:^3.0.0, mime-types@npm:^3.0.2": + version: 3.0.2 + resolution: "mime-types@npm:3.0.2" + dependencies: + mime-db: "npm:^1.54.0" + checksum: 10c0/35a0dd1035d14d185664f346efcdb72e93ef7a9b6e9ae808bd1f6358227010267fab52657b37562c80fc888ff76becb2b2938deb5e730818b7983bf8bd359767 + languageName: node + linkType: hard + +"mime@npm:^1.4.1": + version: 1.6.0 + resolution: "mime@npm:1.6.0" + bin: + mime: cli.js + checksum: 10c0/b92cd0adc44888c7135a185bfd0dddc42c32606401c72896a842ae15da71eb88858f17669af41e498b463cd7eb998f7b48939a25b08374c7924a9c8a6f8a81b0 + languageName: node + linkType: hard + +"mime@npm:^3.0.0": + version: 3.0.0 + resolution: "mime@npm:3.0.0" + bin: + mime: cli.js + checksum: 10c0/402e792a8df1b2cc41cb77f0dcc46472b7944b7ec29cb5bbcd398624b6b97096728f1239766d3fdeb20551dd8d94738344c195a6ea10c4f906eb0356323b0531 + languageName: node + linkType: hard + +"mimic-function@npm:^5.0.0": + version: 5.0.1 + resolution: "mimic-function@npm:5.0.1" + checksum: 10c0/f3d9464dd1816ecf6bdf2aec6ba32c0728022039d992f178237d8e289b48764fee4131319e72eedd4f7f094e22ded0af836c3187a7edc4595d28dd74368fd81d + languageName: node + linkType: hard + +"minimatch@npm:^10.0.3, minimatch@npm:^10.1.1, minimatch@npm:^10.2.2, minimatch@npm:^10.2.4": + version: 10.2.5 + resolution: "minimatch@npm:10.2.5" + dependencies: + brace-expansion: "npm:^5.0.5" + checksum: 10c0/6bb058bd6324104b9ec2f763476a35386d05079c1f5fe4fbf1f324a25237cd4534d6813ecd71f48208f4e635c1221899bef94c3c89f7df55698fe373aaae20fd + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4": + version: 9.0.9 + resolution: "minimatch@npm:9.0.9" + dependencies: + brace-expansion: "npm:^2.0.2" + checksum: 10c0/0b6a58530dbb00361745aa6c8cffaba4c90f551afe7c734830bd95fd88ebf469dd7355a027824ea1d09e37181cfeb0a797fb17df60c15ac174303ac110eb7e86 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^5.0.0": + version: 5.0.2 + resolution: "minipass-fetch@npm:5.0.2" + dependencies: + iconv-lite: "npm:^0.7.2" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^2.0.0" + minizlib: "npm:^3.0.1" + dependenciesMeta: + iconv-lite: + optional: true + checksum: 10c0/ce4ab9f21cfabaead2097d95dd33f485af8072fbc6b19611bce694965393453a1639d641c2bcf1c48f2ea7d41ea7fab8278373f1d0bee4e63b0a5b2cdd0ef649 + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.7 + resolution: "minipass-flush@npm:1.0.7" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/960915c02aa0991662c37c404517dd93708d17f96533b2ca8c1e776d158715d8107c5ced425ffc61674c167d93607f07f48a83c139ce1057f8781e5dfb4b90c2 + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^2.0.0": + version: 2.0.0 + resolution: "minipass-sized@npm:2.0.0" + dependencies: + minipass: "npm:^7.1.2" + checksum: 10c0/f9201696a6f6d68610d04c9c83e3d2e5cb9c026aae1c8cbf7e17f386105cb79c1bb088dbc21bf0b1eb4f3fb5df384fd1e7aa3bf1f33868c416ae8c8a92679db8 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2, minipass@npm:^7.1.3": + version: 7.1.3 + resolution: "minipass@npm:7.1.3" + checksum: 10c0/539da88daca16533211ea5a9ee98dc62ff5742f531f54640dd34429e621955e91cc280a91a776026264b7f9f6735947629f920944e9c1558369e8bf22eb33fbb + languageName: node + linkType: hard + +"minizlib@npm:^3.0.1, minizlib@npm:^3.1.0": + version: 3.1.0 + resolution: "minizlib@npm:3.1.0" + dependencies: + minipass: "npm:^7.1.2" + checksum: 10c0/5aad75ab0090b8266069c9aabe582c021ae53eb33c6c691054a13a45db3b4f91a7fb1bd79151e6b4e9e9a86727b522527c0a06ec7d45206b745d54cd3097bcec + languageName: node + linkType: hard + +"mrmime@npm:2.0.1": + version: 2.0.1 + resolution: "mrmime@npm:2.0.1" + checksum: 10c0/af05afd95af202fdd620422f976ad67dc18e6ee29beb03dd1ce950ea6ef664de378e44197246df4c7cdd73d47f2e7143a6e26e473084b9e4aa2095c0ad1e1761 + languageName: node + linkType: hard + +"ms@npm:^2.1.1, ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"msgpackr-extract@npm:^3.0.2": + version: 3.0.4 + resolution: "msgpackr-extract@npm:3.0.4" + dependencies: + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "npm:3.0.4" + "@msgpackr-extract/msgpackr-extract-darwin-x64": "npm:3.0.4" + "@msgpackr-extract/msgpackr-extract-linux-arm": "npm:3.0.4" + "@msgpackr-extract/msgpackr-extract-linux-arm64": "npm:3.0.4" + "@msgpackr-extract/msgpackr-extract-linux-x64": "npm:3.0.4" + "@msgpackr-extract/msgpackr-extract-win32-x64": "npm:3.0.4" + node-gyp: "npm:latest" + node-gyp-build-optional-packages: "npm:5.2.2" + dependenciesMeta: + "@msgpackr-extract/msgpackr-extract-darwin-arm64": + optional: true + "@msgpackr-extract/msgpackr-extract-darwin-x64": + optional: true + "@msgpackr-extract/msgpackr-extract-linux-arm": + optional: true + "@msgpackr-extract/msgpackr-extract-linux-arm64": + optional: true + "@msgpackr-extract/msgpackr-extract-linux-x64": + optional: true + "@msgpackr-extract/msgpackr-extract-win32-x64": + optional: true + bin: + download-msgpackr-prebuilds: bin/download-prebuilds.js + checksum: 10c0/582a9d17abbf3019e600e948736695056280ce401fd0235ee2474e95f9952208b9f6cce4d0e355b03b7d3c5630e6c3d11fe5fc27fdedb2311cce48de464338d8 + languageName: node + linkType: hard + +"msgpackr@npm:^1.11.2": + version: 1.12.1 + resolution: "msgpackr@npm:1.12.1" + dependencies: + msgpackr-extract: "npm:^3.0.2" + dependenciesMeta: + msgpackr-extract: + optional: true + checksum: 10c0/145a6477ff46ad3154b999ad9f1d80070f50b01f5a12975aad683455fa8968f3e12503d8397a8828bc15fd297da9694fc7b8ae9f21d3df64f559caa10a3a4731 + languageName: node + linkType: hard + +"mute-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "mute-stream@npm:2.0.0" + checksum: 10c0/2cf48a2087175c60c8dcdbc619908b49c07f7adcfc37d29236b0c5c612d6204f789104c98cc44d38acab7b3c96f4a3ec2cfdc4934d0738d876dbefa2a12c69f4 + languageName: node + linkType: hard + +"nanoid@npm:^3.3.12": + version: 3.3.12 + resolution: "nanoid@npm:3.3.12" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/ba142b7b39e11e80c16dd74b0365d407880c87c1cf7e1480956981ae940ee36060fa5b6f092cd1e315184dd19244c657bd017d03327bd3c62247d691c5e8edfb + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 + languageName: node + linkType: hard + +"needle@npm:^3.1.0": + version: 3.5.0 + resolution: "needle@npm:3.5.0" + dependencies: + iconv-lite: "npm:^0.6.3" + sax: "npm:^1.2.4" + bin: + needle: bin/needle + checksum: 10c0/06d489a73851f2953f34cf8ffe213fce9b0090b6b2680b089ea9efa60aff0a5ec721ec051f5c678b0af814779876531225f4394d925956a735ac0751375477c2 + languageName: node + linkType: hard + +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b + languageName: node + linkType: hard + +"ng-packagr@npm:^22.0.0": + version: 22.0.0 + resolution: "ng-packagr@npm:22.0.0" + dependencies: + "@ampproject/remapping": "npm:^2.3.0" + "@rollup/plugin-json": "npm:^6.1.0" + "@rollup/wasm-node": "npm:^4.24.0" + ajv: "npm:^8.17.1" + browserslist: "npm:^4.26.0" + chokidar: "npm:^5.0.0" + commander: "npm:^14.0.0" + dependency-graph: "npm:^1.0.0" + esbuild: "npm:^0.28.0" + find-cache-directory: "npm:^6.0.0" + injection-js: "npm:^2.4.0" + jsonc-parser: "npm:^3.3.1" + less: "npm:^4.2.0" + ora: "npm:^9.0.0" + piscina: "npm:^5.0.0" + postcss: "npm:^8.4.47" + rollup: "npm:^4.24.0" + rollup-plugin-dts: "npm:^6.4.0" + rxjs: "npm:^7.8.1" + sass: "npm:^1.81.0" + tinyglobby: "npm:^0.2.12" + peerDependencies: + "@angular/compiler-cli": ^22.0.0 || ^22.1.0-next.0 + tailwindcss: ^2.0.0 || ^3.0.0 || ^4.0.0 + tslib: ^2.3.0 + typescript: ">=6.0 <6.1" + dependenciesMeta: + rollup: + optional: true + peerDependenciesMeta: + tailwindcss: + optional: true + bin: + ng-packagr: src/cli/main.js + checksum: 10c0/a6906d96836439667ae312140c39db451b50213ac2cd465372739106524cb3e5c566a11e491bea17d4a64fd5f5d7eba05383f26a0af2156383b1643308624568 + languageName: node + linkType: hard + +"ng2-charts@npm:^10.0.0": + version: 10.0.0 + resolution: "ng2-charts@npm:10.0.0" + dependencies: + es-toolkit: "npm:^1.39.7" + tslib: "npm:^2.3.0" + peerDependencies: + "@angular/cdk": ">=21.0.0" + "@angular/common": ">=21.0.0" + "@angular/core": ">=21.0.0" + "@angular/platform-browser": ">=21.0.0" + chart.js: ^3.4.0 || ^4.0.0 + rxjs: ^6.5.3 || ^7.4.0 + checksum: 10c0/c39a9350fd31c4517f486d38b7c70009236fcb4c824ff531cd903c2fb1e8fd3ed65017a2b00376742a682704e5e27523ce6377c843ce86a6cbfdba00910a4477 + languageName: node + linkType: hard + +"node-addon-api@npm:^6.1.0": + version: 6.1.0 + resolution: "node-addon-api@npm:6.1.0" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/d2699c4ad15740fd31482a3b6fca789af7723ab9d393adc6ac45250faaee72edad8f0b10b2b9d087df0de93f1bdc16d97afdd179b26b9ebc9ed68b569faa4bac + languageName: node + linkType: hard + +"node-addon-api@npm:^7.0.0": + version: 7.1.1 + resolution: "node-addon-api@npm:7.1.1" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/fb32a206276d608037fa1bcd7e9921e177fe992fc610d098aa3128baca3c0050fc1e014fa007e9b3874cf865ddb4f5bd9f43ccb7cbbbe4efaff6a83e920b17e9 + languageName: node + linkType: hard + +"node-domexception@npm:^1.0.0": + version: 1.0.0 + resolution: "node-domexception@npm:1.0.0" + checksum: 10c0/5e5d63cda29856402df9472335af4bb13875e1927ad3be861dc5ebde38917aecbf9ae337923777af52a48c426b70148815e890a5d72760f1b4d758cc671b1a2b + languageName: node + linkType: hard + +"node-fetch@npm:^2.6.9": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 + languageName: node + linkType: hard + +"node-fetch@npm:^3.3.2": + version: 3.3.2 + resolution: "node-fetch@npm:3.3.2" + dependencies: + data-uri-to-buffer: "npm:^4.0.0" + fetch-blob: "npm:^3.1.4" + formdata-polyfill: "npm:^4.0.10" + checksum: 10c0/f3d5e56190562221398c9f5750198b34cf6113aa304e34ee97c94fd300ec578b25b2c2906edba922050fce983338fde0d5d34fcb0fc3336ade5bd0e429ad7538 + languageName: node + linkType: hard + +"node-gyp-build-optional-packages@npm:5.2.2": + version: 5.2.2 + resolution: "node-gyp-build-optional-packages@npm:5.2.2" + dependencies: + detect-libc: "npm:^2.0.1" + bin: + node-gyp-build-optional-packages: bin.js + node-gyp-build-optional-packages-optional: optional.js + node-gyp-build-optional-packages-test: build-test.js + checksum: 10c0/c81128c6f91873381be178c5eddcbdf66a148a6a89a427ce2bcd457593ce69baf2a8662b6d22cac092d24aa9c43c230dec4e69b3a0da604503f4777cd77e282b + languageName: node + linkType: hard + +"node-gyp@npm:^12.1.0": + version: 12.4.0 + resolution: "node-gyp@npm:12.4.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + graceful-fs: "npm:^4.2.6" + nopt: "npm:^9.0.0" + proc-log: "npm:^6.0.0" + semver: "npm:^7.3.5" + tar: "npm:^7.5.4" + tinyglobby: "npm:^0.2.12" + undici: "npm:^6.25.0" + which: "npm:^6.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/9acb7c798e124275a6f9c1f7eb64b5abd6196bb885a3945fb44ee0dccf435514e88cdfb0f228ee7ff76ef25107c1f39ff37a067bf92fd00b9aff9234db29ff9e + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 13.0.0 + resolution: "node-gyp@npm:13.0.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + graceful-fs: "npm:^4.2.6" + nopt: "npm:^10.0.0" + proc-log: "npm:^7.0.0" + semver: "npm:^7.3.5" + tar: "npm:^7.5.4" + tinyglobby: "npm:^0.2.12" + undici: "npm:^6.25.0" + which: "npm:^7.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/e7525c427db2d16aa368b8947187de83083d2a8dda23e3e096a71c22ae637ac5bb8ed7cf6c871f1b9118cd2729dbfee4ff3a4245e2b79226900227b15831b492 + languageName: node + linkType: hard + +"node-releases@npm:^2.0.36": + version: 2.0.47 + resolution: "node-releases@npm:2.0.47" + checksum: 10c0/fb1a703adb88c3bfe73aa39ebe0a0bc6d59c9d20d74ad61fb50958ffb22840da82a7a256076840b84c8ed57bb80e6fc8e588e675712fcf7af269aab16206b9b5 + languageName: node + linkType: hard + +"nopt@npm:^10.0.0": + version: 10.0.1 + resolution: "nopt@npm:10.0.1" + dependencies: + abbrev: "npm:^5.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/980d89257f9587f3e1f77877ddbf905d6aa3b738ec33e49a4fa1a059a0dd82eb28063982b150654a7ae9de386f2ead60e56172db7d37cf56de545f7392a2a26a + languageName: node + linkType: hard + +"nopt@npm:^9.0.0": + version: 9.0.0 + resolution: "nopt@npm:9.0.0" + dependencies: + abbrev: "npm:^4.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/1822eb6f9b020ef6f7a7516d7b64a8036e09666ea55ac40416c36e4b2b343122c3cff0e2f085675f53de1d2db99a2a89a60ccea1d120bcd6a5347bf6ceb4a7fd + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 + languageName: node + linkType: hard + +"npm-bundled@npm:^5.0.0": + version: 5.0.0 + resolution: "npm-bundled@npm:5.0.0" + dependencies: + npm-normalize-package-bin: "npm:^5.0.0" + checksum: 10c0/6408b38343b51d5e329a0a4af4cf19d7872bc9099f6f7553fbadb5d56e69092d5af76fe501fa0817fcb8af29cf3cc8f8806a88031580f54068e5e80abf1ca870 + languageName: node + linkType: hard + +"npm-install-checks@npm:^8.0.0": + version: 8.0.0 + resolution: "npm-install-checks@npm:8.0.0" + dependencies: + semver: "npm:^7.1.1" + checksum: 10c0/a979cbc8fceacedf91bf59c2883f46f3c56bd421869f6664cce66aa605af14f875041730e66f3d1c543d49bdb032cbb147cdb481a17c541780d016bc2df89141 + languageName: node + linkType: hard + +"npm-normalize-package-bin@npm:^5.0.0": + version: 5.0.0 + resolution: "npm-normalize-package-bin@npm:5.0.0" + checksum: 10c0/9cd875669354ce451779495a111dc1622bedf702f7ad8b36b05b4037a2c961356361cff49c1e2e77d90b80194dffd18fdb52f16bf64e00ccffe6129003a55248 + languageName: node + linkType: hard + +"npm-package-arg@npm:13.0.2, npm-package-arg@npm:^13.0.0": + version: 13.0.2 + resolution: "npm-package-arg@npm:13.0.2" + dependencies: + hosted-git-info: "npm:^9.0.0" + proc-log: "npm:^6.0.0" + semver: "npm:^7.3.5" + validate-npm-package-name: "npm:^7.0.0" + checksum: 10c0/bf4ecdbfac876250f17710c6d0fac014bb345555acc80ce3b9e685d828107f3682378a9c413278c2fe4e958f4aad261677769be9a2b7c3965ab219b5bb852197 + languageName: node + linkType: hard + +"npm-packlist@npm:^10.0.1": + version: 10.0.4 + resolution: "npm-packlist@npm:10.0.4" + dependencies: + ignore-walk: "npm:^8.0.0" + proc-log: "npm:^6.0.0" + checksum: 10c0/500ec00ed5edc3f7136255a8c17dfd36fb718182af61a86a68768aa3b325f69739953fe8888fa8e4765db00e7892a9d0a30093b145d091b23e96b7d1bbf1187e + languageName: node + linkType: hard + +"npm-pick-manifest@npm:^11.0.1": + version: 11.0.3 + resolution: "npm-pick-manifest@npm:11.0.3" + dependencies: + npm-install-checks: "npm:^8.0.0" + npm-normalize-package-bin: "npm:^5.0.0" + npm-package-arg: "npm:^13.0.0" + semver: "npm:^7.3.5" + checksum: 10c0/214a9966de69bbb1e3c4ade8f33e99fefa1bdc7cbef480e4d2dc3fa63104e05f94bd84b56814c13b20bf838398bfc72f39691cb5d06d7c17333fe0ee33fe3e71 + languageName: node + linkType: hard + +"npm-registry-fetch@npm:^19.0.0": + version: 19.1.1 + resolution: "npm-registry-fetch@npm:19.1.1" + dependencies: + "@npmcli/redact": "npm:^4.0.0" + jsonparse: "npm:^1.3.1" + make-fetch-happen: "npm:^15.0.0" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^5.0.0" + minizlib: "npm:^3.0.1" + npm-package-arg: "npm:^13.0.0" + proc-log: "npm:^6.0.0" + checksum: 10c0/19903dc5cfd6cfc0d6922e4eeac042e95461f4cc58d280e6d6585e187a839a1d039c6a25b909157d7d655016aec8a8a5f3fa75f62cffa87ac133f95842e12b2c + languageName: node + linkType: hard + +"nth-check@npm:^2.1.1": + version: 2.1.1 + resolution: "nth-check@npm:2.1.1" + dependencies: + boolbase: "npm:^1.0.0" + checksum: 10c0/5fee7ff309727763689cfad844d979aedd2204a817fbaaf0e1603794a7c20db28548d7b024692f953557df6ce4a0ee4ae46cd8ebd9b36cfb300b9226b567c479 + languageName: node + linkType: hard + +"object-assign@npm:^4": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 + languageName: node + linkType: hard + +"object-hash@npm:^3.0.0": + version: 3.0.0 + resolution: "object-hash@npm:3.0.0" + checksum: 10c0/a06844537107b960c1c8b96cd2ac8592a265186bfa0f6ccafe0d34eabdb526f6fa81da1f37c43df7ed13b12a4ae3457a16071603bcd39d8beddb5f08c37b0f47 + languageName: node + linkType: hard + +"object-inspect@npm:^1.13.3, object-inspect@npm:^1.13.4": + version: 1.13.4 + resolution: "object-inspect@npm:1.13.4" + checksum: 10c0/d7f8711e803b96ea3191c745d6f8056ce1f2496e530e6a19a0e92d89b0fa3c76d910c31f0aa270432db6bd3b2f85500a376a83aaba849a8d518c8845b3211692 + languageName: node + linkType: hard + +"on-finished@npm:^2.4.1": + version: 2.4.1 + resolution: "on-finished@npm:2.4.1" + dependencies: + ee-first: "npm:1.1.1" + checksum: 10c0/46fb11b9063782f2d9968863d9cbba33d77aa13c17f895f56129c274318b86500b22af3a160fe9995aa41317efcd22941b6eba747f718ced08d9a73afdb087b4 + languageName: node + linkType: hard + +"once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 + languageName: node + linkType: hard + +"onetime@npm:^7.0.0": + version: 7.0.0 + resolution: "onetime@npm:7.0.0" + dependencies: + mimic-function: "npm:^5.0.0" + checksum: 10c0/5cb9179d74b63f52a196a2e7037ba2b9a893245a5532d3f44360012005c9cadb60851d56716ebff18a6f47129dab7168022445df47c2aff3b276d92585ed1221 + languageName: node + linkType: hard + +"optionator@npm:^0.9.3": + version: 0.9.4 + resolution: "optionator@npm:0.9.4" + dependencies: + deep-is: "npm:^0.1.3" + fast-levenshtein: "npm:^2.0.6" + levn: "npm:^0.4.1" + prelude-ls: "npm:^1.2.1" + type-check: "npm:^0.4.0" + word-wrap: "npm:^1.2.5" + checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 + languageName: node + linkType: hard + +"ora@npm:9.3.0": + version: 9.3.0 + resolution: "ora@npm:9.3.0" + dependencies: + chalk: "npm:^5.6.2" + cli-cursor: "npm:^5.0.0" + cli-spinners: "npm:^3.2.0" + is-interactive: "npm:^2.0.0" + is-unicode-supported: "npm:^2.1.0" + log-symbols: "npm:^7.0.1" + stdin-discarder: "npm:^0.3.1" + string-width: "npm:^8.1.0" + checksum: 10c0/1d25c0f43e20389757285f740686958bce78ccb9d03dda190ecc92ae585cbc498fa54cf13933fea2f96cb97a0be82e927cf0fd8c96217459f9c43d915a380531 + languageName: node + linkType: hard + +"ora@npm:^9.0.0": + version: 9.4.0 + resolution: "ora@npm:9.4.0" + dependencies: + chalk: "npm:^5.6.2" + cli-cursor: "npm:^5.0.0" + cli-spinners: "npm:^3.2.0" + is-interactive: "npm:^2.0.0" + is-unicode-supported: "npm:^2.1.0" + log-symbols: "npm:^7.0.1" + stdin-discarder: "npm:^0.3.2" + string-width: "npm:^8.1.0" + checksum: 10c0/8f2d7a8869cd68607797ac0ffe9f5cdceeb6009437672510d9920aea794cdd055164e3fe804248624c4940a71b22f94f1ffd94ce8fecf0746baef97a5c121a91 + languageName: node + linkType: hard + +"ordered-binary@npm:^1.5.3": + version: 1.6.1 + resolution: "ordered-binary@npm:1.6.1" + checksum: 10c0/27aca7a681b859acdc3607784288462662a4a0575b1c727ef8710c3e81e3a7703d2d64e4401dbba049c50d4ec4d89acbe198fdf5ca975a4709962ecfc42f2bbf + languageName: node + linkType: hard + +"p-limit@npm:^3.0.1, p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: "npm:^3.0.2" + checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a + languageName: node + linkType: hard + +"p-map@npm:^7.0.2": + version: 7.0.4 + resolution: "p-map@npm:7.0.4" + checksum: 10c0/a5030935d3cb2919d7e89454d1ce82141e6f9955413658b8c9403cfe379283770ed3048146b44cde168aa9e8c716505f196d5689db0ae3ce9a71521a2fef3abd + languageName: node + linkType: hard + +"p-retry@npm:^4.6.2": + version: 4.6.2 + resolution: "p-retry@npm:4.6.2" + dependencies: + "@types/retry": "npm:0.12.0" + retry: "npm:^0.13.1" + checksum: 10c0/d58512f120f1590cfedb4c2e0c42cb3fa66f3cea8a4646632fcb834c56055bb7a6f138aa57b20cc236fb207c9d694e362e0b5c2b14d9b062f67e8925580c73b0 + languageName: node + linkType: hard + +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b + languageName: node + linkType: hard + +"pacote@npm:21.3.1": + version: 21.3.1 + resolution: "pacote@npm:21.3.1" + dependencies: + "@npmcli/git": "npm:^7.0.0" + "@npmcli/installed-package-contents": "npm:^4.0.0" + "@npmcli/package-json": "npm:^7.0.0" + "@npmcli/promise-spawn": "npm:^9.0.0" + "@npmcli/run-script": "npm:^10.0.0" + cacache: "npm:^20.0.0" + fs-minipass: "npm:^3.0.0" + minipass: "npm:^7.0.2" + npm-package-arg: "npm:^13.0.0" + npm-packlist: "npm:^10.0.1" + npm-pick-manifest: "npm:^11.0.1" + npm-registry-fetch: "npm:^19.0.0" + proc-log: "npm:^6.0.0" + promise-retry: "npm:^2.0.1" + sigstore: "npm:^4.0.0" + ssri: "npm:^13.0.0" + tar: "npm:^7.4.3" + bin: + pacote: bin/index.js + checksum: 10c0/395d4ce333e61ea44f9563ab68be9c64b00a823ff3f6d276358caddd4c472b0fdcbda129a8c27d8a0242c17e97a8c41cfe9f802d8989626fc9c272c003eaa468 + languageName: node + linkType: hard + +"parse-node-version@npm:^1.0.1": + version: 1.0.1 + resolution: "parse-node-version@npm:1.0.1" + checksum: 10c0/999cd3d7da1425c2e182dce82b226c6dc842562d3ed79ec47f5c719c32a7f6c1a5352495b894fc25df164be7f2ede4224758255da9902ddef81f2b77ba46bb2c + languageName: node + linkType: hard + +"parse5-html-rewriting-stream@npm:8.0.0": + version: 8.0.0 + resolution: "parse5-html-rewriting-stream@npm:8.0.0" + dependencies: + entities: "npm:^6.0.0" + parse5: "npm:^8.0.0" + parse5-sax-parser: "npm:^8.0.0" + checksum: 10c0/45f685115000c7e8c0b37243062589e486638e6337373553104cbd177ae314c2f0fecad812023394759882a7bb64d5c4dfa55a5146ebfc0e1de4a4d94b0e9b44 + languageName: node + linkType: hard + +"parse5-sax-parser@npm:^8.0.0": + version: 8.0.0 + resolution: "parse5-sax-parser@npm:8.0.0" + dependencies: + parse5: "npm:^8.0.0" + checksum: 10c0/beb228bbe2ce81ace711ed00f12afde779fbd93b1f381a7f68b6344ab07b98f1832cb1d90ef418cbf3e0a9f6f1ce8f75e016a966c727882c78151157305a44fe + languageName: node + linkType: hard + +"parse5@npm:^8.0.0": + version: 8.0.1 + resolution: "parse5@npm:8.0.1" + dependencies: + entities: "npm:^8.0.0" + checksum: 10c0/c3c1c5aab55f6e4be5245599790e56e64be7764a4a0edd7f98db4fe3bb380f63add752fa047dff0496446c25f4104f0c7c1967723de640bde92306a7bb67ed2f + languageName: node + linkType: hard + +"parseurl@npm:^1.3.3": + version: 1.3.3 + resolution: "parseurl@npm:1.3.3" + checksum: 10c0/90dd4760d6f6174adb9f20cf0965ae12e23879b5f5464f38e92fce8073354341e4b3b76fa3d878351efe7d01e617121955284cfd002ab087fba1a0726ec0b4f5 + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + +"path-expression-matcher@npm:^1.5.0": + version: 1.5.0 + resolution: "path-expression-matcher@npm:1.5.0" + checksum: 10c0/646cb5bc66cd7d809a52288336f3ac1e6223f156fd8e912936e490e590f7f93e8056d4fd25fcbcc7da61bb698fa520112cb050372a3f65e7b79bd4afa0f77610 + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d + languageName: node + linkType: hard + +"path-scurry@npm:^2.0.2": + version: 2.0.2 + resolution: "path-scurry@npm:2.0.2" + dependencies: + lru-cache: "npm:^11.0.0" + minipass: "npm:^7.1.2" + checksum: 10c0/b35ad37cf6557a87fd057121ce2be7695380c9138d93e87ae928609da259ea0a170fac6f3ef1eb3ece8a068e8b7f2f3adf5bb2374cf4d4a57fe484954fcc9482 + languageName: node + linkType: hard + +"path-to-regexp@npm:^8.0.0": + version: 8.4.2 + resolution: "path-to-regexp@npm:8.4.2" + checksum: 10c0/05b115c49b47ad252ce05faa32930f643f23769c68b8bcfe78ad833545140c48bbffb3266986d6c8d5db13a64cf12e07e0d72d9882cab830efeefa553533ebaf + languageName: node + linkType: hard + +"personalized-learning-demo@workspace:client/lit/personalized_learning": + version: 0.0.0-use.local + resolution: "personalized-learning-demo@workspace:client/lit/personalized_learning" + dependencies: + "@a2ui/lit": "npm:^0.10.0" + "@google/genai": "npm:^2.8.0" + "@lit-labs/signals": "npm:^0.3.0" + "@lit/context": "npm:^1.1.6" + "@types/node": "npm:^25.9.3" + concurrently: "npm:^10.0.3" + dotenv: "npm:^17.4.2" + firebase: "npm:^12.14.0" + firebase-admin: "npm:^14.0.0" + google-auth-library: "npm:^10.7.0" + lit: "npm:^3.3.3" + tsx: "npm:^4.22.4" + typescript: "npm:5.9.3" + vite: "npm:^8.0.16" + wireit: "npm:^0.15.0-pre.2" + languageName: unknown + linkType: soft + +"picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + +"picomatch@npm:4.0.4, picomatch@npm:^4.0.2, picomatch@npm:^4.0.3, picomatch@npm:^4.0.4": + version: 4.0.4 + resolution: "picomatch@npm:4.0.4" + checksum: 10c0/e2c6023372cc7b5764719a5ffb9da0f8e781212fa7ca4bd0562db929df8e117460f00dff3cb7509dacfc06b86de924b247f504d0ce1806a37fac4633081466b0 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": + version: 2.3.2 + resolution: "picomatch@npm:2.3.2" + checksum: 10c0/a554d1709e59be97d1acb9eaedbbc700a5c03dbd4579807baed95100b00420bc729335440ef15004ae2378984e2487a7c1cebd743cfdb72b6fa9ab69223c0d61 + languageName: node + linkType: hard + +"pify@npm:^4.0.1": + version: 4.0.1 + resolution: "pify@npm:4.0.1" + checksum: 10c0/6f9d404b0d47a965437403c9b90eca8bb2536407f03de165940e62e72c8c8b75adda5516c6b9b23675a5877cc0bcac6bdfb0ef0e39414cd2476d5495da40e7cf + languageName: node + linkType: hard + +"piscina@npm:5.1.4": + version: 5.1.4 + resolution: "piscina@npm:5.1.4" + dependencies: + "@napi-rs/nice": "npm:^1.0.4" + dependenciesMeta: + "@napi-rs/nice": + optional: true + checksum: 10c0/5de5673bfea6ed045e4fe5b63c1bfab0f287862d689a3ebfb15848ff20b78ecff0735fe673edb209a921b113bb0b3b3455f8bb710cb3b78f66178f8785686e8f + languageName: node + linkType: hard + +"piscina@npm:^5.0.0": + version: 5.2.0 + resolution: "piscina@npm:5.2.0" + dependencies: + "@napi-rs/nice": "npm:^1.0.4" + dependenciesMeta: + "@napi-rs/nice": + optional: true + checksum: 10c0/61f4377dc7aeff2b3f71c2c03861fad97786b6fdad8a320e6281dd77bcadd4f2c8260a6274184d1c74ea30fddc293f30b10978f371b45a367b03145de3c84d1e + languageName: node + linkType: hard + +"pkce-challenge@npm:^5.0.0": + version: 5.0.1 + resolution: "pkce-challenge@npm:5.0.1" + checksum: 10c0/207f4cb976682f27e8324eb49cf71937c98fbb8341a0b8f6142bc6f664825b30e049a54a21b5c034e823ee3c3d412f10d74bd21de78e17452a6a496c2991f57c + languageName: node + linkType: hard + +"pkg-dir@npm:^8.0.0": + version: 8.0.0 + resolution: "pkg-dir@npm:8.0.0" + dependencies: + find-up-simple: "npm:^1.0.0" + checksum: 10c0/244c6af67540b7eeab823c56f61a6ca414fe48108a484bcb3b0743acc0dfaf106705555c353d65608ccd8ac3d9f696110e9b6bf55ef08f5f6a8d535a72a418e8 + languageName: node + linkType: hard + +"postcss-media-query-parser@npm:^0.2.3": + version: 0.2.3 + resolution: "postcss-media-query-parser@npm:0.2.3" + checksum: 10c0/252c8cf24f0e9018516b0d70b7b3d6f5b52e81c4bab2164b49a4e4c1b87bb11f5dbe708c0076990665cb24c70d5fd2f3aee9c922b0f67c7c619e051801484688 + languageName: node + linkType: hard + +"postcss-safe-parser@npm:^7.0.1": + version: 7.0.1 + resolution: "postcss-safe-parser@npm:7.0.1" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/6957b10b818bd8d4664ec0e548af967f7549abedfb37f844d389571d36af681340f41f9477b9ccf34bcc7599bdef222d1d72e79c64373001fae77089fba6d965 + languageName: node + linkType: hard + +"postcss@npm:^8.4.47, postcss@npm:^8.4.49, postcss@npm:^8.5.15, postcss@npm:^8.5.6": + version: 8.5.15 + resolution: "postcss@npm:8.5.15" + dependencies: + nanoid: "npm:^3.3.12" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10c0/7f2e63ae22fbe43aace1bf652bd99da4e90737c64194d49e51ddc9cd0f9e51ff2861a7d734379b494deffa03a880a5c65eec70bc29ee9ebaa7136dde3eee8f31 + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd + languageName: node + linkType: hard + +"prettier@npm:^3.8.4": + version: 3.8.4 + resolution: "prettier@npm:3.8.4" + bin: + prettier: bin/prettier.cjs + checksum: 10c0/b90a0cbe75b88ac0af9c13fe0f359bd19926fabccd88483227b21f71f0c1cc42da056fc1ac3a361e665577c568371d5ccfb2c62c31c8a1186f8d1bd531a063e9 + languageName: node + linkType: hard + +"proc-log@npm:^6.0.0, proc-log@npm:^6.1.0": + version: 6.1.0 + resolution: "proc-log@npm:6.1.0" + checksum: 10c0/4f178d4062733ead9d71a9b1ab24ebcecdfe2250916a5b1555f04fe2eda972a0ec76fbaa8df1ad9c02707add6749219d118a4fc46dc56bdfe4dde4b47d80bb82 + languageName: node + linkType: hard + +"proc-log@npm:^7.0.0": + version: 7.0.0 + resolution: "proc-log@npm:7.0.0" + checksum: 10c0/b89c2d862604f35fec795477b0c7e376feab3ba0d4f4d291c4e959567442697cf451ac557d0623c1cc38af45a78128b983410f397a10c5d3a67f76c33de4754b + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + +"proper-lockfile@npm:^4.1.2": + version: 4.1.2 + resolution: "proper-lockfile@npm:4.1.2" + dependencies: + graceful-fs: "npm:^4.2.4" + retry: "npm:^0.12.0" + signal-exit: "npm:^3.0.2" + checksum: 10c0/2f265dbad15897a43110a02dae55105c04d356ec4ed560723dcb9f0d34bc4fb2f13f79bb930e7561be10278e2314db5aca2527d5d3dcbbdee5e6b331d1571f6d + languageName: node + linkType: hard + +"proto3-json-serializer@npm:3.0.4": + version: 3.0.4 + resolution: "proto3-json-serializer@npm:3.0.4" + dependencies: + protobufjs: "npm:^7.4.0" + checksum: 10c0/59150d5e6b396e00c0374e71eb4ebd6f33acd4212c0ad2acdda12181b08f923b733559d74ad78455085223efe24168d4d42887a8b8f15f7663f20debe5796081 + languageName: node + linkType: hard + +"protobufjs@npm:^7.2.5, protobufjs@npm:^7.4.0, protobufjs@npm:^7.5.3, protobufjs@npm:^7.5.4, protobufjs@npm:^7.5.5": + version: 7.6.4 + resolution: "protobufjs@npm:7.6.4" + dependencies: + "@protobufjs/aspromise": "npm:^1.1.2" + "@protobufjs/base64": "npm:^1.1.2" + "@protobufjs/codegen": "npm:^2.0.5" + "@protobufjs/eventemitter": "npm:^1.1.1" + "@protobufjs/fetch": "npm:^1.1.1" + "@protobufjs/float": "npm:^1.0.2" + "@protobufjs/path": "npm:^1.1.2" + "@protobufjs/pool": "npm:^1.1.0" + "@protobufjs/utf8": "npm:^1.1.1" + "@types/node": "npm:>=13.7.0" + long: "npm:^5.3.2" + checksum: 10c0/6403eaa9c5a72cc6450c11f38fefafdde243fd806e7ac606ac8d591bc3fdaec45ae764febf83181a2d9aac51aca624e0f46dec368ceea191f7e85e2d6ccaaf93 + languageName: node + linkType: hard + +"proxy-addr@npm:^2.0.7": + version: 2.0.7 + resolution: "proxy-addr@npm:2.0.7" + dependencies: + forwarded: "npm:0.2.0" + ipaddr.js: "npm:1.9.1" + checksum: 10c0/c3eed999781a35f7fd935f398b6d8920b6fb00bbc14287bc6de78128ccc1a02c89b95b56742bf7cf0362cc333c61d138532049c7dedc7a328ef13343eff81210 + languageName: node + linkType: hard + +"prr@npm:~1.0.1": + version: 1.0.1 + resolution: "prr@npm:1.0.1" + checksum: 10c0/5b9272c602e4f4472a215e58daff88f802923b84bc39c8860376bb1c0e42aaf18c25d69ad974bd06ec6db6f544b783edecd5502cd3d184748d99080d68e4be5f + languageName: node + linkType: hard + +"punycode.js@npm:^2.3.1": + version: 2.3.1 + resolution: "punycode.js@npm:2.3.1" + checksum: 10c0/1d12c1c0e06127fa5db56bd7fdf698daf9a78104456a6b67326877afc21feaa821257b171539caedd2f0524027fa38e67b13dd094159c8d70b6d26d2bea4dfdb + languageName: node + linkType: hard + +"punycode@npm:^2.1.0": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 + languageName: node + linkType: hard + +"qs@npm:^6.14.0, qs@npm:^6.14.1": + version: 6.15.2 + resolution: "qs@npm:6.15.2" + dependencies: + side-channel: "npm:^1.1.0" + checksum: 10c0/e6fd5f6f0aab06d480fe9ab15cebfc4ce4235303e2f91dc69a8f7f4df1e668a61c11d1cfbabacf4295cbbeb7b670ed23db45307480726259761f98e5695e93a7 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"range-parser@npm:^1.2.1": + version: 1.2.1 + resolution: "range-parser@npm:1.2.1" + checksum: 10c0/96c032ac2475c8027b7a4e9fe22dc0dfe0f6d90b85e496e0f016fbdb99d6d066de0112e680805075bd989905e2123b3b3d002765149294dce0c1f7f01fcc2ea0 + languageName: node + linkType: hard + +"raw-body@npm:^3.0.0, raw-body@npm:^3.0.1": + version: 3.0.2 + resolution: "raw-body@npm:3.0.2" + dependencies: + bytes: "npm:~3.1.2" + http-errors: "npm:~2.0.1" + iconv-lite: "npm:~0.7.0" + unpipe: "npm:~1.0.0" + checksum: 10c0/d266678d08e1e7abea62c0ce5864344e980fa81c64f6b481e9842c5beaed2cdcf975f658a3ccd67ad35fc919c1f6664ccc106067801850286a6cbe101de89f29 + languageName: node + linkType: hard + +"readable-stream@npm:^3.1.1": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: "npm:^2.0.3" + string_decoder: "npm:^1.1.1" + util-deprecate: "npm:^1.0.1" + checksum: 10c0/e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 + languageName: node + linkType: hard + +"readdirp@npm:^4.0.1": + version: 4.1.2 + resolution: "readdirp@npm:4.1.2" + checksum: 10c0/60a14f7619dec48c9c850255cd523e2717001b0e179dc7037cfa0895da7b9e9ab07532d324bfb118d73a710887d1e35f79c495fa91582784493e085d18c72c62 + languageName: node + linkType: hard + +"readdirp@npm:^5.0.0": + version: 5.0.0 + resolution: "readdirp@npm:5.0.0" + checksum: 10c0/faf1ec57cff2020f473128da3f8d2a57813cc3a08a36c38cae1c9af32c1579906cc50ba75578043b35bade77e945c098233665797cf9730ba3613a62d6e79219 + languageName: node + linkType: hard + +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: "npm:^2.2.1" + checksum: 10c0/6fa848cf63d1b82ab4e985f4cf72bd55b7dcfd8e0a376905804e48c3634b7e749170940ba77b32804d5fe93b3cc521aa95a8d7e7d725f830da6d93f3669ce66b + languageName: node + linkType: hard + +"reflect-metadata@npm:^0.2.0": + version: 0.2.2 + resolution: "reflect-metadata@npm:0.2.2" + checksum: 10c0/1cd93a15ea291e420204955544637c264c216e7aac527470e393d54b4bb075f10a17e60d8168ec96600c7e0b9fcc0cb0bb6e91c3fbf5b0d8c9056f04e6ac1ec2 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: 10c0/aaa267e0c5b022fc5fd4eef49d8285086b15f2a1c54b28240fdf03599cbd9c26049fee3eab894f2e1f6ca65e513b030a7c264201e3f005601e80c49fb2937ce2 + languageName: node + linkType: hard + +"restore-cursor@npm:^5.0.0": + version: 5.1.0 + resolution: "restore-cursor@npm:5.1.0" + dependencies: + onetime: "npm:^7.0.0" + signal-exit: "npm:^4.1.0" + checksum: 10c0/c2ba89131eea791d1b25205bdfdc86699767e2b88dee2a590b1a6caa51737deac8bad0260a5ded2f7c074b7db2f3a626bcf1fcf3cdf35974cbeea5e2e6764f60 + languageName: node + linkType: hard + +"retry-request@npm:^7.0.0": + version: 7.0.2 + resolution: "retry-request@npm:7.0.2" + dependencies: + "@types/request": "npm:^2.48.8" + extend: "npm:^3.0.2" + teeny-request: "npm:^9.0.0" + checksum: 10c0/c79936695a43db1bc82a7bad348a1e0be1c363799be2e1fa87b8c3aeb5dabf0ccb023b811aa5000c000ee73e196b88febff7d3e22cbb63a77175228514256155 + languageName: node + linkType: hard + +"retry-request@npm:^8.0.2": + version: 8.0.3 + resolution: "retry-request@npm:8.0.3" + dependencies: + extend: "npm:^3.0.2" + teeny-request: "npm:^10.0.0" + checksum: 10c0/07853e505dd61c84bfa5962979303dc806d8a05605cf0906b5157aaa73e4db3d39c918f6db81769c043582f4bddc245adae19c794cff39c7290e6ed46cb4b284 + languageName: node + linkType: hard + +"retry@npm:0.13.1, retry@npm:^0.13.1": + version: 0.13.1 + resolution: "retry@npm:0.13.1" + checksum: 10c0/9ae822ee19db2163497e074ea919780b1efa00431d197c7afdb950e42bf109196774b92a49fc9821f0b8b328a98eea6017410bfc5e8a0fc19c85c6d11adb3772 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.1.0 + resolution: "reusify@npm:1.1.0" + checksum: 10c0/4eff0d4a5f9383566c7d7ec437b671cc51b25963bd61bf127c3f3d3f68e44a026d99b8d2f1ad344afff8d278a8fe70a8ea092650a716d22287e8bef7126bb2fa + languageName: node + linkType: hard + +"rfdc@npm:^1.4.1": + version: 1.4.1 + resolution: "rfdc@npm:1.4.1" + checksum: 10c0/4614e4292356cafade0b6031527eea9bc90f2372a22c012313be1dcc69a3b90c7338158b414539be863fa95bfcb2ddcd0587be696841af4e6679d85e62c060c7 + languageName: node + linkType: hard + +"rimraf@npm:^5.0.1": + version: 5.0.10 + resolution: "rimraf@npm:5.0.10" + dependencies: + glob: "npm:^10.3.7" + bin: + rimraf: dist/esm/bin.mjs + checksum: 10c0/7da4fd0e15118ee05b918359462cfa1e7fe4b1228c7765195a45b55576e8c15b95db513b8466ec89129666f4af45ad978a3057a02139afba1a63512a2d9644cc + languageName: node + linkType: hard + +"rolldown@npm:1.0.0-rc.4": + version: 1.0.0-rc.4 + resolution: "rolldown@npm:1.0.0-rc.4" + dependencies: + "@oxc-project/types": "npm:=0.113.0" + "@rolldown/binding-android-arm64": "npm:1.0.0-rc.4" + "@rolldown/binding-darwin-arm64": "npm:1.0.0-rc.4" + "@rolldown/binding-darwin-x64": "npm:1.0.0-rc.4" + "@rolldown/binding-freebsd-x64": "npm:1.0.0-rc.4" + "@rolldown/binding-linux-arm-gnueabihf": "npm:1.0.0-rc.4" + "@rolldown/binding-linux-arm64-gnu": "npm:1.0.0-rc.4" + "@rolldown/binding-linux-arm64-musl": "npm:1.0.0-rc.4" + "@rolldown/binding-linux-x64-gnu": "npm:1.0.0-rc.4" + "@rolldown/binding-linux-x64-musl": "npm:1.0.0-rc.4" + "@rolldown/binding-openharmony-arm64": "npm:1.0.0-rc.4" + "@rolldown/binding-wasm32-wasi": "npm:1.0.0-rc.4" + "@rolldown/binding-win32-arm64-msvc": "npm:1.0.0-rc.4" + "@rolldown/binding-win32-x64-msvc": "npm:1.0.0-rc.4" + "@rolldown/pluginutils": "npm:1.0.0-rc.4" + dependenciesMeta: + "@rolldown/binding-android-arm64": + optional: true + "@rolldown/binding-darwin-arm64": + optional: true + "@rolldown/binding-darwin-x64": + optional: true + "@rolldown/binding-freebsd-x64": + optional: true + "@rolldown/binding-linux-arm-gnueabihf": + optional: true + "@rolldown/binding-linux-arm64-gnu": + optional: true + "@rolldown/binding-linux-arm64-musl": + optional: true + "@rolldown/binding-linux-x64-gnu": + optional: true + "@rolldown/binding-linux-x64-musl": + optional: true + "@rolldown/binding-openharmony-arm64": + optional: true + "@rolldown/binding-wasm32-wasi": + optional: true + "@rolldown/binding-win32-arm64-msvc": + optional: true + "@rolldown/binding-win32-x64-msvc": + optional: true + bin: + rolldown: bin/cli.mjs + checksum: 10c0/1336aedae71b5885036aeff6bbe9d6c58af205f72e8686edb2a3b27e6b4eb056f2f528b50373ad91567696369501f5b18eb99a926343bdb3012b7495962ddcfb + languageName: node + linkType: hard + +"rolldown@npm:1.0.3": + version: 1.0.3 + resolution: "rolldown@npm:1.0.3" + dependencies: + "@oxc-project/types": "npm:=0.133.0" + "@rolldown/binding-android-arm64": "npm:1.0.3" + "@rolldown/binding-darwin-arm64": "npm:1.0.3" + "@rolldown/binding-darwin-x64": "npm:1.0.3" + "@rolldown/binding-freebsd-x64": "npm:1.0.3" + "@rolldown/binding-linux-arm-gnueabihf": "npm:1.0.3" + "@rolldown/binding-linux-arm64-gnu": "npm:1.0.3" + "@rolldown/binding-linux-arm64-musl": "npm:1.0.3" + "@rolldown/binding-linux-ppc64-gnu": "npm:1.0.3" + "@rolldown/binding-linux-s390x-gnu": "npm:1.0.3" + "@rolldown/binding-linux-x64-gnu": "npm:1.0.3" + "@rolldown/binding-linux-x64-musl": "npm:1.0.3" + "@rolldown/binding-openharmony-arm64": "npm:1.0.3" + "@rolldown/binding-wasm32-wasi": "npm:1.0.3" + "@rolldown/binding-win32-arm64-msvc": "npm:1.0.3" + "@rolldown/binding-win32-x64-msvc": "npm:1.0.3" + "@rolldown/pluginutils": "npm:^1.0.0" + dependenciesMeta: + "@rolldown/binding-android-arm64": + optional: true + "@rolldown/binding-darwin-arm64": + optional: true + "@rolldown/binding-darwin-x64": + optional: true + "@rolldown/binding-freebsd-x64": + optional: true + "@rolldown/binding-linux-arm-gnueabihf": + optional: true + "@rolldown/binding-linux-arm64-gnu": + optional: true + "@rolldown/binding-linux-arm64-musl": + optional: true + "@rolldown/binding-linux-ppc64-gnu": + optional: true + "@rolldown/binding-linux-s390x-gnu": + optional: true + "@rolldown/binding-linux-x64-gnu": + optional: true + "@rolldown/binding-linux-x64-musl": + optional: true + "@rolldown/binding-openharmony-arm64": + optional: true + "@rolldown/binding-wasm32-wasi": + optional: true + "@rolldown/binding-win32-arm64-msvc": + optional: true + "@rolldown/binding-win32-x64-msvc": + optional: true + bin: + rolldown: ./bin/cli.mjs + checksum: 10c0/5f9dd47b7abf203b16bc600db68542f245e974c800e59ff50b76157d1dada1403657690435b036fabca88e93d13a67c31abe5cfaa6f61ce33717f61720204cdf + languageName: node + linkType: hard + +"rollup-plugin-dts@npm:^6.4.0": + version: 6.4.1 + resolution: "rollup-plugin-dts@npm:6.4.1" + dependencies: + "@babel/code-frame": "npm:^7.29.0" + "@jridgewell/remapping": "npm:^2.3.5" + "@jridgewell/sourcemap-codec": "npm:^1.5.5" + convert-source-map: "npm:^2.0.0" + magic-string: "npm:^0.30.21" + peerDependencies: + rollup: ^3.29.4 || ^4 + typescript: ^4.5 || ^5.0 || ^6.0 + dependenciesMeta: + "@babel/code-frame": + optional: true + checksum: 10c0/23d51f4780c5878cb31a45103da961e2e1f81fb830d4b53114931060b58ee431e44c561c1215d253477ad884ba50223dd2586fee704763db9a454cb1c6b97a1d + languageName: node + linkType: hard + +"rollup@npm:^4.24.0, rollup@npm:^4.43.0": + version: 4.61.1 + resolution: "rollup@npm:4.61.1" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.61.1" + "@rollup/rollup-android-arm64": "npm:4.61.1" + "@rollup/rollup-darwin-arm64": "npm:4.61.1" + "@rollup/rollup-darwin-x64": "npm:4.61.1" + "@rollup/rollup-freebsd-arm64": "npm:4.61.1" + "@rollup/rollup-freebsd-x64": "npm:4.61.1" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.61.1" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.61.1" + "@rollup/rollup-linux-arm64-gnu": "npm:4.61.1" + "@rollup/rollup-linux-arm64-musl": "npm:4.61.1" + "@rollup/rollup-linux-loong64-gnu": "npm:4.61.1" + "@rollup/rollup-linux-loong64-musl": "npm:4.61.1" + "@rollup/rollup-linux-ppc64-gnu": "npm:4.61.1" + "@rollup/rollup-linux-ppc64-musl": "npm:4.61.1" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.61.1" + "@rollup/rollup-linux-riscv64-musl": "npm:4.61.1" + "@rollup/rollup-linux-s390x-gnu": "npm:4.61.1" + "@rollup/rollup-linux-x64-gnu": "npm:4.61.1" + "@rollup/rollup-linux-x64-musl": "npm:4.61.1" + "@rollup/rollup-openbsd-x64": "npm:4.61.1" + "@rollup/rollup-openharmony-arm64": "npm:4.61.1" + "@rollup/rollup-win32-arm64-msvc": "npm:4.61.1" + "@rollup/rollup-win32-ia32-msvc": "npm:4.61.1" + "@rollup/rollup-win32-x64-gnu": "npm:4.61.1" + "@rollup/rollup-win32-x64-msvc": "npm:4.61.1" + "@types/estree": "npm:1.0.9" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loong64-gnu": + optional: true + "@rollup/rollup-linux-loong64-musl": + optional: true + "@rollup/rollup-linux-ppc64-gnu": + optional: true + "@rollup/rollup-linux-ppc64-musl": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-riscv64-musl": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-openbsd-x64": + optional: true + "@rollup/rollup-openharmony-arm64": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-gnu": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/6f35736125f3c28c5d8ce1c89c9653b282833b93f60fe29fcc20169bac46579b4d4bcfcb2bfb7e36dcfd4a7bbd6d84e4adf58c2bf9e6dbb4a3c1ed5c932ba8c6 + languageName: node + linkType: hard + +"router@npm:^2.2.0": + version: 2.2.0 + resolution: "router@npm:2.2.0" + dependencies: + debug: "npm:^4.4.0" + depd: "npm:^2.0.0" + is-promise: "npm:^4.0.0" + parseurl: "npm:^1.3.3" + path-to-regexp: "npm:^8.0.0" + checksum: 10c0/3279de7450c8eae2f6e095e9edacbdeec0abb5cb7249c6e719faa0db2dba43574b4fff5892d9220631c9abaff52dd3cad648cfea2aaace845e1a071915ac8867 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"rxjs@npm:7.8.2, rxjs@npm:^7.8.1, rxjs@npm:^7.8.2": + version: 7.8.2 + resolution: "rxjs@npm:7.8.2" + dependencies: + tslib: "npm:^2.1.0" + checksum: 10c0/1fcd33d2066ada98ba8f21fcbbcaee9f0b271de1d38dc7f4e256bfbc6ffcdde68c8bfb69093de7eeb46f24b1fb820620bf0223706cff26b4ab99a7ff7b2e2c45 + languageName: node + linkType: hard + +"safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"sass@npm:1.97.3": + version: 1.97.3 + resolution: "sass@npm:1.97.3" + dependencies: + "@parcel/watcher": "npm:^2.4.1" + chokidar: "npm:^4.0.0" + immutable: "npm:^5.0.2" + source-map-js: "npm:>=0.6.2 <2.0.0" + dependenciesMeta: + "@parcel/watcher": + optional: true + bin: + sass: sass.js + checksum: 10c0/67f6b5d220f20c1c23a8b16dda5fd1c5d119ad5caf8195b185d553b5b239fb188a3787f04fc00171c62515f2c4e5e0eb5ad4992a80f8543428556883c1240ba3 + languageName: node + linkType: hard + +"sass@npm:^1.100.0, sass@npm:^1.81.0": + version: 1.101.0 + resolution: "sass@npm:1.101.0" + dependencies: + "@parcel/watcher": "npm:^2.4.1" + chokidar: "npm:^5.0.0" + immutable: "npm:^5.1.5" + source-map-js: "npm:>=0.6.2 <2.0.0" + dependenciesMeta: + "@parcel/watcher": + optional: true + bin: + sass: sass.js + checksum: 10c0/1fbbcef2f767dec4d97773a2a084f4e1ef2e4abecf574e08743e52237069f1129a6b43b07b5c23aa3bcbf395509e40db758d9748a07940da227aa1626329a74d + languageName: node + linkType: hard + +"sax@npm:^1.2.4": + version: 1.6.0 + resolution: "sax@npm:1.6.0" + checksum: 10c0/e5593f4a91eb25761a688c4d96902e4e95a0dd6017bc65146b6f21236e3d715cf893333b76bc758923c9574c2fb5a7a76c3a81e96ea15432f2624f906c027c1e + languageName: node + linkType: hard + +"semver@npm:7.7.4": + version: 7.7.4 + resolution: "semver@npm:7.7.4" + bin: + semver: bin/semver.js + checksum: 10c0/5215ad0234e2845d4ea5bb9d836d42b03499546ddafb12075566899fc617f68794bb6f146076b6881d755de17d6c6cc73372555879ec7dce2c2feee947866ad2 + languageName: node + linkType: hard + +"semver@npm:^5.6.0": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: 10c0/e4cf10f86f168db772ae95d86ba65b3fd6c5967c94d97c708ccb463b778c2ee53b914cd7167620950fc07faf5a564e6efe903836639e512a1aa15fbc9667fa25 + languageName: node + linkType: hard + +"semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d + languageName: node + linkType: hard + +"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4": + version: 7.8.4 + resolution: "semver@npm:7.8.4" + bin: + semver: bin/semver.js + checksum: 10c0/81b7c296fd7927b80f67fa516b75fa1017caac8167795320de28e76ccbc6f7f01763c30ecd10d6a0d8fd089708ab0548a5aebb94b0870e99c2a2b4600a46389b + languageName: node + linkType: hard + +"send@npm:^1.1.0, send@npm:^1.2.0": + version: 1.2.1 + resolution: "send@npm:1.2.1" + dependencies: + debug: "npm:^4.4.3" + encodeurl: "npm:^2.0.0" + escape-html: "npm:^1.0.3" + etag: "npm:^1.8.1" + fresh: "npm:^2.0.0" + http-errors: "npm:^2.0.1" + mime-types: "npm:^3.0.2" + ms: "npm:^2.1.3" + on-finished: "npm:^2.4.1" + range-parser: "npm:^1.2.1" + statuses: "npm:^2.0.2" + checksum: 10c0/fbbbbdc902a913d65605274be23f3d604065cfc3ee3d78bf9fc8af1dc9fc82667c50d3d657f5e601ac657bac9b396b50ee97bd29cd55436320cf1cddebdcec72 + languageName: node + linkType: hard + +"serve-static@npm:^2.2.0": + version: 2.2.1 + resolution: "serve-static@npm:2.2.1" + dependencies: + encodeurl: "npm:^2.0.0" + escape-html: "npm:^1.0.3" + parseurl: "npm:^1.3.3" + send: "npm:^1.2.0" + checksum: 10c0/37986096e8572e2dfaad35a3925fa8da0c0969f8814fd7788e84d4d388bc068cf0c06d1658509788e55bed942a6b6d040a8a267fa92bb9ffb1179f8bacde5fd7 + languageName: node + linkType: hard + +"setprototypeof@npm:~1.2.0": + version: 1.2.0 + resolution: "setprototypeof@npm:1.2.0" + checksum: 10c0/68733173026766fa0d9ecaeb07f0483f4c2dc70ca376b3b7c40b7cda909f94b0918f6c5ad5ce27a9160bdfb475efaa9d5e705a11d8eaae18f9835d20976028bc + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"shell-quote@npm:1.8.4": + version: 1.8.4 + resolution: "shell-quote@npm:1.8.4" + checksum: 10c0/86c93678bc394cb81f5ddcdc87df9c95d279ef9652775cd1cd1eed361404169a8d8cbaacaeed232ab09919e36ee1e5363863570390d78571f8c22b7f6312fb40 + languageName: node + linkType: hard + +"side-channel-list@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-list@npm:1.0.1" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.4" + checksum: 10c0/d346c787fd2f9f1c2fdea14f00e8250118db0e7596d85a6cb9faa75f105d31a73a8f7a341c93d7df2a2429098c3d37a77bd3be9e88c37094b8c01807bc77c7a2 + languageName: node + linkType: hard + +"side-channel-map@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-map@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 + languageName: node + linkType: hard + +"side-channel-weakmap@npm:^1.0.2": + version: 1.0.2 + resolution: "side-channel-weakmap@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + side-channel-map: "npm:^1.0.1" + checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 + languageName: node + linkType: hard + +"side-channel@npm:^1.1.0": + version: 1.1.1 + resolution: "side-channel@npm:1.1.1" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.4" + side-channel-list: "npm:^1.0.1" + side-channel-map: "npm:^1.0.1" + side-channel-weakmap: "npm:^1.0.2" + checksum: 10c0/dc0ab81d67f61bda9247d053ce93f41c3fd8ad2bdcb9cf9d8d2f8540d488f26d87a5e99ebfc07eea49ec025867b2452b705442d974b1478f0395e69f6bfb3270 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.2": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"signal-polyfill@npm:^0.2.0, signal-polyfill@npm:^0.2.2": + version: 0.2.2 + resolution: "signal-polyfill@npm:0.2.2" + checksum: 10c0/485b0e66d93961454af32e7fbff88130138dffcbf7bce35e5c873d760ceb9ce33a125dd63cc59454c739c43246980515b1162cbe0ebc975a974ee036fb58d18a + languageName: node + linkType: hard + +"signal-utils@npm:^0.21.1": + version: 0.21.1 + resolution: "signal-utils@npm:0.21.1" + peerDependencies: + signal-polyfill: ^0.2.0 + checksum: 10c0/e42ea9b4af0b6054eb4e4f7dd97d9fb2c115fba34c024e4ebbf2879785b8e61c1d6562ccddeef185bbd64f80f985b38a3631e35bfdfd317dcd42224c05aed587 + languageName: node + linkType: hard + +"sigstore@npm:^4.0.0": + version: 4.1.1 + resolution: "sigstore@npm:4.1.1" + dependencies: + "@sigstore/bundle": "npm:^4.0.0" + "@sigstore/core": "npm:^3.2.1" + "@sigstore/protobuf-specs": "npm:^0.5.0" + "@sigstore/sign": "npm:^4.1.1" + "@sigstore/tuf": "npm:^4.0.2" + "@sigstore/verify": "npm:^3.1.1" + checksum: 10c0/8ebe0c2a7cb3cf9ed9fb775636ab2ae364cbdea9360ea256ab003d83b83dd5eeda8dd899cffcd3853fe711425c481fab2a74246772d75e3ecb9a9483f6700289 + languageName: node + linkType: hard + +"slice-ansi@npm:^7.1.0": + version: 7.1.2 + resolution: "slice-ansi@npm:7.1.2" + dependencies: + ansi-styles: "npm:^6.2.1" + is-fullwidth-code-point: "npm:^5.0.0" + checksum: 10c0/36742f2eb0c03e2e81a38ed14d13a64f7b732fe38c3faf96cce0599788a345011e840db35f1430ca606ea3f8db2abeb92a8d25c2753a819e3babaa10c2e289a2 + languageName: node + linkType: hard + +"slice-ansi@npm:^8.0.0": + version: 8.0.0 + resolution: "slice-ansi@npm:8.0.0" + dependencies: + ansi-styles: "npm:^6.2.3" + is-fullwidth-code-point: "npm:^5.1.0" + checksum: 10c0/0ce4aa91febb7cea4a00c2c27bb820fa53b6d2862ce0f80f7120134719f7914fc416b0ed966cf35250a3169e152916392f35917a2d7cad0fcc5d8b841010fa9a + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.9 + resolution: "socks@npm:2.8.9" + dependencies: + ip-address: "npm:^10.1.1" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/2d4350c31142b0931eb1758825b426bcbf4bfb5eed682ca48bc46dc9e7d1930ec366ea574ad49fc6c1fd9e9e17ce243be0ef13e31fc4b0319d9093f1fb19743c + languageName: node + linkType: hard + +"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + +"source-map-support@npm:0.5.21": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: "npm:^1.0.0" + source-map: "npm:^0.6.0" + checksum: 10c0/9ee09942f415e0f721d6daad3917ec1516af746a8120bba7bb56278707a37f1eb8642bde456e98454b8a885023af81a16e646869975f06afc1a711fb90484e7d + languageName: node + linkType: hard + +"source-map@npm:0.7.6": + version: 0.7.6 + resolution: "source-map@npm:0.7.6" + checksum: 10c0/59f6f05538539b274ba771d2e9e32f6c65451982510564438e048bc1352f019c6efcdc6dd07909b1968144941c14015c2c7d4369fb7c4d7d53ae769716dcc16c + languageName: node + linkType: hard + +"source-map@npm:^0.6.0, source-map@npm:~0.6.0": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.5.0 + resolution: "spdx-exceptions@npm:2.5.0" + checksum: 10c0/37217b7762ee0ea0d8b7d0c29fd48b7e4dfb94096b109d6255b589c561f57da93bf4e328c0290046115961b9209a8051ad9f525e48d433082fc79f496a4ea940 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^4.0.0": + version: 4.0.0 + resolution: "spdx-expression-parse@npm:4.0.0" + dependencies: + spdx-exceptions: "npm:^2.1.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/965c487e77f4fb173f1c471f3eef4eb44b9f0321adc7f93d95e7620da31faa67d29356eb02523cd7df8a7fc1ec8238773cdbf9e45bd050329d2b26492771b736 + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.23 + resolution: "spdx-license-ids@npm:3.0.23" + checksum: 10c0/8495620f6f2a237749cce922ea2d593a66f7885c301b1a0f5542183e7041182f27f616a8f13345cefdea0c9b3e0899328e0aa8cec100cf4f3fac4bb3bd975515 + languageName: node + linkType: hard + +"ssri@npm:^13.0.0": + version: 13.0.1 + resolution: "ssri@npm:13.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/cf6408a18676c57ff2ed06b8a20dc64bb3e748e5c7e095332e6aecaa2b8422b1e94a739a8453bf65156a8a47afe23757ba4ab52d3ea3b62322dc40875763e17a + languageName: node + linkType: hard + +"statuses@npm:^2.0.1, statuses@npm:^2.0.2, statuses@npm:~2.0.2": + version: 2.0.2 + resolution: "statuses@npm:2.0.2" + checksum: 10c0/a9947d98ad60d01f6b26727570f3bcceb6c8fa789da64fe6889908fe2e294d57503b14bf2b5af7605c2d36647259e856635cd4c49eab41667658ec9d0080ec3f + languageName: node + linkType: hard + +"stdin-discarder@npm:^0.3.1, stdin-discarder@npm:^0.3.2": + version: 0.3.2 + resolution: "stdin-discarder@npm:0.3.2" + checksum: 10c0/5dbaba9efbcb447a4450d5ae19794641ea9166abe96dc4b5547a109db1bb6e8bdb17bbe1029e02ca8d9d8ee996b7c7cbcce12b12c18c121871cd4f574292381a + languageName: node + linkType: hard + +"stream-events@npm:^1.0.5": + version: 1.0.5 + resolution: "stream-events@npm:1.0.5" + dependencies: + stubs: "npm:^3.0.0" + checksum: 10c0/5d235a5799a483e94ea8829526fe9d95d76460032d5e78555fe4f801949ac6a27ea2212e4e0827c55f78726b3242701768adf2d33789465f51b31ed8ebd6b086 + languageName: node + linkType: hard + +"stream-shift@npm:^1.0.2": + version: 1.0.3 + resolution: "stream-shift@npm:1.0.3" + checksum: 10c0/939cd1051ca750d240a0625b106a2b988c45fb5a3be0cebe9a9858cb01bc1955e8c7b9fac17a9462976bea4a7b704e317c5c2200c70f0ca715a3363b9aa4fd3b + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + +"string-width@npm:^7.0.0, string-width@npm:^7.2.0": + version: 7.2.0 + resolution: "string-width@npm:7.2.0" + dependencies: + emoji-regex: "npm:^10.3.0" + get-east-asian-width: "npm:^1.0.0" + strip-ansi: "npm:^7.1.0" + checksum: 10c0/eb0430dd43f3199c7a46dcbf7a0b34539c76fe3aa62763d0b0655acdcbdf360b3f66f3d58ca25ba0205f42ea3491fa00f09426d3b7d3040e506878fc7664c9b9 + languageName: node + linkType: hard + +"string-width@npm:^8.1.0, string-width@npm:^8.2.0": + version: 8.2.1 + resolution: "string-width@npm:8.2.1" + dependencies: + get-east-asian-width: "npm:^1.5.0" + strip-ansi: "npm:^7.1.2" + checksum: 10c0/d467b4eaf4c40a01bb438a2620e77badd2456ffd5131c9973abe4f3acf7c802d5b21f3b6a00a5e33a7fc28ca8f9c103226e01bac61e9f259659c6f46d78e353a + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: "npm:~5.2.0" + checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0, strip-ansi@npm:^7.1.2": + version: 7.2.0 + resolution: "strip-ansi@npm:7.2.0" + dependencies: + ansi-regex: "npm:^6.2.2" + checksum: 10c0/544d13b7582f8254811ea97db202f519e189e59d35740c46095897e254e4f1aa9fe1524a83ad6bc5ad67d4dd6c0281d2e0219ed62b880a6238a16a17d375f221 + languageName: node + linkType: hard + +"strnum@npm:^2.3.0": + version: 2.4.0 + resolution: "strnum@npm:2.4.0" + dependencies: + anynum: "npm:^1.0.0" + checksum: 10c0/36ac1ca6f511d8216d9b07934359f78afb158eedee73fb057c77b1cffa160a60cb848b35f219bd2c115b0037e8ec3962f492874ea4b10ef021ab6403dbb10e7e + languageName: node + linkType: hard + +"stubs@npm:^3.0.0": + version: 3.0.0 + resolution: "stubs@npm:3.0.0" + checksum: 10c0/841a4ab8c76795d34aefe129185763b55fbf2e4693208215627caea4dd62e1299423dcd96f708d3128e3dfa0e669bae2cb912e6e906d7d81eaf6493196570923 + languageName: node + linkType: hard + +"supports-color@npm:10.2.2": + version: 10.2.2 + resolution: "supports-color@npm:10.2.2" + checksum: 10c0/fb28dd7e0cdf80afb3f2a41df5e068d60c8b4f97f7140de2eaed5b42e075d82a0e980b20a2c0efd2b6d73cfacb55555285d8cc719fa0472220715aefeaa1da7c + languageName: node + linkType: hard + +"tar@npm:^7.4.3, tar@npm:^7.5.4": + version: 7.5.16 + resolution: "tar@npm:7.5.16" + dependencies: + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.1.0" + yallist: "npm:^5.0.0" + checksum: 10c0/4f37f3c4bd2ca2755fd736a5df1d573c1a868ec1b1e893346aeafa95ac510f9e2fd1469420bd866cc7904799e5bd4ac62b5d4f03fe27747d6e1e373b44505c5c + languageName: node + linkType: hard + +"teeny-request@npm:^10.0.0": + version: 10.1.3 + resolution: "teeny-request@npm:10.1.3" + dependencies: + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + node-fetch: "npm:^3.3.2" + stream-events: "npm:^1.0.5" + checksum: 10c0/73436e004f978527a106b2dc31ddb9c7fd31d7024ee1fad68f5f6436de528748e003eebe610c21baefb5937c564ec13de9a6dc854bf19d5b546e5052b434face + languageName: node + linkType: hard + +"teeny-request@npm:^9.0.0": + version: 9.0.0 + resolution: "teeny-request@npm:9.0.0" + dependencies: + http-proxy-agent: "npm:^5.0.0" + https-proxy-agent: "npm:^5.0.0" + node-fetch: "npm:^2.6.9" + stream-events: "npm:^1.0.5" + uuid: "npm:^9.0.0" + checksum: 10c0/1c51a284075b57b7b7f970fc8d855d611912f0e485aa1d1dfda3c0be3f2df392e4ce83b1b39877134041abb7c255f3777f175b27323ef5bf008839e42a1958bc + languageName: node + linkType: hard + +"tinyglobby@npm:0.2.15": + version: 0.2.15 + resolution: "tinyglobby@npm:0.2.15" + dependencies: + fdir: "npm:^6.5.0" + picomatch: "npm:^4.0.3" + checksum: 10c0/869c31490d0d88eedb8305d178d4c75e7463e820df5a9b9d388291daf93e8b1eb5de1dad1c1e139767e4269fe75f3b10d5009b2cc14db96ff98986920a186844 + languageName: node + linkType: hard + +"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.15, tinyglobby@npm:^0.2.17": + version: 0.2.17 + resolution: "tinyglobby@npm:0.2.17" + dependencies: + fdir: "npm:^6.5.0" + picomatch: "npm:^4.0.4" + checksum: 10c0/7f7bb0f197c88bc4b20c231e0deca4240ca3bf313a88f5a7fee93a872b84966a4d50220947c0455ad07a60b3b360961c5b7fd979222aeb716a9f99b412002e4c + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"toidentifier@npm:~1.0.1": + version: 1.0.1 + resolution: "toidentifier@npm:1.0.1" + checksum: 10c0/93937279934bd66cc3270016dd8d0afec14fb7c94a05c72dc57321f8bd1fa97e5bea6d1f7c89e728d077ca31ea125b78320a616a6c6cd0e6b9cb94cb864381c1 + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 + languageName: node + linkType: hard + +"tree-kill@npm:1.2.2": + version: 1.2.2 + resolution: "tree-kill@npm:1.2.2" + bin: + tree-kill: cli.js + checksum: 10c0/7b1b7c7f17608a8f8d20a162e7957ac1ef6cd1636db1aba92f4e072dc31818c2ff0efac1e3d91064ede67ed5dc57c565420531a8134090a12ac10cf792ab14d2 + languageName: node + linkType: hard + +"tslib@npm:^2.0.0, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0, tslib@npm:^2.8.1": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 + languageName: node + linkType: hard + +"tsx@npm:^4.22.4": + version: 4.22.4 + resolution: "tsx@npm:4.22.4" + dependencies: + esbuild: "npm:~0.28.0" + fsevents: "npm:~2.3.3" + dependenciesMeta: + fsevents: + optional: true + bin: + tsx: dist/cli.mjs + checksum: 10c0/3df31eb4929ff501b40b122163705b201ea57a492581e14312ae95d21eb015b33ded46a3fd564f9c89a0e8083186987fc4f10dd38182c4ad6241605974f6c927 + languageName: node + linkType: hard + +"tuf-js@npm:^4.1.0": + version: 4.1.0 + resolution: "tuf-js@npm:4.1.0" + dependencies: + "@tufjs/models": "npm:4.1.0" + debug: "npm:^4.4.3" + make-fetch-happen: "npm:^15.0.1" + checksum: 10c0/38330b0b2d16f7f58eccd49b3a6ff0f87dd20743d6f2c26c2621089d8d83d807808e0e660c5be891122538d32db250e3e88267da4421537253e7aa99a45e5800 + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: "npm:^1.2.1" + checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 + languageName: node + linkType: hard + +"type-is@npm:^2.0.1": + version: 2.1.0 + resolution: "type-is@npm:2.1.0" + dependencies: + content-type: "npm:^2.0.0" + media-typer: "npm:^1.1.0" + mime-types: "npm:^3.0.0" + checksum: 10c0/a6018f8f509de48f2c7429305e3a920e73b374fa93127dd0877ae1c2df65a5d33907caac8afb0c37a9b9fc7c49f29e3f55d668963dc845d966930b667c07f50e + languageName: node + linkType: hard + +"typescript@npm:5.9.3": + version: 5.9.3 + resolution: "typescript@npm:5.9.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A5.9.3#optional!builtin": + version: 5.9.3 + resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430 + languageName: node + linkType: hard + +"uc.micro@npm:^2.0.0, uc.micro@npm:^2.1.0": + version: 2.1.0 + resolution: "uc.micro@npm:2.1.0" + checksum: 10c0/8862eddb412dda76f15db8ad1c640ccc2f47cdf8252a4a30be908d535602c8d33f9855dfcccb8b8837855c1ce1eaa563f7fa7ebe3c98fd0794351aab9b9c55fa + languageName: node + linkType: hard + +"undici-types@npm:>=7.24.0 <7.24.7": + version: 7.24.6 + resolution: "undici-types@npm:7.24.6" + checksum: 10c0/d9cd8befb643ac904615c280a095ba4240531f6bb4a5e75a22a7483630ca8d3f1016d2ab6ace6ceda1f63b3a2db2fe037fafe121d6917a0187573aa548ff78ca + languageName: node + linkType: hard + +"undici@npm:7.24.4": + version: 7.24.4 + resolution: "undici@npm:7.24.4" + checksum: 10c0/cb302e81fadb7f0b7946ab77595715c0961b46a025ccecae79ba599432d0bc8d1e3da4dfe7ff66bc74f115c1b8ff0f099bc4e9bf313db4562da23995872c6d17 + languageName: node + linkType: hard + +"undici@npm:^6.25.0": + version: 6.26.0 + resolution: "undici@npm:6.26.0" + checksum: 10c0/cf2b4caf58c33d6582970991290cc7a6486d6e738845f25dcdd16952d708ec844815c6d30362919764fcaf30f719891289341f1ada496f003ce2700310453a47 + languageName: node + linkType: hard + +"unpipe@npm:~1.0.0": + version: 1.0.0 + resolution: "unpipe@npm:1.0.0" + checksum: 10c0/193400255bd48968e5c5383730344fbb4fa114cdedfab26e329e50dd2d81b134244bb8a72c6ac1b10ab0281a58b363d06405632c9d49ca9dfd5e90cbd7d0f32c + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.2.3": + version: 1.2.3 + resolution: "update-browserslist-db@npm:1.2.3" + dependencies: + escalade: "npm:^3.2.0" + picocolors: "npm:^1.1.1" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 10c0/13a00355ea822388f68af57410ce3255941d5fb9b7c49342c4709a07c9f230bbef7f7499ae0ca7e0de532e79a82cc0c4edbd125f1a323a1845bf914efddf8bec + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 + languageName: node + linkType: hard + +"uuid@npm:*, uuid@npm:^14.0.0": + version: 14.0.0 + resolution: "uuid@npm:14.0.0" + bin: + uuid: dist-node/bin/uuid + checksum: 10c0/a57ae7794c45005c1a9208989196c5baf79a7679c30f43c1bee9033a2c4d113a2cea216fa6fcc9663b08b0d55635df1a7c6eb7e7f3d21c3e50688c698fa39a50 + languageName: node + linkType: hard + +"uuid@npm:^11.1.0": + version: 11.1.1 + resolution: "uuid@npm:11.1.1" + bin: + uuid: dist/esm/bin/uuid + checksum: 10c0/9e3af58eba872ece5a5e76f4773a94fc78a0ef2c2444c38dbe6b42f41dadf76c01850fd783604f27986f6195e6286aef064d45987d401b2a33127b98ddf7c0c5 + languageName: node + linkType: hard + +"uuid@npm:^9.0.0, uuid@npm:^9.0.1": + version: 9.0.1 + resolution: "uuid@npm:9.0.1" + bin: + uuid: dist/bin/uuid + checksum: 10c0/1607dd32ac7fc22f2d8f77051e6a64845c9bce5cd3dd8aa0070c074ec73e666a1f63c7b4e0f4bf2bc8b9d59dc85a15e17807446d9d2b17c8485fbc2147b27f9b + languageName: node + linkType: hard + +"validate-npm-package-name@npm:^7.0.0": + version: 7.0.2 + resolution: "validate-npm-package-name@npm:7.0.2" + checksum: 10c0/adf32e943148e13e8df13d06b855493908e6ae7a847610e8543c6291cbf42f40e653249a5b2275e2e615e3224c574ade5a9064a9e2d1ab629386284ea99e8f39 + languageName: node + linkType: hard + +"vary@npm:^1, vary@npm:^1.1.2": + version: 1.1.2 + resolution: "vary@npm:1.1.2" + checksum: 10c0/f15d588d79f3675135ba783c91a4083dcd290a2a5be9fcb6514220a1634e23df116847b1cc51f66bfb0644cf9353b2abb7815ae499bab06e46dd33c1a6bf1f4f + languageName: node + linkType: hard + +"vite@npm:7.3.2": + version: 7.3.2 + resolution: "vite@npm:7.3.2" + dependencies: + esbuild: "npm:^0.27.0" + fdir: "npm:^6.5.0" + fsevents: "npm:~2.3.3" + picomatch: "npm:^4.0.3" + postcss: "npm:^8.5.6" + rollup: "npm:^4.43.0" + tinyglobby: "npm:^0.2.15" + peerDependencies: + "@types/node": ^20.19.0 || >=22.12.0 + jiti: ">=1.21.0" + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: ">=0.54.8" + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + dependenciesMeta: + fsevents: + optional: true + 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 + bin: + vite: bin/vite.js + checksum: 10c0/74be36907e208916f18bfec81c8eba18b869f0a170f1ece0a4dcb14874d0f0e7c022fb6c2ad896e3ee6c973fe88f53ac23b4078879ada340d8b263260868b8d4 + languageName: node + linkType: hard + +"vite@npm:^8.0.16": + version: 8.0.16 + resolution: "vite@npm:8.0.16" + dependencies: + fsevents: "npm:~2.3.3" + lightningcss: "npm:^1.32.0" + picomatch: "npm:^4.0.4" + postcss: "npm:^8.5.15" + rolldown: "npm:1.0.3" + tinyglobby: "npm:^0.2.17" + peerDependencies: + "@types/node": ^20.19.0 || >=22.12.0 + "@vitejs/devtools": ^0.1.18 + esbuild: ^0.27.0 || ^0.28.0 + jiti: ">=1.21.0" + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: ">=0.54.8" + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + "@vitejs/devtools": + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/d75be3fbe2f63e6a8145325970338afaf0dd4d96ba9175c13f9a286fd5f95afc489401b693e4fa6c0899a4dd0e137be91cdf9401a40a635563911ad5036e3467 + languageName: node + linkType: hard + +"watchpack@npm:2.5.1": + version: 2.5.1 + resolution: "watchpack@npm:2.5.1" + dependencies: + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.1.2" + checksum: 10c0/dffbb483d1f61be90dc570630a1eb308581e2227d507d783b1d94a57ac7b705ecd9a1a4b73d73c15eab596d39874e5276a3d9cb88bbb698bafc3f8d08c34cf17 + languageName: node + linkType: hard + +"weak-lru-cache@npm:^1.2.2": + version: 1.2.2 + resolution: "weak-lru-cache@npm:1.2.2" + checksum: 10c0/744847bd5b96ca86db1cb40d0aea7e92c02bbdb05f501181bf9c581e82fa2afbda32a327ffbe75749302b8492ab449f1c657ca02410d725f5d412d1e6c607d72 + languageName: node + linkType: hard + +"web-streams-polyfill@npm:^3.0.3": + version: 3.3.3 + resolution: "web-streams-polyfill@npm:3.3.3" + checksum: 10c0/64e855c47f6c8330b5436147db1c75cb7e7474d924166800e8e2aab5eb6c76aac4981a84261dd2982b3e754490900b99791c80ae1407a9fa0dcff74f82ea3a7f + languageName: node + linkType: hard + +"web-vitals@npm:^4.2.4": + version: 4.2.4 + resolution: "web-vitals@npm:4.2.4" + checksum: 10c0/383c9281d5b556bcd190fde3c823aeb005bb8cf82e62c75b47beb411014a4ed13fa5c5e0489ed0f1b8d501cd66b0bebcb8624c1a75750bd5df13e2a3b1b2d194 + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db + languageName: node + linkType: hard + +"websocket-driver@npm:>=0.5.1": + version: 0.7.5 + resolution: "websocket-driver@npm:0.7.5" + dependencies: + http-parser-js: "npm:>=0.5.1" + safe-buffer: "npm:>=5.1.0" + websocket-extensions: "npm:>=0.1.1" + checksum: 10c0/843a3c9f529ce07f2721829f70f62986247525ab22625e857b69da13dc90967bacfe57b85e196801b565cd797e309ddd5b06fa8435732e34e8a8ab6201d7abed + languageName: node + linkType: hard + +"websocket-extensions@npm:>=0.1.1": + version: 0.1.4 + resolution: "websocket-extensions@npm:0.1.4" + checksum: 10c0/bbc8c233388a0eb8a40786ee2e30d35935cacbfe26ab188b3e020987e85d519c2009fe07cfc37b7f718b85afdba7e54654c9153e6697301f72561bfe429177e0 + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: "npm:~0.0.3" + webidl-conversions: "npm:^3.0.0" + checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^6.0.0": + version: 6.0.1 + resolution: "which@npm:6.0.1" + dependencies: + isexe: "npm:^4.0.0" + bin: + node-which: bin/which.js + checksum: 10c0/7e710e54ea36d2d6183bee2f9caa27a3b47b9baf8dee55a199b736fcf85eab3b9df7556fca3d02b50af7f3dfba5ea3a45644189836df06267df457e354da66d5 + languageName: node + linkType: hard + +"which@npm:^7.0.0": + version: 7.0.0 + resolution: "which@npm:7.0.0" + dependencies: + isexe: "npm:^4.0.0" + bin: + node-which: bin/which.js + checksum: 10c0/ca0b54f198f78bbc4b7c02e34bda8d335cb352e0adb4cbca1c37b1a957af3a879a82c4c27ca6525bc942f548d8b64f816ef6528360af9f3de55ffb9b979b620d + languageName: node + linkType: hard + +"wireit@npm:^0.15.0-pre.2": + version: 0.15.0-pre.2 + resolution: "wireit@npm:0.15.0-pre.2" + dependencies: + brace-expansion: "npm:^4.0.0" + chokidar: "npm:^3.5.3" + fast-glob: "npm:^3.2.11" + jsonc-parser: "npm:^3.0.0" + proper-lockfile: "npm:^4.1.2" + bin: + wireit: bin/wireit.js + checksum: 10c0/afa6d1649b23edcffd1ce83ceba50973db9b3840d1f9a05392dbc9da2d7250d2dd8378a165ceb4322f017ece893f1abca65045cee30e8b3cdde1255d37839b8b + languageName: node + linkType: hard + +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard + +"wrap-ansi@npm:^6.2.0": + version: 6.2.0 + resolution: "wrap-ansi@npm:6.2.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + +"wrap-ansi@npm:^9.0.0": + version: 9.0.2 + resolution: "wrap-ansi@npm:9.0.2" + dependencies: + ansi-styles: "npm:^6.2.1" + string-width: "npm:^7.0.0" + strip-ansi: "npm:^7.1.0" + checksum: 10c0/3305839b9a0d6fb930cb63a52f34d3936013d8b0682ff3ec133c9826512620f213800ffa19ea22904876d5b7e9a3c1f40682f03597d986a4ca881fa7b033688c + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard + +"ws@npm:^8.18.0": + version: 8.21.0 + resolution: "ws@npm:8.21.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/ef4a243476283fc49bc7550966c4af4aa0eef56273837211e700de3b664e08604a760cdddcb5ba43c049140e74ccfec5b0ee0bb439e08c2adf9138902fdde5f9 + languageName: node + linkType: hard + +"xhr2@npm:^0.2.0": + version: 0.2.1 + resolution: "xhr2@npm:0.2.1" + checksum: 10c0/eebe95bd0ae9087da9b4dda636abee1f30cf9b424fbe8ebd0c7dcfd9be5db3e4aa634cf1837fa3e82b486aace9396a2dbf6be2dc8084862c8239dccec4e16dca + languageName: node + linkType: hard + +"xml-naming@npm:^0.1.0": + version: 0.1.0 + resolution: "xml-naming@npm:0.1.0" + checksum: 10c0/8c7614865361bcb7e53e3e091dac21c567e2b92d447919b2f072775aa9dcfc94a5255bd52fbaa0fd53c93513e53a23a6a835218ad2af512451dbc678392f85fe + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 + languageName: node + linkType: hard + +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 10c0/c66a5c46bc89af1625476f7f0f2ec3653c1a1791d2f9407cfb4c2ba812a1e1c9941416d71ba9719876530e3340a99925f697142989371b72d93b9ee628afd8c1 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 + languageName: node + linkType: hard + +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2 + languageName: node + linkType: hard + +"yargs-parser@npm:^22.0.0": + version: 22.0.0 + resolution: "yargs-parser@npm:22.0.0" + checksum: 10c0/cb7ef81759c4271cb1d96b9351dbbc9a9ce35d3e1122d2b739bf6c432603824fa02c67cc12dcef6ea80283379d63495686e8f41cc7b06c6576e792aba4d33e1c + languageName: node + linkType: hard + +"yargs@npm:18.0.0, yargs@npm:^18.0.0": + version: 18.0.0 + resolution: "yargs@npm:18.0.0" + dependencies: + cliui: "npm:^9.0.1" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + string-width: "npm:^7.2.0" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^22.0.0" + checksum: 10c0/bf290e4723876ea9c638c786a5c42ac28e03c9ca2325e1424bf43b94e5876456292d3ed905b853ebbba6daf43ed29e772ac2a6b3c5fb1b16533245d6211778f3 + languageName: node + linkType: hard + +"yargs@npm:^17.7.2": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: "npm:^8.0.1" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.3" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^21.1.1" + checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard + +"yoctocolors-cjs@npm:^2.1.3": + version: 2.1.3 + resolution: "yoctocolors-cjs@npm:2.1.3" + checksum: 10c0/584168ef98eb5d913473a4858dce128803c4a6cd87c0f09e954fa01126a59a33ab9e513b633ad9ab953786ed16efdd8c8700097a51635aafaeed3fef7712fa79 + languageName: node + linkType: hard + +"yoctocolors@npm:^2.1.1": + version: 2.1.2 + resolution: "yoctocolors@npm:2.1.2" + checksum: 10c0/b220f30f53ebc2167330c3adc86a3c7f158bcba0236f6c67e25644c3188e2571a6014ffc1321943bb619460259d3d27eb4c9cc58c2d884c1b195805883ec7066 + languageName: node + linkType: hard + +"zod-to-json-schema@npm:^3.25.1": + version: 3.25.2 + resolution: "zod-to-json-schema@npm:3.25.2" + peerDependencies: + zod: ^3.25.28 || ^4 + checksum: 10c0/dd300554393903022487688af14fbda5c719ba8179702bb55b3aa86318830467f0f7beb7d654036975ac963dc4843b72e59636448bfff9a0608f277bb6a14939 + languageName: node + linkType: hard + +"zod@npm:^3.25.76": + version: 3.25.76 + resolution: "zod@npm:3.25.76" + checksum: 10c0/5718ec35e3c40b600316c5b4c5e4976f7fee68151bc8f8d90ec18a469be9571f072e1bbaace10f1e85cf8892ea12d90821b200e980ab46916a6166a4260a983c + languageName: node + linkType: hard + +"zone.js@npm:~0.16.2": + version: 0.16.2 + resolution: "zone.js@npm:0.16.2" + checksum: 10c0/bc84f2257335881f274a4522d9a3a1b21ef02ce42bbc8322751cd4b40636bfe19af48eb08053f3864f30d78549e0893d6bb336bf7123fc06020da70e6d89db8e + languageName: node + linkType: hard diff --git a/yarn.lock b/yarn.lock index de0a0a59f5..915b930af9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -100,26 +100,6 @@ __metadata: languageName: unknown linkType: soft -"@a2ui/custom-components-example@workspace:samples/client/lit/custom-components-example": - version: 0.0.0-use.local - resolution: "@a2ui/custom-components-example@workspace:samples/client/lit/custom-components-example" - dependencies: - "@a2a-js/sdk": "npm:^0.3.13" - "@a2ui/lit": "workspace:*" - "@lit-labs/signals": "npm:^0.3.0" - "@lit/context": "npm:^1.1.6" - "@modelcontextprotocol/ext-apps": "npm:^1.7.4" - dotenv: "npm:^17.4.2" - eslint: "npm:^10.4.1" - gts: "npm:^7.0.0" - lit: "npm:^3.3.3" - typescript: "npm:5.9.3" - uuid: "npm:^14.0.0" - vite: "npm:^8.0.16" - wireit: "npm:^0.15.0-pre.2" - languageName: unknown - linkType: soft - "@a2ui/editor@workspace:tools/editor": version: 0.0.0-use.local resolution: "@a2ui/editor@workspace:tools/editor" @@ -140,16 +120,6 @@ __metadata: languageName: unknown linkType: soft -"@a2ui/gallery@workspace:samples/client/angular/projects/gallery": - version: 0.0.0-use.local - resolution: "@a2ui/gallery@workspace:samples/client/angular/projects/gallery" - dependencies: - "@a2ui/angular": "workspace:*" - "@a2ui/web_core": "workspace:*" - wireit: "npm:^0.15.0-pre.2" - languageName: unknown - linkType: soft - "@a2ui/inspector@workspace:tools/inspector": version: 0.0.0-use.local resolution: "@a2ui/inspector@workspace:tools/inspector" @@ -259,46 +229,6 @@ __metadata: languageName: unknown linkType: soft -"@a2ui/mcp-apps-in-a2ui-sample@workspace:samples/client/lit/mcp-apps-in-a2ui-sample": - version: 0.0.0-use.local - resolution: "@a2ui/mcp-apps-in-a2ui-sample@workspace:samples/client/lit/mcp-apps-in-a2ui-sample" - dependencies: - "@a2a-js/sdk": "npm:^0.3.13" - "@a2ui/lit": "workspace:*" - "@a2ui/web_core": "workspace:*" - "@lit-labs/signals": "npm:^0.3.0" - "@lit/context": "npm:^1.1.6" - "@modelcontextprotocol/ext-apps": "npm:^1.7.4" - dotenv: "npm:^17.4.2" - lit: "npm:^3.3.3" - typescript: "npm:5.9.3" - uuid: "npm:^14.0.0" - vite: "npm:^8.0.16" - wireit: "npm:^0.15.0-pre.2" - languageName: unknown - linkType: soft - -"@a2ui/mcp_calculator@workspace:samples/client/angular/projects/mcp_calculator": - version: 0.0.0-use.local - resolution: "@a2ui/mcp_calculator@workspace:samples/client/angular/projects/mcp_calculator" - dependencies: - "@a2ui/angular": "workspace:*" - "@a2ui/web_core": "workspace:*" - wireit: "npm:^0.15.0-pre.2" - languageName: unknown - linkType: soft - -"@a2ui/orchestrator@workspace:samples/client/angular/projects/orchestrator": - version: 0.0.0-use.local - resolution: "@a2ui/orchestrator@workspace:samples/client/angular/projects/orchestrator" - dependencies: - "@a2ui/angular": "workspace:*" - "@a2ui/markdown-it": "npm:*" - "@a2ui/web_core": "workspace:*" - wireit: "npm:^0.15.0-pre.2" - languageName: unknown - linkType: soft - "@a2ui/react-explorer@workspace:renderers/react/a2ui_explorer": version: 0.0.0-use.local resolution: "@a2ui/react-explorer@workspace:renderers/react/a2ui_explorer" @@ -411,17 +341,6 @@ __metadata: languageName: unknown linkType: soft -"@a2ui/rizzcharts@workspace:samples/client/angular/projects/rizzcharts": - version: 0.0.0-use.local - resolution: "@a2ui/rizzcharts@workspace:samples/client/angular/projects/rizzcharts" - dependencies: - "@a2ui/angular": "workspace:*" - "@a2ui/markdown-it": "npm:*" - "@a2ui/web_core": "workspace:*" - wireit: "npm:^0.15.0-pre.2" - languageName: unknown - linkType: soft - "@a2ui/shell@workspace:samples/client/lit/shell": version: 0.0.0-use.local resolution: "@a2ui/shell@workspace:samples/client/lit/shell" @@ -4396,75 +4315,6 @@ __metadata: languageName: node linkType: hard -"@firebase/ai@npm:2.13.0": - version: 2.13.0 - resolution: "@firebase/ai@npm:2.13.0" - dependencies: - "@firebase/app-check-interop-types": "npm:0.3.4" - "@firebase/component": "npm:0.7.3" - "@firebase/logger": "npm:0.5.1" - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - peerDependencies: - "@firebase/app": 0.x - "@firebase/app-types": 0.x - checksum: 10c0/d5a14c7aef90ea1fbd3e6f220dcf3fb673d62c0eb8a6b22a7e96de2555e551d44b163deafed6967bb5cc521e10f09adf15e0aa49260e4ba2e8149852525eb528 - languageName: node - linkType: hard - -"@firebase/analytics-compat@npm:0.2.28": - version: 0.2.28 - resolution: "@firebase/analytics-compat@npm:0.2.28" - dependencies: - "@firebase/analytics": "npm:0.10.22" - "@firebase/analytics-types": "npm:0.8.4" - "@firebase/component": "npm:0.7.3" - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - peerDependencies: - "@firebase/app-compat": 0.x - checksum: 10c0/e8508b26bc75f47cd90f7cd31b36084439179fe85eac8ebe02f3ac6ffb0176d8f77f1e91de07fedf3307ea3ef0b5c547b89ba175c0f6277829d3df1d48a713e3 - languageName: node - linkType: hard - -"@firebase/analytics-types@npm:0.8.4": - version: 0.8.4 - resolution: "@firebase/analytics-types@npm:0.8.4" - checksum: 10c0/5dd5929eab551855c8338ed97c1a4ef18713501611ea9226f391410800f9736490500d6decdda777c8dc37ac615b59fd50127559e486dfac91690a07394a0fb6 - languageName: node - linkType: hard - -"@firebase/analytics@npm:0.10.22": - version: 0.10.22 - resolution: "@firebase/analytics@npm:0.10.22" - dependencies: - "@firebase/component": "npm:0.7.3" - "@firebase/installations": "npm:0.6.22" - "@firebase/logger": "npm:0.5.1" - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - peerDependencies: - "@firebase/app": 0.x - checksum: 10c0/2f6398e1fe197ff2f3eab5fac7f2296d666799eb1598a35d71e996d365478b35dd00001e57e5e0b4e18d9ea6996a9aded36847dbc88091022c3d1df095df9ad8 - languageName: node - linkType: hard - -"@firebase/app-check-compat@npm:0.4.4": - version: 0.4.4 - resolution: "@firebase/app-check-compat@npm:0.4.4" - dependencies: - "@firebase/app-check": "npm:0.11.4" - "@firebase/app-check-types": "npm:0.5.4" - "@firebase/component": "npm:0.7.3" - "@firebase/logger": "npm:0.5.1" - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - peerDependencies: - "@firebase/app-compat": 0.x - checksum: 10c0/af7f364fcb6d367ed4ae6e3e739d37756fa1dda75ee95b14b69b6be6aa1733463f289fc6a5d3854943f2fb4f8ca1dcbe1b5d129c02062336b4c8fbfd7b2babb3 - languageName: node - linkType: hard - "@firebase/app-check-interop-types@npm:0.3.3": version: 0.3.3 resolution: "@firebase/app-check-interop-types@npm:0.3.3" @@ -4472,47 +4322,6 @@ __metadata: languageName: node linkType: hard -"@firebase/app-check-interop-types@npm:0.3.4": - version: 0.3.4 - resolution: "@firebase/app-check-interop-types@npm:0.3.4" - checksum: 10c0/1861470d0e3f4fcff5e46bd9e9cc9c2408988eb01d661bac791e0dd511dde20e148503c923c8808f6921a70c523740f102c55615e0393158277d643fcec21c1c - languageName: node - linkType: hard - -"@firebase/app-check-types@npm:0.5.4": - version: 0.5.4 - resolution: "@firebase/app-check-types@npm:0.5.4" - checksum: 10c0/945edf0f14a8e432893a36594028b78c728e56ebbf41543019b0b5319b987e38b7b374268589905b8827bb16af06cbb2682218d9b0bb50efd7d2cab13e40e825 - languageName: node - linkType: hard - -"@firebase/app-check@npm:0.11.4": - version: 0.11.4 - resolution: "@firebase/app-check@npm:0.11.4" - dependencies: - "@firebase/component": "npm:0.7.3" - "@firebase/logger": "npm:0.5.1" - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - peerDependencies: - "@firebase/app": 0.x - checksum: 10c0/f8763a9c5c841e9143f0fce326e24fbd78c21959a8daa5bbcd2546868ead062fc89bd49e4b210a6ffdb148a9f8128dc215da0dbf7d7b80ed0fbfa490b1483f79 - languageName: node - linkType: hard - -"@firebase/app-compat@npm:0.5.13": - version: 0.5.13 - resolution: "@firebase/app-compat@npm:0.5.13" - dependencies: - "@firebase/app": "npm:0.14.13" - "@firebase/component": "npm:0.7.3" - "@firebase/logger": "npm:0.5.1" - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - checksum: 10c0/9d4c45f72fbce9c8565ec76549e710c256968754f60b5e43d5fe85227bf9045e54cf4fe80cd1a86e1b9ca2b7db6eede1009e20339548a0224dfe3623566755ec - languageName: node - linkType: hard - "@firebase/app-types@npm:0.9.3": version: 0.9.3 resolution: "@firebase/app-types@npm:0.9.3" @@ -4520,43 +4329,6 @@ __metadata: languageName: node linkType: hard -"@firebase/app-types@npm:0.9.5": - version: 0.9.5 - resolution: "@firebase/app-types@npm:0.9.5" - dependencies: - "@firebase/logger": "npm:0.5.1" - checksum: 10c0/997c2deab31ac1666b10dd9fbcf6198266581ac9d1228c90969331edf1c94554312f3c828748322a444d00dcbf88e06071926c2ba565228f128d7af3e70811bd - languageName: node - linkType: hard - -"@firebase/app@npm:0.14.13": - version: 0.14.13 - resolution: "@firebase/app@npm:0.14.13" - dependencies: - "@firebase/component": "npm:0.7.3" - "@firebase/logger": "npm:0.5.1" - "@firebase/util": "npm:1.15.1" - idb: "npm:7.1.1" - tslib: "npm:^2.1.0" - checksum: 10c0/ae2cc1a2a5fe45d7791ed339fcc06b899f5c2e94bb6d9dc9963e743cad6d480527efaaf5c9b060b4bc14f5a85793ee1404e1da1ead8cfabb142d27d4c4af7904 - languageName: node - linkType: hard - -"@firebase/auth-compat@npm:0.6.7": - version: 0.6.7 - resolution: "@firebase/auth-compat@npm:0.6.7" - dependencies: - "@firebase/auth": "npm:1.13.2" - "@firebase/auth-types": "npm:0.13.1" - "@firebase/component": "npm:0.7.3" - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - peerDependencies: - "@firebase/app-compat": 0.x - checksum: 10c0/3e0c6a464bf52926271cccafe5073a548da3d3a142be63e25fbf06dcd67dc6cb697c5562d73fbd64727e917271f285bc18a048876366051b2ea1edfaac0ef985 - languageName: node - linkType: hard - "@firebase/auth-interop-types@npm:0.2.4": version: 0.2.4 resolution: "@firebase/auth-interop-types@npm:0.2.4" @@ -4564,41 +4336,6 @@ __metadata: languageName: node linkType: hard -"@firebase/auth-interop-types@npm:0.2.5": - version: 0.2.5 - resolution: "@firebase/auth-interop-types@npm:0.2.5" - checksum: 10c0/1a0a72935b2809f1b9c57e1fda2eb53b741cf4f2e78b295d45bf4d14829d51ce3b6f86b6d4ce6b867b5878c223c10032d11fdf82d0ab4a10b30dd4803fa287ae - languageName: node - linkType: hard - -"@firebase/auth-types@npm:0.13.1": - version: 0.13.1 - resolution: "@firebase/auth-types@npm:0.13.1" - peerDependencies: - "@firebase/app-types": 0.x - "@firebase/util": 1.x - checksum: 10c0/598273dfccb4d112fd9e6026433ac8ce4716b7ac466e80c0f9b1f6d892c44a575f52f7e43341fe5bdae863f59f5532816f2acd13479e88db6650d421c17839e2 - languageName: node - linkType: hard - -"@firebase/auth@npm:1.13.2": - version: 1.13.2 - resolution: "@firebase/auth@npm:1.13.2" - dependencies: - "@firebase/component": "npm:0.7.3" - "@firebase/logger": "npm:0.5.1" - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - peerDependencies: - "@firebase/app": 0.x - "@react-native-async-storage/async-storage": ^2.2.0 || ^3.0.0 - peerDependenciesMeta: - "@react-native-async-storage/async-storage": - optional: true - checksum: 10c0/e18dfec04e8e18e60d7075f5dcfeba491838aaad4549f0a4826ecadf0c096186aa66df9aea8c7835692fb25d06ff46d82aba010058bdb3caa746b039d6d92d29 - languageName: node - linkType: hard - "@firebase/component@npm:0.7.2": version: 0.7.2 resolution: "@firebase/component@npm:0.7.2" @@ -4609,45 +4346,6 @@ __metadata: languageName: node linkType: hard -"@firebase/component@npm:0.7.3": - version: 0.7.3 - resolution: "@firebase/component@npm:0.7.3" - dependencies: - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - checksum: 10c0/a2c3400afecfa90cf6ec3526579ed3557828aafa8d4c3b34af7221a92ec2d9261c4a85b01c31b89774efcb6194c63f23ff219efe6a9cd842de2a6d41728bbd35 - languageName: node - linkType: hard - -"@firebase/data-connect@npm:0.7.1": - version: 0.7.1 - resolution: "@firebase/data-connect@npm:0.7.1" - dependencies: - "@firebase/auth-interop-types": "npm:0.2.5" - "@firebase/component": "npm:0.7.3" - "@firebase/logger": "npm:0.5.1" - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - peerDependencies: - "@firebase/app": 0.x - checksum: 10c0/e4df223abdaae906ef3c226aadebbfb00ef9eae56bf8c4226ce4cb7a708e4de6ae381db4f7d188f82d2868da3ed64847a09b39c6dec34248528c522d9bb74baa - languageName: node - linkType: hard - -"@firebase/database-compat@npm:2.1.4, @firebase/database-compat@npm:^2.1.4": - version: 2.1.4 - resolution: "@firebase/database-compat@npm:2.1.4" - dependencies: - "@firebase/component": "npm:0.7.3" - "@firebase/database": "npm:1.1.3" - "@firebase/database-types": "npm:1.0.20" - "@firebase/logger": "npm:0.5.1" - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - checksum: 10c0/e0d889acca69ee55030bc2fdd223d5b692e8a15656aa4403291f57b36401be89e915354260817a7be8f4eaa988d744d36d07933a0e8c9f79a46a971218f02dd6 - languageName: node - linkType: hard - "@firebase/database-compat@npm:^2.0.0": version: 2.1.2 resolution: "@firebase/database-compat@npm:2.1.2" @@ -4672,16 +4370,6 @@ __metadata: languageName: node linkType: hard -"@firebase/database-types@npm:1.0.20, @firebase/database-types@npm:^1.0.20": - version: 1.0.20 - resolution: "@firebase/database-types@npm:1.0.20" - dependencies: - "@firebase/app-types": "npm:0.9.5" - "@firebase/util": "npm:1.15.1" - checksum: 10c0/bc2848ded44b3bbf0352cd9f5580190b4e82b83c99618e0cf76a84a68850a4cf87954b1d9fff134ae4d930be79188eb5e7e34e3007e25576d630f1c83a7ace0f - languageName: node - linkType: hard - "@firebase/database@npm:1.1.2": version: 1.1.2 resolution: "@firebase/database@npm:1.1.2" @@ -4697,139 +4385,6 @@ __metadata: languageName: node linkType: hard -"@firebase/database@npm:1.1.3": - version: 1.1.3 - resolution: "@firebase/database@npm:1.1.3" - dependencies: - "@firebase/app-check-interop-types": "npm:0.3.4" - "@firebase/auth-interop-types": "npm:0.2.5" - "@firebase/component": "npm:0.7.3" - "@firebase/logger": "npm:0.5.1" - "@firebase/util": "npm:1.15.1" - faye-websocket: "npm:0.11.4" - tslib: "npm:^2.1.0" - checksum: 10c0/90aceab86ffff9bbccc9f1d6bfc83d450e74a6817c3605f8b61b3f8ea028b89f7d81017d12b61ff805506684e12435476da4cb0ce37dfb773c95807709e75e25 - languageName: node - linkType: hard - -"@firebase/firestore-compat@npm:0.4.10": - version: 0.4.10 - resolution: "@firebase/firestore-compat@npm:0.4.10" - dependencies: - "@firebase/component": "npm:0.7.3" - "@firebase/firestore": "npm:4.15.0" - "@firebase/firestore-types": "npm:3.0.4" - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - peerDependencies: - "@firebase/app-compat": 0.x - checksum: 10c0/fc6471f2744fd0b5edd495488e22e8c54b4d1e2f674eefc16c1a133f8c891d3ed76bcfc92c7981e012d0a5a3d3c8090c29689b62f3391aec5070e03e2f267072 - languageName: node - linkType: hard - -"@firebase/firestore-types@npm:3.0.4": - version: 3.0.4 - resolution: "@firebase/firestore-types@npm:3.0.4" - peerDependencies: - "@firebase/app-types": 0.x - "@firebase/util": 1.x - checksum: 10c0/8370f76b9ed06e8a6982af70d077b4b369ebcb322e334180c74d5c581d6487353f1bdf64a5ba0d62cac64dfc5973f4697d81257cf2927e305fa4e54fad3d9e6d - languageName: node - linkType: hard - -"@firebase/firestore@npm:4.15.0": - version: 4.15.0 - resolution: "@firebase/firestore@npm:4.15.0" - dependencies: - "@firebase/component": "npm:0.7.3" - "@firebase/logger": "npm:0.5.1" - "@firebase/util": "npm:1.15.1" - "@firebase/webchannel-wrapper": "npm:1.0.6" - "@grpc/grpc-js": "npm:~1.9.0" - "@grpc/proto-loader": "npm:^0.7.8" - tslib: "npm:^2.1.0" - peerDependencies: - "@firebase/app": 0.x - checksum: 10c0/8efffb37943ceb1c0132ca7d6317eee51d972c881b250139684df3bf11462828f0aa887085d6e4e3134258e78a8205884ce348f394d2ad7e55d14992fe729f20 - languageName: node - linkType: hard - -"@firebase/functions-compat@npm:0.4.5": - version: 0.4.5 - resolution: "@firebase/functions-compat@npm:0.4.5" - dependencies: - "@firebase/component": "npm:0.7.3" - "@firebase/functions": "npm:0.13.5" - "@firebase/functions-types": "npm:0.6.4" - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - peerDependencies: - "@firebase/app-compat": 0.x - checksum: 10c0/38c614ec794ad6d702e366670df21f14a5057093264bc871d0101a224921663092b373c3ac08917f299f09b9b867984d934ef123376d75160fcc48a8d480dd6a - languageName: node - linkType: hard - -"@firebase/functions-types@npm:0.6.4": - version: 0.6.4 - resolution: "@firebase/functions-types@npm:0.6.4" - checksum: 10c0/50f1e50fc58f9a297e05c888a555b7bf085be5f5c4284e035cf3ebfc63016fa2b6dbf8de5e4a343b04f98e357525968e6254eabd271eb3b2548fa297770c7f68 - languageName: node - linkType: hard - -"@firebase/functions@npm:0.13.5": - version: 0.13.5 - resolution: "@firebase/functions@npm:0.13.5" - dependencies: - "@firebase/app-check-interop-types": "npm:0.3.4" - "@firebase/auth-interop-types": "npm:0.2.5" - "@firebase/component": "npm:0.7.3" - "@firebase/messaging-interop-types": "npm:0.2.5" - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - peerDependencies: - "@firebase/app": 0.x - checksum: 10c0/92a5d6261feee27aa5ad7f0c1c55e3abf44c3ddd66f65f2bbf1001b06bb1d5bb2fdad21e6539299ae41079a8293da583c11bde0de949d736221426ab0bc663d1 - languageName: node - linkType: hard - -"@firebase/installations-compat@npm:0.2.22": - version: 0.2.22 - resolution: "@firebase/installations-compat@npm:0.2.22" - dependencies: - "@firebase/component": "npm:0.7.3" - "@firebase/installations": "npm:0.6.22" - "@firebase/installations-types": "npm:0.5.4" - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - peerDependencies: - "@firebase/app-compat": 0.x - checksum: 10c0/0ba91d39f68507bdfa1f5cc494bbefc2af7acb885ba226e2ff0005e63233b623242bfef083cb6123a839a4dce28f0a54745932c06d821d04ad0dcdbb6a11b7cc - languageName: node - linkType: hard - -"@firebase/installations-types@npm:0.5.4": - version: 0.5.4 - resolution: "@firebase/installations-types@npm:0.5.4" - peerDependencies: - "@firebase/app-types": 0.x - checksum: 10c0/56148089894be055fa3b98b666bc2e75c6f6c679f79a6fc9b1d65e6f58e2d545df283149c990ae56910e39487a5cd65b4d753dd3b4eeea30b61e1691e7c5f134 - languageName: node - linkType: hard - -"@firebase/installations@npm:0.6.22": - version: 0.6.22 - resolution: "@firebase/installations@npm:0.6.22" - dependencies: - "@firebase/component": "npm:0.7.3" - "@firebase/util": "npm:1.15.1" - idb: "npm:7.1.1" - tslib: "npm:^2.1.0" - peerDependencies: - "@firebase/app": 0.x - checksum: 10c0/c8c0f5135b81254f85d68cee80561abad916238220802a5c5734dbd76e52742b91a61767aa1a14e0363e5aa6fd21c67aad47a7117f9c99a2902ef01af8c86739 - languageName: node - linkType: hard - "@firebase/logger@npm:0.5.0": version: 0.5.0 resolution: "@firebase/logger@npm:0.5.0" @@ -4839,167 +4394,6 @@ __metadata: languageName: node linkType: hard -"@firebase/logger@npm:0.5.1": - version: 0.5.1 - resolution: "@firebase/logger@npm:0.5.1" - dependencies: - tslib: "npm:^2.1.0" - checksum: 10c0/ce8644943452e2e1cc00fe4eab2d63c8a0ba6767beb0e57d2ea11f609b5ffa6956c2ec8d6a01efae07a4932b70180c8a07540c53e1ddd876b2baa5858185c247 - languageName: node - linkType: hard - -"@firebase/messaging-compat@npm:0.2.27": - version: 0.2.27 - resolution: "@firebase/messaging-compat@npm:0.2.27" - dependencies: - "@firebase/component": "npm:0.7.3" - "@firebase/messaging": "npm:0.13.0" - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - peerDependencies: - "@firebase/app-compat": 0.x - checksum: 10c0/f2831bdce11e51d041766823312425a75d94a71c9b5d9787412f4b45678c6600c32d571763ea3699d7e28a8b422a6376d37c83d21875d602a2ba90c789609cbb - languageName: node - linkType: hard - -"@firebase/messaging-interop-types@npm:0.2.5": - version: 0.2.5 - resolution: "@firebase/messaging-interop-types@npm:0.2.5" - checksum: 10c0/edffb0e4e5b630ee05f65ab3bbcf71657f05f67da645ec4c1f2d3e7a4abf5d541ef38348599ae5fb584ae9b341a74abab9a162be01695f4181e02b234c549159 - languageName: node - linkType: hard - -"@firebase/messaging@npm:0.13.0": - version: 0.13.0 - resolution: "@firebase/messaging@npm:0.13.0" - dependencies: - "@firebase/component": "npm:0.7.3" - "@firebase/installations": "npm:0.6.22" - "@firebase/messaging-interop-types": "npm:0.2.5" - "@firebase/util": "npm:1.15.1" - idb: "npm:7.1.1" - tslib: "npm:^2.1.0" - peerDependencies: - "@firebase/app": 0.x - checksum: 10c0/e194de2655aedf458cba5b5e3884635da8519f196f2dd3bc04224966c4503448f6937209eea7a93a16685c7d37c04ee3a71793e4463ef6ae7db64e635b67ba56 - languageName: node - linkType: hard - -"@firebase/performance-compat@npm:0.2.25": - version: 0.2.25 - resolution: "@firebase/performance-compat@npm:0.2.25" - dependencies: - "@firebase/component": "npm:0.7.3" - "@firebase/logger": "npm:0.5.1" - "@firebase/performance": "npm:0.7.12" - "@firebase/performance-types": "npm:0.2.4" - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - peerDependencies: - "@firebase/app-compat": 0.x - checksum: 10c0/2fce37ed67f8921eadff7efaedefd892281cf1ccd6277413f23598335e95d6a0e93d5b2b673c93fada18f0c244669abd6a066f8249782a394931a8777c8df998 - languageName: node - linkType: hard - -"@firebase/performance-types@npm:0.2.4": - version: 0.2.4 - resolution: "@firebase/performance-types@npm:0.2.4" - checksum: 10c0/5a823641e637d2b51cda6865804a5f05dba1d0f14b8664f396b5a0c029f5bb74c421240d3bd3fadf307dd9b71571ffcb32d04f5058c65eadbde1bfe4b85ab6c8 - languageName: node - linkType: hard - -"@firebase/performance@npm:0.7.12": - version: 0.7.12 - resolution: "@firebase/performance@npm:0.7.12" - dependencies: - "@firebase/component": "npm:0.7.3" - "@firebase/installations": "npm:0.6.22" - "@firebase/logger": "npm:0.5.1" - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - web-vitals: "npm:^4.2.4" - peerDependencies: - "@firebase/app": 0.x - checksum: 10c0/58211e8bd59b1d4c40c2ebb66504ea0745301308a8c3911da29014176bedf3953521f8dc4d9f0d320d955934a1bef18b17bf4a5dca0546dba702e05e18ed28f9 - languageName: node - linkType: hard - -"@firebase/remote-config-compat@npm:0.2.25": - version: 0.2.25 - resolution: "@firebase/remote-config-compat@npm:0.2.25" - dependencies: - "@firebase/component": "npm:0.7.3" - "@firebase/logger": "npm:0.5.1" - "@firebase/remote-config": "npm:0.8.4" - "@firebase/remote-config-types": "npm:0.5.1" - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - peerDependencies: - "@firebase/app-compat": 0.x - checksum: 10c0/7643a2d084c8827158ab2c98b3306515b6e1837b1a11d2e2649e78454c894e2df0461a34213aa1db75587738ffa135e610504484ed18f68ae2fde823ffa5355f - languageName: node - linkType: hard - -"@firebase/remote-config-types@npm:0.5.1": - version: 0.5.1 - resolution: "@firebase/remote-config-types@npm:0.5.1" - checksum: 10c0/0882c2d9015bcb55a6e460ec3e2807c060984c1a394bf430ba6fa5ef25db53e6baf1d569539ed662e04b431b7e6122ca817437521ecf8be60c31a79a18845b0e - languageName: node - linkType: hard - -"@firebase/remote-config@npm:0.8.4": - version: 0.8.4 - resolution: "@firebase/remote-config@npm:0.8.4" - dependencies: - "@firebase/component": "npm:0.7.3" - "@firebase/installations": "npm:0.6.22" - "@firebase/logger": "npm:0.5.1" - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - peerDependencies: - "@firebase/app": 0.x - checksum: 10c0/5c3a8eeb7a71946b1bbd3f53e00cce205b796aa1745ad5afb4a42d05d499f302ad2be216c33b521c654855d56447b9cd22995313463cea6b56ebc0b502336b98 - languageName: node - linkType: hard - -"@firebase/storage-compat@npm:0.4.3": - version: 0.4.3 - resolution: "@firebase/storage-compat@npm:0.4.3" - dependencies: - "@firebase/component": "npm:0.7.3" - "@firebase/storage": "npm:0.14.3" - "@firebase/storage-types": "npm:0.8.4" - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - peerDependencies: - "@firebase/app-compat": 0.x - checksum: 10c0/4aa392d291dc0864fd286261bac6b00f5c90b9a16a366026db8631f51c7583807e28a00a040dd2d4f1fa897bb60f93a93da61eb16804e7a4075dd19e485e6239 - languageName: node - linkType: hard - -"@firebase/storage-types@npm:0.8.4": - version: 0.8.4 - resolution: "@firebase/storage-types@npm:0.8.4" - peerDependencies: - "@firebase/app-types": 0.x - "@firebase/util": 1.x - checksum: 10c0/66ec5b6c6a703c4eb0fb99761d741148d9ae2b5d06c4d5d6efcfbea368fb80480fb037378e3e5ec2aa8adcfe97bb64016eb263220f7d1a91439e46f23254d5b6 - languageName: node - linkType: hard - -"@firebase/storage@npm:0.14.3": - version: 0.14.3 - resolution: "@firebase/storage@npm:0.14.3" - dependencies: - "@firebase/component": "npm:0.7.3" - "@firebase/util": "npm:1.15.1" - tslib: "npm:^2.1.0" - peerDependencies: - "@firebase/app": 0.x - checksum: 10c0/6ec4d412cd658fd37759d2ad92e57edd5481e63373a38c0b2c5febb7a617e16b6646f94862168282e9aacec72d291af0f48181cb09f806ff66f82d31842b3bf8 - languageName: node - linkType: hard - "@firebase/util@npm:1.15.0": version: 1.15.0 resolution: "@firebase/util@npm:1.15.0" @@ -5009,22 +4403,6 @@ __metadata: languageName: node linkType: hard -"@firebase/util@npm:1.15.1": - version: 1.15.1 - resolution: "@firebase/util@npm:1.15.1" - dependencies: - tslib: "npm:^2.1.0" - checksum: 10c0/7fdb0dd80c98181969375d7a2ee9309783061a77e63c0ddc4935915ca97917cb1bc560bcfd21b9b4171630cae8579f6f21241ae260e4b18789e14adbdd329eea - languageName: node - linkType: hard - -"@firebase/webchannel-wrapper@npm:1.0.6": - version: 1.0.6 - resolution: "@firebase/webchannel-wrapper@npm:1.0.6" - checksum: 10c0/2597e8a9482b47266a8ac2f6dea80062391c90170ad602c315154e1cddeb5eb6b8e609055f26cf31d4a231baa6cd94b628c9d5d26e5b0e44d645833d5b763a5f - languageName: node - linkType: hard - "@floating-ui/core@npm:^1.7.5": version: 1.7.5 resolution: "@floating-ui/core@npm:1.7.5" @@ -5389,19 +4767,6 @@ __metadata: languageName: node linkType: hard -"@google-cloud/firestore@npm:^8.6.0": - version: 8.6.0 - resolution: "@google-cloud/firestore@npm:8.6.0" - dependencies: - "@opentelemetry/api": "npm:^1.9.0" - fast-deep-equal: "npm:^3.1.3" - functional-red-black-tree: "npm:^1.0.1" - google-gax: "npm:^5.0.1" - protobufjs: "npm:^7.5.3" - checksum: 10c0/0d66b3c4469ff919504925054f6169d4761968b9f932aa373c0dbee642390db9dcc4060b1586494ea6f681c150b5db2198d4eeddf88ea1f34afb51c2f5f1f38b - languageName: node - linkType: hard - "@google-cloud/logging-winston@npm:^6.0.0": version: 6.0.1 resolution: "@google-cloud/logging-winston@npm:6.0.1" @@ -5731,17 +5096,7 @@ __metadata: languageName: node linkType: hard -"@grpc/grpc-js@npm:~1.9.0": - version: 1.9.15 - resolution: "@grpc/grpc-js@npm:1.9.15" - dependencies: - "@grpc/proto-loader": "npm:^0.7.8" - "@types/node": "npm:>=12.12.47" - checksum: 10c0/5bd40e1b886df238f8ffe4cab694ceb51250f94ede7da6f94233b4d9a2526a4e525aafbc8f319850c2d8126c189232be458991768877b2af441f0234fb4b4292 - languageName: node - linkType: hard - -"@grpc/proto-loader@npm:^0.7.0, @grpc/proto-loader@npm:^0.7.13, @grpc/proto-loader@npm:^0.7.8": +"@grpc/proto-loader@npm:^0.7.0, @grpc/proto-loader@npm:^0.7.13": version: 0.7.15 resolution: "@grpc/proto-loader@npm:0.7.15" dependencies: @@ -12737,7 +12092,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:>=10.0.0, @types/node@npm:>=12.12.47, @types/node@npm:>=13.7.0": +"@types/node@npm:*, @types/node@npm:>=10.0.0, @types/node@npm:>=13.7.0": version: 25.5.0 resolution: "@types/node@npm:25.5.0" dependencies: @@ -13539,21 +12894,6 @@ __metadata: languageName: node linkType: hard -"a2a-chat-canvas@workspace:samples/client/angular/projects/a2a-chat-canvas": - version: 0.0.0-use.local - resolution: "a2a-chat-canvas@workspace:samples/client/angular/projects/a2a-chat-canvas" - dependencies: - tslib: "npm:^2.8.1" - wireit: "npm:^0.15.0-pre.2" - peerDependencies: - "@a2ui/angular": "workspace:*" - "@a2ui/web_core": "workspace:*" - "@angular/common": ^21.2.5 - "@angular/core": ^21.2.5 - "@angular/platform-browser": ^21.2.5 - languageName: unknown - linkType: soft - "a2ui-over-mcp-recipe-98bdf9@workspace:samples/mcp/a2ui-over-mcp-recipe": version: 0.0.0-use.local resolution: "a2ui-over-mcp-recipe-98bdf9@workspace:samples/mcp/a2ui-over-mcp-recipe" @@ -18433,65 +17773,6 @@ __metadata: languageName: node linkType: hard -"firebase-admin@npm:^14.0.0": - version: 14.0.0 - resolution: "firebase-admin@npm:14.0.0" - dependencies: - "@fastify/busboy": "npm:^3.0.0" - "@firebase/database-compat": "npm:^2.1.4" - "@firebase/database-types": "npm:^1.0.20" - "@google-cloud/firestore": "npm:^8.6.0" - "@google-cloud/storage": "npm:^7.19.0" - farmhash-modern: "npm:^1.1.0" - fast-deep-equal: "npm:^3.1.1" - google-auth-library: "npm:^10.6.2" - jsonwebtoken: "npm:^9.0.0" - jwks-rsa: "npm:^4.0.1" - dependenciesMeta: - "@google-cloud/firestore": - optional: true - "@google-cloud/storage": - optional: true - checksum: 10c0/46588d9d107779c1ca06b6fc99c77265ea2e20cb9975128c4f1ad627d860d13d88afb4fb8c10a47482643f43d287db4e59e5d36a91a26dc070c14e59c0ac8094 - languageName: node - linkType: hard - -"firebase@npm:^12.14.0": - version: 12.14.0 - resolution: "firebase@npm:12.14.0" - dependencies: - "@firebase/ai": "npm:2.13.0" - "@firebase/analytics": "npm:0.10.22" - "@firebase/analytics-compat": "npm:0.2.28" - "@firebase/app": "npm:0.14.13" - "@firebase/app-check": "npm:0.11.4" - "@firebase/app-check-compat": "npm:0.4.4" - "@firebase/app-compat": "npm:0.5.13" - "@firebase/app-types": "npm:0.9.5" - "@firebase/auth": "npm:1.13.2" - "@firebase/auth-compat": "npm:0.6.7" - "@firebase/data-connect": "npm:0.7.1" - "@firebase/database": "npm:1.1.3" - "@firebase/database-compat": "npm:2.1.4" - "@firebase/firestore": "npm:4.15.0" - "@firebase/firestore-compat": "npm:0.4.10" - "@firebase/functions": "npm:0.13.5" - "@firebase/functions-compat": "npm:0.4.5" - "@firebase/installations": "npm:0.6.22" - "@firebase/installations-compat": "npm:0.2.22" - "@firebase/messaging": "npm:0.13.0" - "@firebase/messaging-compat": "npm:0.2.27" - "@firebase/performance": "npm:0.7.12" - "@firebase/performance-compat": "npm:0.2.25" - "@firebase/remote-config": "npm:0.8.4" - "@firebase/remote-config-compat": "npm:0.2.25" - "@firebase/storage": "npm:0.14.3" - "@firebase/storage-compat": "npm:0.4.3" - "@firebase/util": "npm:1.15.1" - checksum: 10c0/7e82d1d6cbe72debd0c7511436d2fb4e6e5157631167a4117fa82a2795c154e97dbea184b88379da051d6b626a69bb7da091968dd43429a3768eaeb958b4ef30 - languageName: node - linkType: hard - "fix-dts-default-cjs-exports@npm:^1.0.0": version: 1.0.1 resolution: "fix-dts-default-cjs-exports@npm:1.0.1" @@ -18765,18 +18046,6 @@ __metadata: languageName: node linkType: hard -"gaxios@npm:7.1.3": - version: 7.1.3 - resolution: "gaxios@npm:7.1.3" - dependencies: - extend: "npm:^3.0.2" - https-proxy-agent: "npm:^7.0.1" - node-fetch: "npm:^3.3.2" - rimraf: "npm:^5.0.1" - checksum: 10c0/a4a1cdf9a392c0c22e9734a40dca5a77a2903f505b939a50f1e68e312458b1289b7993d2f72d011426e89657cae77a3aa9fc62fb140e8ba90a1faa31fdbde4d2 - languageName: node - linkType: hard - "gaxios@npm:^6.0.0, gaxios@npm:^6.0.2, gaxios@npm:^6.0.3, gaxios@npm:^6.1.1": version: 6.7.1 resolution: "gaxios@npm:6.7.1" @@ -18823,17 +18092,6 @@ __metadata: languageName: node linkType: hard -"gcp-metadata@npm:^8.0.0": - version: 8.1.3 - resolution: "gcp-metadata@npm:8.1.3" - dependencies: - gaxios: "npm:7.1.3" - google-logging-utils: "npm:1.1.3" - json-bigint: "npm:^1.0.0" - checksum: 10c0/42a4f8a42084f66136891a256a7acc89eefcb07ec55509b39f3f99ecf1fed9ed8216bb1990722192eaea2bbf3f96e23631a81d68cc166c5bac90a540fbf892c8 - languageName: node - linkType: hard - "generator-function@npm:^2.0.0": version: 2.0.1 resolution: "generator-function@npm:2.0.1" @@ -19142,21 +18400,6 @@ __metadata: languageName: node linkType: hard -"google-auth-library@npm:10.5.0": - version: 10.5.0 - resolution: "google-auth-library@npm:10.5.0" - dependencies: - base64-js: "npm:^1.3.0" - ecdsa-sig-formatter: "npm:^1.0.11" - gaxios: "npm:^7.0.0" - gcp-metadata: "npm:^8.0.0" - google-logging-utils: "npm:^1.0.0" - gtoken: "npm:^8.0.0" - jws: "npm:^4.0.0" - checksum: 10c0/49d3931d20b1f4a4d075216bf5518e2b3396dcf441a8f1952611cf3b6080afb1261c3d32009609047ee4a1cc545269a74b4957e6bba9cce840581df309c4b145 - languageName: node - linkType: hard - "google-auth-library@npm:^10.1.0, google-auth-library@npm:^10.3.0, google-auth-library@npm:^10.5.0, google-auth-library@npm:^10.6.1": version: 10.6.2 resolution: "google-auth-library@npm:10.6.2" @@ -19171,20 +18414,6 @@ __metadata: languageName: node linkType: hard -"google-auth-library@npm:^10.6.2, google-auth-library@npm:^10.7.0": - version: 10.7.0 - resolution: "google-auth-library@npm:10.7.0" - dependencies: - base64-js: "npm:^1.3.0" - ecdsa-sig-formatter: "npm:^1.0.11" - gaxios: "npm:^7.1.4" - gcp-metadata: "npm:8.1.2" - google-logging-utils: "npm:1.1.3" - jws: "npm:^4.0.0" - checksum: 10c0/e8827ff84a69bbd6573229d8245d8fbb8870304e255c213571541d039c33764a6f4a8d773c002a16d6d75e35b9a596310b5c6f8e25b189a02eb4cebd6f022321 - languageName: node - linkType: hard - "google-auth-library@npm:^9.0.0, google-auth-library@npm:^9.1.0, google-auth-library@npm:^9.11.0, google-auth-library@npm:^9.14.0, google-auth-library@npm:^9.14.2, google-auth-library@npm:^9.3.0, google-auth-library@npm:^9.4.2, google-auth-library@npm:^9.6.3, google-auth-library@npm:^9.7.0": version: 9.15.1 resolution: "google-auth-library@npm:9.15.1" @@ -19238,25 +18467,6 @@ __metadata: languageName: node linkType: hard -"google-gax@npm:^5.0.1": - version: 5.0.7 - resolution: "google-gax@npm:5.0.7" - dependencies: - "@grpc/grpc-js": "npm:^1.12.6" - "@grpc/proto-loader": "npm:^0.8.0" - duplexify: "npm:^4.1.3" - google-auth-library: "npm:10.5.0" - google-logging-utils: "npm:1.1.3" - node-fetch: "npm:^3.3.2" - object-hash: "npm:^3.0.0" - proto3-json-serializer: "npm:3.0.4" - protobufjs: "npm:^7.5.4" - retry-request: "npm:^8.0.2" - rimraf: "npm:^5.0.1" - checksum: 10c0/23589773ed578b96e31a5a8c2c327237854db3d1109f1e7dd2355c73ff2cd93d63c17b2505d237db8330b283c85440120b57db0f64dbcff76a3076ffc49ec6ec - languageName: node - linkType: hard - "google-logging-utils@npm:1.1.3, google-logging-utils@npm:^1.0.0, google-logging-utils@npm:^1.1.1": version: 1.1.3 resolution: "google-logging-utils@npm:1.1.3" @@ -19380,16 +18590,6 @@ __metadata: languageName: node linkType: hard -"gtoken@npm:^8.0.0": - version: 8.0.0 - resolution: "gtoken@npm:8.0.0" - dependencies: - gaxios: "npm:^7.0.0" - jws: "npm:^4.0.0" - checksum: 10c0/058538e5bbe081d30ada5f1fd34d3a8194357c2e6ecbf7c8a98daeefbf13f7e06c15649c7dace6a1d4cc3bc6dc5483bd484d6d7adc5852021896d7c05c439f37 - languageName: node - linkType: hard - "gts@npm:^7.0.0": version: 7.0.0 resolution: "gts@npm:7.0.0" @@ -20021,13 +19221,6 @@ __metadata: languageName: node linkType: hard -"idb@npm:7.1.1": - version: 7.1.1 - resolution: "idb@npm:7.1.1" - checksum: 10c0/72418e4397638797ee2089f97b45fc29f937b830bc0eb4126f4a9889ecf10320ceacf3a177fe5d7ffaf6b4fe38b20bbd210151549bfdc881db8081eed41c870d - languageName: node - linkType: hard - "ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": version: 1.2.1 resolution: "ieee754@npm:1.2.1" @@ -21243,19 +20436,6 @@ __metadata: languageName: node linkType: hard -"jwks-rsa@npm:^4.0.1": - version: 4.0.1 - resolution: "jwks-rsa@npm:4.0.1" - dependencies: - "@types/jsonwebtoken": "npm:^9.0.4" - debug: "npm:^4.3.4" - jose: "npm:^6.1.3" - limiter: "npm:^1.1.5" - lru-memoizer: "npm:^3.0.0" - checksum: 10c0/aeca4b1de959707002150556f4f08ed3677fe9dd12bd0be0aa01220a86b88867357c7d2241f4975de9f53125d41cc3f5e4c5e929a8922f257b61634b208d7e3c - languageName: node - linkType: hard - "jws@npm:^4.0.0, jws@npm:^4.0.1": version: 4.0.1 resolution: "jws@npm:4.0.1" @@ -22057,7 +21237,7 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^11.0.1, lru-cache@npm:^11.3.5": +"lru-cache@npm:^11.3.5": version: 11.5.1 resolution: "lru-cache@npm:11.5.1" checksum: 10c0/7b341cea79a8efe9c6a6f20c8757a77eca5b25d7ff983ccf4e11e547b81f6787824baa1c84705251dff84ab4ffac85717ac354b9d02e465f86a9f8b166409979 @@ -22083,16 +21263,6 @@ __metadata: languageName: node linkType: hard -"lru-memoizer@npm:^3.0.0": - version: 3.0.0 - resolution: "lru-memoizer@npm:3.0.0" - dependencies: - lodash.clonedeep: "npm:^4.5.0" - lru-cache: "npm:^11.0.1" - checksum: 10c0/d4d1abedd56a79da6416e0c1ae736c6bc084155d45efe427182d4a8318a1054c5fbd9bba154e6dfe8a8b7de7630392186b81faa84f15746eb5459dc0567f181c - languageName: node - linkType: hard - "lucide-react@npm:^0.523.0": version: 0.523.0 resolution: "lucide-react@npm:0.523.0" @@ -24908,28 +24078,6 @@ __metadata: languageName: node linkType: hard -"personalized-learning-demo@workspace:samples/client/lit/personalized_learning": - version: 0.0.0-use.local - resolution: "personalized-learning-demo@workspace:samples/client/lit/personalized_learning" - dependencies: - "@a2ui/lit": "workspace:*" - "@google/genai": "npm:^2.8.0" - "@lit-labs/signals": "npm:^0.3.0" - "@lit/context": "npm:^1.1.6" - "@types/node": "npm:^25.9.3" - concurrently: "npm:^10.0.3" - dotenv: "npm:^17.4.2" - firebase: "npm:^12.14.0" - firebase-admin: "npm:^14.0.0" - google-auth-library: "npm:^10.7.0" - lit: "npm:^3.3.3" - tsx: "npm:^4.22.4" - typescript: "npm:5.9.3" - vite: "npm:^8.0.16" - wireit: "npm:^0.15.0-pre.2" - languageName: unknown - linkType: soft - "pg-int8@npm:1.0.1": version: 1.0.1 resolution: "pg-int8@npm:1.0.1" @@ -25464,15 +24612,6 @@ __metadata: languageName: node linkType: hard -"proto3-json-serializer@npm:3.0.4, proto3-json-serializer@npm:^3.0.0": - version: 3.0.4 - resolution: "proto3-json-serializer@npm:3.0.4" - dependencies: - protobufjs: "npm:^7.4.0" - checksum: 10c0/59150d5e6b396e00c0374e71eb4ebd6f33acd4212c0ad2acdda12181b08f923b733559d74ad78455085223efe24168d4d42887a8b8f15f7663f20debe5796081 - languageName: node - linkType: hard - "proto3-json-serializer@npm:^2.0.2": version: 2.0.2 resolution: "proto3-json-serializer@npm:2.0.2" @@ -25482,6 +24621,15 @@ __metadata: languageName: node linkType: hard +"proto3-json-serializer@npm:^3.0.0": + version: 3.0.4 + resolution: "proto3-json-serializer@npm:3.0.4" + dependencies: + protobufjs: "npm:^7.4.0" + checksum: 10c0/59150d5e6b396e00c0374e71eb4ebd6f33acd4212c0ad2acdda12181b08f923b733559d74ad78455085223efe24168d4d42887a8b8f15f7663f20debe5796081 + languageName: node + linkType: hard + "protobuf.js@npm:^1.1.2": version: 1.1.2 resolution: "protobuf.js@npm:1.1.2" @@ -26437,16 +25585,6 @@ __metadata: languageName: node linkType: hard -"retry-request@npm:^8.0.2": - version: 8.0.3 - resolution: "retry-request@npm:8.0.3" - dependencies: - extend: "npm:^3.0.2" - teeny-request: "npm:^10.0.0" - checksum: 10c0/07853e505dd61c84bfa5962979303dc806d8a05605cf0906b5157aaa73e4db3d39c918f6db81769c043582f4bddc245adae19c794cff39c7290e6ed46cb4b284 - languageName: node - linkType: hard - "retry@npm:0.13.1, retry@npm:^0.13.1": version: 0.13.1 resolution: "retry@npm:0.13.1" @@ -29908,13 +29046,6 @@ __metadata: languageName: node linkType: hard -"web-vitals@npm:^4.2.4": - version: 4.2.4 - resolution: "web-vitals@npm:4.2.4" - checksum: 10c0/383c9281d5b556bcd190fde3c823aeb005bb8cf82e62c75b47beb411014a4ed13fa5c5e0489ed0f1b8d501cd66b0bebcb8624c1a75750bd5df13e2a3b1b2d194 - languageName: node - linkType: hard - "webdriver-bidi-protocol@npm:0.4.2": version: 0.4.2 resolution: "webdriver-bidi-protocol@npm:0.4.2"