From d5744270111c46c9d8d49889c4d10d927ae6c723 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Thu, 18 Dec 2025 10:10:35 -0800 Subject: [PATCH 1/9] feat: NativeScript renderer and example --- renderers/angular/package-lock.json | 31 +- renderers/lit/package-lock.json | 3 +- renderers/nativescript/README.md | 27 + renderers/nativescript/ng-package.json | 8 + renderers/nativescript/package-lock.json | 9917 +++++++++ renderers/nativescript/package.json | 28 + renderers/nativescript/src/lib/data/index.ts | 1 + .../nativescript/src/lib/data/processor.ts | 47 + .../nativescript/src/lib/rendering/catalog.ts | 36 + .../src/lib/rendering/dynamic-component.ts | 59 + .../nativescript/src/lib/rendering/index.ts | 20 + .../src/lib/rendering/renderer.ts | 98 + .../nativescript/src/lib/rendering/theming.ts | 22 + renderers/nativescript/src/public-api.ts | 5 + renderers/nativescript/tsconfig.json | 9 + renderers/nativescript/tsconfig.lib.json | 18 + samples/client/lit/package-lock.json | 2 + samples/client/nativescript/.editorconfig | 19 + samples/client/nativescript/.gitignore | 28 + .../App_Resources/Android/app.gradle | 25 + .../Android/before-plugins.gradle | 15 + .../Android/src/main/AndroidManifest.xml | 42 + .../src/main/res/drawable-hdpi/background.png | Bin 0 -> 3661 bytes .../src/main/res/drawable-hdpi/logo.png | Bin 0 -> 5165 bytes .../src/main/res/drawable-ldpi/background.png | Bin 0 -> 1609 bytes .../src/main/res/drawable-ldpi/logo.png | Bin 0 -> 2511 bytes .../src/main/res/drawable-mdpi/background.png | Bin 0 -> 2218 bytes .../src/main/res/drawable-mdpi/logo.png | Bin 0 -> 3432 bytes .../main/res/drawable-nodpi/splash_screen.xml | 8 + .../main/res/drawable-xhdpi/background.png | Bin 0 -> 5473 bytes .../src/main/res/drawable-xhdpi/logo.png | Bin 0 -> 6904 bytes .../main/res/drawable-xxhdpi/background.png | Bin 0 -> 9949 bytes .../src/main/res/drawable-xxhdpi/logo.png | Bin 0 -> 10319 bytes .../main/res/drawable-xxxhdpi/background.png | Bin 0 -> 15701 bytes .../src/main/res/drawable-xxxhdpi/logo.png | Bin 0 -> 13941 bytes .../res/drawable/ic_launcher_foreground.xml | 15 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3092 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1956 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4484 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7184 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10378 bytes .../src/main/res/values-v21/colors.xml | 5 + .../src/main/res/values-v21/styles.xml | 34 + .../src/main/res/values-v29/styles.xml | 18 + .../Android/src/main/res/values/colors.xml | 14 + .../res/values/ic_launcher_background.xml | 4 + .../Android/src/main/res/values/styles.xml | 42 + .../AppIcon.appiconset/Contents.json | 122 + .../AppIcon.appiconset/icon-1024.png | Bin 0 -> 17868 bytes .../AppIcon.appiconset/icon-20.png | Bin 0 -> 745 bytes .../AppIcon.appiconset/icon-20@2x.png | Bin 0 -> 995 bytes .../AppIcon.appiconset/icon-20@3x.png | Bin 0 -> 1258 bytes .../AppIcon.appiconset/icon-29.png | Bin 0 -> 851 bytes .../AppIcon.appiconset/icon-29@2x.png | Bin 0 -> 1232 bytes .../AppIcon.appiconset/icon-29@3x.png | Bin 0 -> 1668 bytes .../AppIcon.appiconset/icon-40.png | Bin 0 -> 995 bytes .../AppIcon.appiconset/icon-40@2x.png | Bin 0 -> 1504 bytes .../AppIcon.appiconset/icon-40@3x.png | Bin 0 -> 2121 bytes .../AppIcon.appiconset/icon-60@2x.png | Bin 0 -> 2121 bytes .../AppIcon.appiconset/icon-60@3x.png | Bin 0 -> 3018 bytes .../AppIcon.appiconset/icon-76.png | Bin 0 -> 1482 bytes .../AppIcon.appiconset/icon-76@2x.png | Bin 0 -> 2633 bytes .../AppIcon.appiconset/icon-83.5@2x.png | Bin 0 -> 2831 bytes .../iOS/Assets.xcassets/Contents.json | 6 + .../Contents.json | 23 + .../LaunchScreen-AspectFill.png | Bin 0 -> 4920 bytes .../LaunchScreen-AspectFill@2x.png | Bin 0 -> 14165 bytes .../LaunchScreen-AspectFill@3x.png | Bin 0 -> 27892 bytes .../Contents.json | 23 + .../LaunchScreen-Center.png | Bin 0 -> 6808 bytes .../LaunchScreen-Center@2x.png | Bin 0 -> 13502 bytes .../LaunchScreen-Center@3x.png | Bin 0 -> 20794 bytes .../nativescript/App_Resources/iOS/Info.plist | 47 + .../App_Resources/iOS/LaunchScreen.storyboard | 53 + .../App_Resources/iOS/build.xcconfig | 7 + samples/client/nativescript/README.md | 14 + .../nativescript/nativescript.config.ts | 11 + samples/client/nativescript/package-lock.json | 17235 ++++++++++++++++ samples/client/nativescript/package.json | 53 + samples/client/nativescript/references.d.ts | 1 + samples/client/nativescript/src/app.css | 3 + samples/client/nativescript/src/app/app.html | 6 + samples/client/nativescript/src/app/app.ts | 23 + .../client/nativescript/src/app/catalog.ts | 14 + .../src/app/components/button.component.ts | 21 + samples/client/nativescript/src/main.ts | 25 + samples/client/nativescript/src/polyfills.ts | 8 + .../client/nativescript/tailwind.config.js | 13 + samples/client/nativescript/tsconfig.json | 24 + samples/client/nativescript/webpack.config.js | 10 + 91 files changed, 28342 insertions(+), 5 deletions(-) create mode 100644 renderers/nativescript/README.md create mode 100644 renderers/nativescript/ng-package.json create mode 100644 renderers/nativescript/package-lock.json create mode 100644 renderers/nativescript/package.json create mode 100644 renderers/nativescript/src/lib/data/index.ts create mode 100644 renderers/nativescript/src/lib/data/processor.ts create mode 100644 renderers/nativescript/src/lib/rendering/catalog.ts create mode 100644 renderers/nativescript/src/lib/rendering/dynamic-component.ts create mode 100644 renderers/nativescript/src/lib/rendering/index.ts create mode 100644 renderers/nativescript/src/lib/rendering/renderer.ts create mode 100644 renderers/nativescript/src/lib/rendering/theming.ts create mode 100644 renderers/nativescript/src/public-api.ts create mode 100644 renderers/nativescript/tsconfig.json create mode 100644 renderers/nativescript/tsconfig.lib.json create mode 100644 samples/client/nativescript/.editorconfig create mode 100644 samples/client/nativescript/.gitignore create mode 100644 samples/client/nativescript/App_Resources/Android/app.gradle create mode 100644 samples/client/nativescript/App_Resources/Android/before-plugins.gradle create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/AndroidManifest.xml create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/drawable-hdpi/background.png create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/drawable-hdpi/logo.png create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/drawable-ldpi/background.png create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/drawable-ldpi/logo.png create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/drawable-mdpi/background.png create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/drawable-mdpi/logo.png create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/drawable-xhdpi/background.png create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/values-v21/colors.xml create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/values-v21/styles.xml create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/values-v29/styles.xml create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/values/colors.xml create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/values/ic_launcher_background.xml create mode 100644 samples/client/nativescript/App_Resources/Android/src/main/res/values/styles.xml create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20.png create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/Contents.json create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/Contents.json create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@3x.png create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png create mode 100644 samples/client/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@3x.png create mode 100644 samples/client/nativescript/App_Resources/iOS/Info.plist create mode 100644 samples/client/nativescript/App_Resources/iOS/LaunchScreen.storyboard create mode 100644 samples/client/nativescript/App_Resources/iOS/build.xcconfig create mode 100644 samples/client/nativescript/README.md create mode 100644 samples/client/nativescript/nativescript.config.ts create mode 100644 samples/client/nativescript/package-lock.json create mode 100644 samples/client/nativescript/package.json create mode 100644 samples/client/nativescript/references.d.ts create mode 100644 samples/client/nativescript/src/app.css create mode 100644 samples/client/nativescript/src/app/app.html create mode 100644 samples/client/nativescript/src/app/app.ts create mode 100644 samples/client/nativescript/src/app/catalog.ts create mode 100644 samples/client/nativescript/src/app/components/button.component.ts create mode 100644 samples/client/nativescript/src/main.ts create mode 100644 samples/client/nativescript/src/polyfills.ts create mode 100644 samples/client/nativescript/tailwind.config.js create mode 100644 samples/client/nativescript/tsconfig.json create mode 100644 samples/client/nativescript/webpack.config.js diff --git a/renderers/angular/package-lock.json b/renderers/angular/package-lock.json index 65f842d0..7772fefe 100644 --- a/renderers/angular/package-lock.json +++ b/renderers/angular/package-lock.json @@ -8,7 +8,7 @@ "name": "@a2ui/angular", "version": "0.8.1", "dependencies": { - "@a2ui/web-lib": "file:../lit", + "@a2ui/lit": "file:../lit", "markdown-it": "^14.1.0", "tslib": "^2.3.0" }, @@ -66,7 +66,7 @@ "wireit": "^0.15.0-pre.2" } }, - "node_modules/@a2ui/web-lib": { + "node_modules/@a2ui/lit": { "resolved": "../lit", "link": true }, @@ -543,6 +543,7 @@ "integrity": "sha512-s9IN4Won1lTmO2vUIIMc4zZHQ2A68pYr/BiieM6frYBhRAwtdyqZW0C5TTeRlFhHe+jMlOdbaJwF8OJrFT7drQ==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -556,6 +557,7 @@ "integrity": "sha512-zb8Wl8Knsdp0nDvIljR9Y0T79OgzaJm45MvtTBTl7T9lw9kpJvVf09RfTLNtk7VS8ieDPZgDb2c6gpQRODIjjw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/core": "7.28.4", "@jridgewell/sourcemap-codec": "^1.4.14", @@ -588,6 +590,7 @@ "resolved": "https://registry.npmjs.org/@angular/core/-/core-21.0.3.tgz", "integrity": "sha512-/7a2FyZp5cyjNiwuNLr889KA8DVKSTcTtZJpz57Z9DpmZhPscDOWQqLn9f8jeEwbWllvgrXJi8pKSa78r8JAwA==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -717,6 +720,7 @@ "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", @@ -1077,6 +1081,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -1123,6 +1128,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -1890,6 +1896,7 @@ "integrity": "sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@inquirer/checkbox": "^4.3.0", "@inquirer/confirm": "^5.1.19", @@ -4279,6 +4286,7 @@ "integrity": "sha512-0l6cjgF0XnihUpndDhk+nyD3exio3iKaYROSgvh/qSevPXax3L8p5DBRFjbvalnwatGgHEQn2R88y2fA3g4irg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~6.21.0" } @@ -5058,6 +5066,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -6561,6 +6570,7 @@ "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" @@ -8354,7 +8364,8 @@ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.9.0.tgz", "integrity": "sha512-OMUvF1iI6+gSRYOhMrH4QYothVLN9C3EJ6wm4g7zLJlnaTl8zbaPOr0bTw70l7QxkoM7sVFOWo83u9B2Fe2Zng==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/jose": { "version": "6.1.3", @@ -8608,6 +8619,7 @@ "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", @@ -8965,6 +8977,7 @@ "integrity": "sha512-j1n1IuTX1VQjIy3tT7cyGbX7nvQOsFLoIqobZv4ttI5axP923gA44zUj6miiA6R5Aoms4sEGVIIcucXUbRI14g==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -9063,6 +9076,7 @@ "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cli-truncate": "^5.0.0", "colorette": "^2.0.20", @@ -9954,6 +9968,7 @@ "integrity": "sha512-2lMGkmS91FyP+p/Tzmu49hY+p1PDgHBNM+Fce8yrzZo8/EbybNPBYfJnwFfl0lwGmqpYLevH2oh12+ikKCLv9g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.3.0", "@rollup/plugin-json": "^6.1.0", @@ -11441,6 +11456,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -11801,6 +11817,7 @@ "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -11892,6 +11909,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "license": "Apache-2.0", + "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -12952,7 +12970,8 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "license": "0BSD", + "peer": true }, "node_modules/tuf-js": { "version": "4.0.0", @@ -13047,6 +13066,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -13264,6 +13284,7 @@ "integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -13823,6 +13844,7 @@ "integrity": "sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@vitest/expect": "4.0.15", "@vitest/mocker": "4.0.15", @@ -14246,6 +14268,7 @@ "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/renderers/lit/package-lock.json b/renderers/lit/package-lock.json index 26b270e0..c7c9c4f9 100644 --- a/renderers/lit/package-lock.json +++ b/renderers/lit/package-lock.json @@ -993,7 +993,8 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/signal-polyfill/-/signal-polyfill-0.2.2.tgz", "integrity": "sha512-p63Y4Er5/eMQ9RHg0M0Y64NlsQKpiu6MDdhBXpyywRuWiPywhJTpKJ1iB5K2hJEbFZ0BnDS7ZkJ+0AfTuL37Rg==", - "license": "Apache-2.0" + "license": "Apache-2.0", + "peer": true }, "node_modules/signal-utils": { "version": "0.21.1", diff --git a/renderers/nativescript/README.md b/renderers/nativescript/README.md new file mode 100644 index 00000000..b6642722 --- /dev/null +++ b/renderers/nativescript/README.md @@ -0,0 +1,27 @@ +# @a2ui/nativescript + +This is a NativeScript renderer for A2UI. + +## Usage + +1. Install the package (once published or linked). +2. Implement the `Catalog` abstract class to map A2UI components to NativeScript Angular components. +3. Provide the `Catalog` implementation in your application. +4. Use the `a2ui-renderer` directive to render components. + +```typescript +// app.component.ts +import { Component } from '@angular/core'; +import { Renderer } from '@a2ui/nativescript'; + +@Component({ + selector: 'ns-app', + template: ` + + `, + imports: [Renderer], +}) +export class AppComponent { + // ... +} +``` diff --git a/renderers/nativescript/ng-package.json b/renderers/nativescript/ng-package.json new file mode 100644 index 00000000..aa1c7c97 --- /dev/null +++ b/renderers/nativescript/ng-package.json @@ -0,0 +1,8 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "./dist", + "lib": { + "entryFile": "src/public-api.ts" + }, + "allowedNonPeerDependencies": ["@a2ui/lit"] +} diff --git a/renderers/nativescript/package-lock.json b/renderers/nativescript/package-lock.json new file mode 100644 index 00000000..1889e781 --- /dev/null +++ b/renderers/nativescript/package-lock.json @@ -0,0 +1,9917 @@ +{ + "name": "@a2ui/nativescript", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@a2ui/nativescript", + "version": "0.0.1", + "dependencies": { + "@a2ui/lit": "file:../lit", + "tslib": "^2.3.0" + }, + "devDependencies": { + "@angular/build": "^21.0.0", + "@angular/cli": "^21.0.0", + "@angular/compiler": "^21.0.0", + "@angular/compiler-cli": "^21.0.0", + "@angular/core": "^21.0.0", + "@nativescript/angular": "21.0.0-rc.2", + "@nativescript/core": "^9.0.0", + "ng-packagr": "^21.0.0", + "typescript": "~5.9.2" + }, + "peerDependencies": { + "@angular/common": "^21.0.0", + "@angular/core": "^21.0.0", + "@nativescript/angular": "21.0.0-rc.2", + "@nativescript/core": "^9.0.0" + } + }, + "../lit": { + "name": "@a2ui/lit", + "version": "0.8.1", + "license": "Apache-2.0", + "dependencies": { + "@lit-labs/signals": "^0.1.3", + "@lit/context": "^1.1.4", + "lit": "^3.3.1", + "markdown-it": "^14.1.0", + "signal-utils": "^0.21.1" + }, + "devDependencies": { + "@types/markdown-it": "^14.1.2", + "@types/node": "^24.10.1", + "google-artifactregistry-auth": "^3.5.0", + "typescript": "^5.8.3", + "wireit": "^0.15.0-pre.2" + } + }, + "node_modules/@a2ui/lit": { + "resolved": "../lit", + "link": true + }, + "node_modules/@algolia/abtesting": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.6.1.tgz", + "integrity": "sha512-wV/gNRkzb7sI9vs1OneG129hwe3Q5zPj7zigz3Ps7M5Lpo2hSorrOnXNodHEOV+yXE/ks4Pd+G3CDFIjFTWhMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-abtesting": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.40.1.tgz", + "integrity": "sha512-cxKNATPY5t+Mv8XAVTI57altkaPH+DZi4uMrnexPxPHODMljhGYY+GDZyHwv9a+8CbZHcY372OkxXrDMZA4Lnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.40.1.tgz", + "integrity": "sha512-XP008aMffJCRGAY8/70t+hyEyvqqV7YKm502VPu0+Ji30oefrTn2al7LXkITz7CK6I4eYXWRhN6NaIUi65F1OA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.40.1.tgz", + "integrity": "sha512-gWfQuQUBtzUboJv/apVGZMoxSaB0M4Imwl1c9Ap+HpCW7V0KhjBddqF2QQt5tJZCOFsfNIgBbZDGsEPaeKUosw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.40.1.tgz", + "integrity": "sha512-RTLjST/t+lsLMouQ4zeLJq2Ss+UNkLGyNVu+yWHanx6kQ3LT5jv8UvPwyht9s7R6jCPnlSI77WnL80J32ZuyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.40.1.tgz", + "integrity": "sha512-2FEK6bUomBzEYkTKzD0iRs7Ljtjb45rKK/VSkyHqeJnG+77qx557IeSO0qVFE3SfzapNcoytTofnZum0BQ6r3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.40.1.tgz", + "integrity": "sha512-Nju4NtxAvXjrV2hHZNLKVJLXjOlW6jAXHef/CwNzk1b2qIrCWDO589ELi5ZHH1uiWYoYyBXDQTtHmhaOVVoyXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.40.1.tgz", + "integrity": "sha512-Mw6pAUF121MfngQtcUb5quZVqMC68pSYYjCRZkSITC085S3zdk+h/g7i6FxnVdbSU6OztxikSDMh1r7Z+4iPlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/ingestion": { + "version": "1.40.1", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.40.1.tgz", + "integrity": "sha512-z+BPlhs45VURKJIxsR99NNBWpUEEqIgwt10v/fATlNxc4UlXvALdOsWzaFfe89/lbP5Bu4+mbO59nqBC87ZM/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.40.1", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.40.1.tgz", + "integrity": "sha512-VJMUMbO0wD8Rd2VVV/nlFtLJsOAQvjnVNGkMkspFiFhpBA7s/xJOb+fJvvqwKFUjbKTUA7DjiSi1ljSMYBasXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.40.1.tgz", + "integrity": "sha512-ehvJLadKVwTp9Scg9NfzVSlBKH34KoWOQNTaN8i1Ac64AnO6iH2apJVSP6GOxssaghZ/s8mFQsDH3QIZoluFHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.40.1.tgz", + "integrity": "sha512-PbidVsPurUSQIr6X9/7s34mgOMdJnn0i6p+N6Ab+lsNhY5eiu+S33kZEpZwkITYBCIbhzDLOvb7xZD3gDi+USA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.40.1.tgz", + "integrity": "sha512-ThZ5j6uOZCF11fMw9IBkhigjOYdXGXQpj6h4k+T9UkZrF2RlKcPynFzDeRgaLdpYk8Yn3/MnFbwUmib7yxj5Lw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.40.1.tgz", + "integrity": "sha512-H1gYPojO6krWHnUXu/T44DrEun/Wl95PJzMXRcM/szstNQczSbwq6wIFJPI9nyE95tarZfUNU3rgorT+wZ6iCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.2100.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2100.3.tgz", + "integrity": "sha512-PcruWF0+IxXOTZd9MN/3y4A5aTfblALzT/+zWym26PtisaBgWQ3tRPQsf/CgT8EdmZl8eUOAWlNBSkbUj/S/lQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "21.0.3", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.0.3.tgz", + "integrity": "sha512-X1y3GMYru9+Vt7vz+R8SFAEmDtgf0aZ+1JOpiE7ubHsQOnhA++Pb94HBjQ6CHqlUhQli/XPOBksKNdZkpup8rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.3", + "rxjs": "7.8.2", + "source-map": "0.7.6" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^4.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.0.3.tgz", + "integrity": "sha512-E/Nja+RIyMzjqLXREOnTRwv7GMrycpAD7kGwDg7l8cWrNQ7phqBZcXAt74Jv9K9aYsOC8tw2Ms9t59aQ6iow8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "21.0.3", + "jsonc-parser": "3.3.1", + "magic-string": "0.30.19", + "ora": "9.0.0", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/build": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-21.0.3.tgz", + "integrity": "sha512-3h2s0Igruei1RB/Hmu7nwbKvjJQ2ykNaiicXYuS2muWUBhDg+lm0QsGTGXrQV2BD0M9YdHU4Byh9upiZgMYpjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.2100.3", + "@babel/core": "7.28.4", + "@babel/helper-annotate-as-pure": "7.27.3", + "@babel/helper-split-export-declaration": "7.24.7", + "@inquirer/confirm": "5.1.19", + "@vitejs/plugin-basic-ssl": "2.1.0", + "beasties": "0.3.5", + "browserslist": "^4.26.0", + "esbuild": "0.26.0", + "https-proxy-agent": "7.0.6", + "istanbul-lib-instrument": "6.0.3", + "jsonc-parser": "3.3.1", + "listr2": "9.0.5", + "magic-string": "0.30.19", + "mrmime": "2.0.1", + "parse5-html-rewriting-stream": "8.0.0", + "picomatch": "4.0.3", + "piscina": "5.1.3", + "rolldown": "1.0.0-beta.47", + "sass": "1.93.2", + "semver": "7.7.3", + "source-map-support": "0.5.21", + "tinyglobby": "0.2.15", + "undici": "7.16.0", + "vite": "7.2.2", + "watchpack": "2.4.4" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "lmdb": "3.4.3" + }, + "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.0.3", + "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" + }, + "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 + } + } + }, + "node_modules/@angular/cli": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.0.3.tgz", + "integrity": "sha512-3lMR3J231JhLgAt37yEULSHFte3zPeta9VYpIIf92JiBsTnWrvKnaK8RXhfdiSQrvhqQ9FMQdl5AG62r1c4dbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.2100.3", + "@angular-devkit/core": "21.0.3", + "@angular-devkit/schematics": "21.0.3", + "@inquirer/prompts": "7.9.0", + "@listr2/prompt-adapter-inquirer": "3.0.5", + "@modelcontextprotocol/sdk": "1.24.0", + "@schematics/angular": "21.0.3", + "@yarnpkg/lockfile": "1.1.0", + "algoliasearch": "5.40.1", + "ini": "5.0.0", + "jsonc-parser": "3.3.1", + "listr2": "9.0.5", + "npm-package-arg": "13.0.1", + "pacote": "21.0.3", + "parse5-html-rewriting-stream": "8.0.0", + "resolve": "1.22.11", + "semver": "7.7.3", + "yargs": "18.0.0", + "zod": "4.1.13" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/common": { + "version": "21.0.6", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-21.0.6.tgz", + "integrity": "sha512-Yd8PF0dR37FAzqEcBHAyVCiSGMJOezSJe6rV/4BC6AVLfaZ7oZLl8CNVxKsod2UHd6rKxt1hzx05QdVcVvYNeA==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/core": "21.0.6", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "21.0.6", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.0.6.tgz", + "integrity": "sha512-rBMzG7WnQMouFfDST+daNSAOVYdtw560645PhlxyVeIeHMlCm0j1jjBgVPGTBNpVgKRdT/sqbi6W6JYkY9mERA==", + "devOptional": true, + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@angular/compiler-cli": { + "version": "21.0.6", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.0.6.tgz", + "integrity": "sha512-UcIUx+fbn0VLlCBCIYxntAzWG3zPRUo0K7wvuK0MC6ZFCWawgewx9SdLLZTqcaWe1g5FRQlQeVQcFgHAO5R2Mw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "7.28.4", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^4.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.2.0", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^18.0.0" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/compiler": "21.0.6", + "typescript": ">=5.9 <6.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@angular/core": { + "version": "21.0.6", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-21.0.6.tgz", + "integrity": "sha512-SvWbOkkrsqprYJSBmzQEWkWjfZB/jkRYyFp2ClMJBPqOLxP1a+i3Om2rolcNQjZPz87bs9FszwgRlXUy7sw5cQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/compiler": "21.0.6", + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.15.0 || ~0.16.0" + }, + "peerDependenciesMeta": { + "@angular/compiler": { + "optional": true + }, + "zone.js": { + "optional": true + } + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", + "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.4", + "@babel/types": "^7.28.4", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@emnapi/core": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", + "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", + "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.26.0.tgz", + "integrity": "sha512-hj0sKNCQOOo2fgyII3clmJXP28VhgDfU5iy3GNHlWO76KG6N7x4D9ezH5lJtQTG+1J6MFDAJXC1qsI+W+LvZoA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.26.0.tgz", + "integrity": "sha512-C0hkDsYNHZkBtPxxDx177JN90/1MiCpvBNjz1f5yWJo1+5+c5zr8apjastpEG+wtPjo9FFtGG7owSsAxyKiHxA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.26.0.tgz", + "integrity": "sha512-DDnoJ5eoa13L8zPh87PUlRd/IyFaIKOlRbxiwcSbeumcJ7UZKdtuMCHa1Q27LWQggug6W4m28i4/O2qiQQ5NZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.26.0.tgz", + "integrity": "sha512-bKDkGXGZnj0T70cRpgmv549x38Vr2O3UWLbjT2qmIkdIWcmlg8yebcFWoT9Dku7b5OV3UqPEuNKRzlNhjwUJ9A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.26.0.tgz", + "integrity": "sha512-6Z3naJgOuAIB0RLlJkYc81An3rTlQ/IeRdrU3dOea8h/PvZSgitZV+thNuIccw0MuK1GmIAnAmd5TrMZad8FTQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.26.0.tgz", + "integrity": "sha512-OPnYj0zpYW0tHusMefyaMvNYQX5pNQuSsHFTHUBNp3vVXupwqpxofcjVsUx11CQhGVkGeXjC3WLjh91hgBG2xw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.26.0.tgz", + "integrity": "sha512-jix2fa6GQeZhO1sCKNaNMjfj5hbOvoL2F5t+w6gEPxALumkpOV/wq7oUBMHBn2hY2dOm+mEV/K+xfZy3mrsxNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.26.0.tgz", + "integrity": "sha512-tccJaH5xHJD/239LjbVvJwf6T4kSzbk6wPFerF0uwWlkw/u7HL+wnAzAH5GB2irGhYemDgiNTp8wJzhAHQ64oA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.26.0.tgz", + "integrity": "sha512-JY8NyU31SyRmRpuc5W8PQarAx4TvuYbyxbPIpHAZdr/0g4iBr8KwQBS4kiiamGl2f42BBecHusYCsyxi7Kn8UQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.26.0.tgz", + "integrity": "sha512-IMJYN7FSkLttYyTbsbme0Ra14cBO5z47kpamo16IwggzzATFY2lcZAwkbcNkWiAduKrTgFJP7fW5cBI7FzcuNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.26.0.tgz", + "integrity": "sha512-XITaGqGVLgk8WOHw8We9Z1L0lbLFip8LyQzKYFKO4zFo1PFaaSKsbNjvkb7O8kEXytmSGRkYpE8LLVpPJpsSlw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.26.0.tgz", + "integrity": "sha512-MkggfbDIczStUJwq9wU7gQ7kO33d8j9lWuOCDifN9t47+PeI+9m2QVh51EI/zZQ1spZtFMC1nzBJ+qNGCjJnsg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.26.0.tgz", + "integrity": "sha512-fUYup12HZWAeccNLhQ5HwNBPr4zXCPgUWzEq2Rfw7UwqwfQrFZ0SR/JljaURR8xIh9t+o1lNUFTECUTmaP7yKA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.26.0.tgz", + "integrity": "sha512-MzRKhM0Ip+//VYwC8tialCiwUQ4G65WfALtJEFyU0GKJzfTYoPBw5XNWf0SLbCUYQbxTKamlVwPmcw4DgZzFxg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.26.0.tgz", + "integrity": "sha512-QhCc32CwI1I4Jrg1enCv292sm3YJprW8WHHlyxJhae/dVs+KRWkbvz2Nynl5HmZDW/m9ZxrXayHzjzVNvQMGQA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.26.0.tgz", + "integrity": "sha512-1D6vi6lfI18aNT1aTf2HV+RIlm6fxtlAp8eOJ4mmnbYmZ4boz8zYDar86sIYNh0wmiLJEbW/EocaKAX6Yso2fw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.26.0.tgz", + "integrity": "sha512-rnDcepj7LjrKFvZkx+WrBv6wECeYACcFjdNPvVPojCPJD8nHpb3pv3AuR9CXgdnjH1O23btICj0rsp0L9wAnHA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.26.0.tgz", + "integrity": "sha512-FSWmgGp0mDNjEXXFcsf12BmVrb+sZBBBlyh3LwB/B9ac3Kkc8x5D2WimYW9N7SUkolui8JzVnVlWh7ZmjCpnxw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.26.0.tgz", + "integrity": "sha512-0QfciUDFryD39QoSPUDshj4uNEjQhp73+3pbSAaxjV2qGOEDsM67P7KbJq7LzHoVl46oqhIhJ1S+skKGR7lMXA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.26.0.tgz", + "integrity": "sha512-vmAK+nHhIZWImwJ3RNw9hX3fU4UGN/OqbSE0imqljNbUQC3GvVJ1jpwYoTfD6mmXmQaxdJY6Hn4jQbLGJKg5Yw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.26.0.tgz", + "integrity": "sha512-GPXF7RMkJ7o9bTyUsnyNtrFMqgM3X+uM/LWw4CeHIjqc32fm0Ir6jKDnWHpj8xHFstgWDUYseSABK9KCkHGnpg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.26.0.tgz", + "integrity": "sha512-nUHZ5jEYqbBthbiBksbmHTlbb5eElyVfs/s1iHQ8rLBq1eWsd5maOnDpCocw1OM8kFK747d1Xms8dXJHtduxSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.26.0.tgz", + "integrity": "sha512-TMg3KCTCYYaVO+R6P5mSORhcNDDlemUVnUbb8QkboUtOhb5JWKAzd5uMIMECJQOxHZ/R+N8HHtDF5ylzLfMiLw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.26.0.tgz", + "integrity": "sha512-apqYgoAUd6ZCb9Phcs8zN32q6l0ZQzQBdVXOofa6WvHDlSOhwCWgSfVQabGViThS40Y1NA4SCvQickgZMFZRlA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.26.0.tgz", + "integrity": "sha512-FGJAcImbJNZzLWu7U6WB0iKHl4RuY4TsXEwxJPl9UZLS47agIZuILZEX3Pagfw7I4J3ddflomt9f0apfaJSbaw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.26.0.tgz", + "integrity": "sha512-WAckBKaVnmFqbEhbymrPK7M086DQMpL1XoRbpmN0iW8k5JSXjDRQBhcZNa0VweItknLq9eAeCL34jK7/CDcw7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/ansi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", + "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.2.tgz", + "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.19", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.19.tgz", + "integrity": "sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", + "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor": { + "version": "4.2.23", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz", + "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/external-editor": "^1.0.3", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.23.tgz", + "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz", + "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz", + "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.23.tgz", + "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.9.0.tgz", + "integrity": "sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@inquirer/checkbox": "^4.3.0", + "@inquirer/confirm": "^5.1.19", + "@inquirer/editor": "^4.2.21", + "@inquirer/expand": "^4.0.21", + "@inquirer/input": "^4.2.5", + "@inquirer/number": "^3.0.21", + "@inquirer/password": "^4.0.21", + "@inquirer/rawlist": "^4.1.9", + "@inquirer/search": "^3.2.0", + "@inquirer/select": "^4.4.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.11.tgz", + "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.2.tgz", + "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.2.tgz", + "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", + "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@listr2/prompt-adapter-inquirer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-3.0.5.tgz", + "integrity": "sha512-WELs+hj6xcilkloBXYf9XXK8tYEnKsgLj01Xl5ONUJpKjmT5hGVUzNUS5tooUxs7pGMrw+jFD/41WpqW4V3LDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@inquirer/prompts": ">= 3 < 8", + "listr2": "9.0.5" + } + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.4.3.tgz", + "integrity": "sha512-zR6Y45VNtW5s+A+4AyhrJk0VJKhXdkLhrySCpCu7PSdnakebsOzNxf58p5Xoq66vOSuueGAxlqDAF49HwdrSTQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.4.3.tgz", + "integrity": "sha512-nfGm5pQksBGfaj9uMbjC0YyQreny/Pl7mIDtHtw6g7WQuCgeLullr9FNRsYyKplaEJBPrCVpEjpAznxTBIrXBw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.4.3.tgz", + "integrity": "sha512-Kjqomp7i0rgSbYSUmv9JnXpS55zYT/YcW3Bdf9oqOTjcH0/8tFAP8MLhu/i9V2pMKIURDZk63Ww49DTK0T3c/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.4.3.tgz", + "integrity": "sha512-uX9eaPqWb740wg5D3TCvU/js23lSRSKT7lJrrQ8IuEG/VLgpPlxO3lHDywU44yFYdGS7pElBn6ioKFKhvALZlw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.4.3.tgz", + "integrity": "sha512-7/8l20D55CfwdMupkc3fNxNJdn4bHsti2X0cp6PwiXlLeSFvAfWs5kCCx+2Cyje4l4GtN//LtKWjTru/9hDJQg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-arm64": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.4.3.tgz", + "integrity": "sha512-yWVR0e5Gl35EGJBsAuqPOdjtUYuN8CcTLKrqpQFoM+KsMadViVCulhKNhkcjSGJB88Am5bRPjMro4MBB9FS23Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.4.3.tgz", + "integrity": "sha512-1JdBkcO0Vrua4LUgr4jAe4FUyluwCeq/pDkBrlaVjX3/BBWP1TzVjCL+TibWNQtPAL1BITXPAhlK5Ru4FBd/hg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.24.0.tgz", + "integrity": "sha512-D8h5KXY2vHFW8zTuxn2vuZGN0HGrQ5No6LkHwlEA9trVgNdPL3TF1dSqKA7Dny6BbBYKSW/rOBDXdC8KJAjUCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "jose": "^6.1.1", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", + "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", + "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", + "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", + "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", + "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", + "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@napi-rs/nice": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.1.1.tgz", + "integrity": "sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/nice-android-arm-eabi": "1.1.1", + "@napi-rs/nice-android-arm64": "1.1.1", + "@napi-rs/nice-darwin-arm64": "1.1.1", + "@napi-rs/nice-darwin-x64": "1.1.1", + "@napi-rs/nice-freebsd-x64": "1.1.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.1.1", + "@napi-rs/nice-linux-arm64-gnu": "1.1.1", + "@napi-rs/nice-linux-arm64-musl": "1.1.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.1.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.1.1", + "@napi-rs/nice-linux-s390x-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-musl": "1.1.1", + "@napi-rs/nice-openharmony-arm64": "1.1.1", + "@napi-rs/nice-win32-arm64-msvc": "1.1.1", + "@napi-rs/nice-win32-ia32-msvc": "1.1.1", + "@napi-rs/nice-win32-x64-msvc": "1.1.1" + } + }, + "node_modules/@napi-rs/nice-android-arm-eabi": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz", + "integrity": "sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-android-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz", + "integrity": "sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz", + "integrity": "sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz", + "integrity": "sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-freebsd-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz", + "integrity": "sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz", + "integrity": "sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz", + "integrity": "sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz", + "integrity": "sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-ppc64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz", + "integrity": "sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-riscv64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz", + "integrity": "sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-s390x-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz", + "integrity": "sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz", + "integrity": "sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz", + "integrity": "sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-openharmony-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz", + "integrity": "sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-arm64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz", + "integrity": "sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-ia32-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz", + "integrity": "sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-x64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz", + "integrity": "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.0.tgz", + "integrity": "sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@tybys/wasm-util": "^0.10.1" + } + }, + "node_modules/@nativescript/angular": { + "version": "21.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@nativescript/angular/-/angular-21.0.0-rc.2.tgz", + "integrity": "sha512-gghBkClTq+BfiTFP/5SOMvlIoA5vK+RCBipO58C8JXn/5kr5hQ6ybRGp+G1dU+9qBWVZDgTo1/QNffDTHLLyfA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@nativescript/zone-js": "^4.0.0", + "tslib": "^2.3.0" + } + }, + "node_modules/@nativescript/core": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@nativescript/core/-/core-9.0.8.tgz", + "integrity": "sha512-CiMiSxXsFNeYm67enKbanKflvfdWr9Yk28SSSOXV8I4hLPElEq4kKkqwFIwM7y3Ago2jhAsMGv4Ymz61Q6WfFg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/NativeScript" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NativeScript" + } + ], + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@csstools/css-calc": "~2.1.4", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@nativescript/hook": "~3.0.4", + "acorn": "^8.15.0", + "css-tree": "^3.1.0", + "css-what": "^7.0.0", + "emoji-regex": "^10.2.1", + "source-map": "0.7.6", + "source-map-js": "^1.2.1", + "tslib": "^2.0.0" + } + }, + "node_modules/@nativescript/hook": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@nativescript/hook/-/hook-3.0.4.tgz", + "integrity": "sha512-oahiN7V0D+fgl9o8mjGRgExujTpgSBB0DAFr3eX91qdlJZV8ywJ6mnvtHZyEI2j46yPgAE8jmNIw/Z/d3aWetw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "glob": "^11.0.0", + "mkdirp": "^3.0.1" + } + }, + "node_modules/@nativescript/zone-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@nativescript/zone-js/-/zone-js-4.0.0.tgz", + "integrity": "sha512-CpCMfQ8lPOmW0RKPhE0XByt78zmN12zKdaJTv6dlqHOjvfDqnpXwtlQVONkaDgxtowuTRJaQqWZsc2Wsyec/LA==", + "dev": true + }, + "node_modules/@npmcli/agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", + "integrity": "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==", + "dev": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^11.2.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@npmcli/fs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-5.0.0.tgz", + "integrity": "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-7.0.1.tgz", + "integrity": "sha512-+XTFxK2jJF/EJJ5SoAzXk3qwIDfvFc5/g+bD274LZ7uY7LE8sTfG6Z8rOanPl2ZEvZWqNvmEdtXC25cE54VcoA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^9.0.0", + "ini": "^6.0.0", + "lru-cache": "^11.2.1", + "npm-pick-manifest": "^11.0.1", + "proc-log": "^6.0.0", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git/node_modules/@npmcli/promise-spawn": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", + "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git/node_modules/ini": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", + "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@npmcli/git/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", + "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", + "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz", + "integrity": "sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.4.tgz", + "integrity": "sha512-0wInJG3j/K40OJt/33ax47WfWMzZTm6OQxB9cDhTt5huCP2a9g2GnlsxmfN+PulItNPIpPrZ+kfwwUil7eHcZQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "glob": "^13.0.0", + "hosted-git-info": "^9.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", + "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "path-scurry": "^2.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.3.tgz", + "integrity": "sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-4.0.0.tgz", + "integrity": "sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.3.tgz", + "integrity": "sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "node-gyp": "^12.1.0", + "proc-log": "^6.0.0", + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/@npmcli/promise-spawn": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", + "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/run-script/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", + "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.96.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.96.0.tgz", + "integrity": "sha512-r/xkmoXA0xEpU6UGtn18CNVjXH6erU3KCpCDbpLmbVxBFor1U9MqN5Z2uMmCHJuXjJzlnDR+hWY+yPoLo8oHDw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/@parcel/watcher/node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-beta.47.tgz", + "integrity": "sha512-vPP9/MZzESh9QtmvQYojXP/midjgkkc1E4AdnPPAzQXo668ncHJcVLKjJKzoBdsQmaIvNjrMdsCwES8vTQHRQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-beta.47.tgz", + "integrity": "sha512-Lc3nrkxeaDVCVl8qR3qoxh6ltDZfkQ98j5vwIr5ALPkgjZtDK4BGCrrBoLpGVMg+csWcaqUbwbKwH5yvVa0oOw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-beta.47.tgz", + "integrity": "sha512-eBYxQDwP0O33plqNVqOtUHqRiSYVneAknviM5XMawke3mwMuVlAsohtOqEjbCEl/Loi/FWdVeks5WkqAkzkYWQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-beta.47.tgz", + "integrity": "sha512-Ns+kgp2+1Iq/44bY/Z30DETUSiHY7ZuqaOgD5bHVW++8vme9rdiWsN4yG4rRPXkdgzjvQ9TDHmZZKfY4/G11AA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-beta.47.tgz", + "integrity": "sha512-4PecgWCJhTA2EFOlptYJiNyVP2MrVP4cWdndpOu3WmXqWqZUmSubhb4YUAIxAxnXATlGjC1WjxNPhV7ZllNgdA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-beta.47.tgz", + "integrity": "sha512-CyIunZ6D9U9Xg94roQI1INt/bLkOpPsZjZZkiaAZ0r6uccQdICmC99M9RUPlMLw/qg4yEWLlQhG73W/mG437NA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-beta.47.tgz", + "integrity": "sha512-doozc/Goe7qRCSnzfJbFINTHsMktqmZQmweull6hsZZ9sjNWQ6BWQnbvOlfZJe4xE5NxM1NhPnY5Giqnl3ZrYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-beta.47.tgz", + "integrity": "sha512-fodvSMf6Aqwa0wEUSTPewmmZOD44rc5Tpr5p9NkwQ6W1SSpUKzD3SwpJIgANDOhwiYhDuiIaYPGB7Ujkx1q0UQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-beta.47.tgz", + "integrity": "sha512-Rxm5hYc0mGjwLh5sjlGmMygxAaV2gnsx7CNm2lsb47oyt5UQyPDZf3GP/ct8BEcwuikdqzsrrlIp8+kCSvMFNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-beta.47.tgz", + "integrity": "sha512-YakuVe+Gc87jjxazBL34hbr8RJpRuFBhun7NEqoChVDlH5FLhLXjAPHqZd990TVGVNkemourf817Z8u2fONS8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-beta.47.tgz", + "integrity": "sha512-ak2GvTFQz3UAOw8cuQq8pWE+TNygQB6O47rMhvevvTzETh7VkHRFtRUwJynX5hwzFvQMP6G0az5JrBGuwaMwYQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.0.7" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-beta.47.tgz", + "integrity": "sha512-o5BpmBnXU+Cj+9+ndMcdKjhZlPb79dVPBZnWwMnI4RlNSSq5yOvFZqvfPYbyacvnW03Na4n5XXQAPhu3RydZ0w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-ia32-msvc": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.0.0-beta.47.tgz", + "integrity": "sha512-FVOmfyYehNE92IfC9Kgs913UerDog2M1m+FADJypKz0gmRg3UyTt4o1cZMCAl7MiR89JpM9jegNO1nXuP1w1vw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-beta.47.tgz", + "integrity": "sha512-by/70F13IUE101Bat0oeH8miwWX5mhMFPk1yjCdxoTNHTyTdLgb0THNaebRM6AP7Kz+O3O2qx87sruYuF5UxHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.47.tgz", + "integrity": "sha512-8QagwMH3kNCuzD8EWL8R2YPW5e4OrHNSAHRFDdmFqEwEaD/KcNKjVoumo+gP2vW5eKB2UPbM6vTYiGZX0ixLnw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", + "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.5.tgz", + "integrity": "sha512-iDGS/h7D8t7tvZ1t6+WPK04KD0MwzLZrG0se1hzBjSi5fyxlsiggoJHwh18PCFNn7tG43OWb6pdZ6Y+rMlmyNQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.5.tgz", + "integrity": "sha512-wrSAViWvZHBMMlWk6EJhvg8/rjxzyEhEdgfMMjREHEq11EtJ6IP6yfcCH57YAEca2Oe3FNCE9DSTgU70EIGmVw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.5.tgz", + "integrity": "sha512-S87zZPBmRO6u1YXQLwpveZm4JfPpAa6oHBX7/ghSiGH3rz/KDgAu1rKdGutV+WUI6tKDMbaBJomhnT30Y2t4VQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.5.tgz", + "integrity": "sha512-YTbnsAaHo6VrAczISxgpTva8EkfQus0VPEVJCEaboHtZRIb6h6j0BNxRBOwnDciFTZLDPW5r+ZBmhL/+YpTZgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.5.tgz", + "integrity": "sha512-1T8eY2J8rKJWzaznV7zedfdhD1BqVs1iqILhmHDq/bqCUZsrMt+j8VCTHhP0vdfbHK3e1IQ7VYx3jlKqwlf+vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.5.tgz", + "integrity": "sha512-sHTiuXyBJApxRn+VFMaw1U+Qsz4kcNlxQ742snICYPrY+DDL8/ZbaC4DVIB7vgZmp3jiDaKA0WpBdP0aqPJoBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.5.tgz", + "integrity": "sha512-dV3T9MyAf0w8zPVLVBptVlzaXxka6xg1f16VAQmjg+4KMSTWDvhimI/Y6mp8oHwNrmnmVl9XxJ/w/mO4uIQONA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.5.tgz", + "integrity": "sha512-wIGYC1x/hyjP+KAu9+ewDI+fi5XSNiUi9Bvg6KGAh2TsNMA3tSEs+Sh6jJ/r4BV/bx/CyWu2ue9kDnIdRyafcQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.5.tgz", + "integrity": "sha512-Y+qVA0D9d0y2FRNiG9oM3Hut/DgODZbU9I8pLLPwAsU0tUKZ49cyV1tzmB/qRbSzGvY8lpgGkJuMyuhH7Ma+Vg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.5.tgz", + "integrity": "sha512-juaC4bEgJsyFVfqhtGLz8mbopaWD+WeSOYr5E16y+1of6KQjc0BpwZLuxkClqY1i8sco+MdyoXPNiCkQou09+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.5.tgz", + "integrity": "sha512-rIEC0hZ17A42iXtHX+EPJVL/CakHo+tT7W0pbzdAGuWOt2jxDFh7A/lRhsNHBcqL4T36+UiAgwO8pbmn3dE8wA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.5.tgz", + "integrity": "sha512-T7l409NhUE552RcAOcmJHj3xyZ2h7vMWzcwQI0hvn5tqHh3oSoclf9WgTl+0QqffWFG8MEVZZP1/OBglKZx52Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.5.tgz", + "integrity": "sha512-7OK5/GhxbnrMcxIFoYfhV/TkknarkYC1hqUw1wU2xUN3TVRLNT5FmBv4KkheSG2xZ6IEbRAhTooTV2+R5Tk0lQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.5.tgz", + "integrity": "sha512-GwuDBE/PsXaTa76lO5eLJTyr2k8QkPipAyOrs4V/KJufHCZBJ495VCGJol35grx9xryk4V+2zd3Ri+3v7NPh+w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.5.tgz", + "integrity": "sha512-IAE1Ziyr1qNfnmiQLHBURAD+eh/zH1pIeJjeShleII7Vj8kyEm2PF77o+lf3WTHDpNJcu4IXJxNO0Zluro8bOw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.5.tgz", + "integrity": "sha512-Pg6E+oP7GvZ4XwgRJBuSXZjcqpIW3yCBhK4BcsANvb47qMvAbCjR6E+1a/U2WXz1JJxp9/4Dno3/iSJLcm5auw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.5.tgz", + "integrity": "sha512-txGtluxDKTxaMDzUduGP0wdfng24y1rygUMnmlUJ88fzCCULCLn7oE5kb2+tRB+MWq1QDZT6ObT5RrR8HFRKqg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.5.tgz", + "integrity": "sha512-3DFiLPnTxiOQV993fMc+KO8zXHTcIjgaInrqlG8zDp1TlhYl6WgrOHuJkJQ6M8zHEcntSJsUp1XFZSY8C1DYbg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.5.tgz", + "integrity": "sha512-nggc/wPpNTgjGg75hu+Q/3i32R00Lq1B6N1DO7MCU340MRKL3WZJMjA9U4K4gzy3dkZPXm9E1Nc81FItBVGRlA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.5.tgz", + "integrity": "sha512-U/54pTbdQpPLBdEzCT6NBCFAfSZMvmjr0twhnD9f4EIvlm9wy3jjQ38yQj1AGznrNO65EWQMgm/QUjuIVrYF9w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.5.tgz", + "integrity": "sha512-2NqKgZSuLH9SXBBV2dWNRCZmocgSOx8OJSdpRaEcRlIfX8YrKxUT6z0F1NpvDVhOsl190UFTRh2F2WDWWCYp3A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.5.tgz", + "integrity": "sha512-JRpZUhCfhZ4keB5v0fe02gQJy05GqboPOaxvjugW04RLSYYoB/9t2lx2u/tMs/Na/1NXfY8QYjgRljRpN+MjTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/wasm-node": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.53.5.tgz", + "integrity": "sha512-WXEVEJrhhz6daplMeGBCpgLlv7+radmwvUZquNMUsLKrHDJxjzrnWTlsdueJDObkZ00cNmAF30LAD0tm+WytrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/@schematics/angular": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.0.3.tgz", + "integrity": "sha512-XYOI2WOz8B+ydJ8iUHRXrUyjTx+YGdCQ8b2FlXnU46ksIctVU+zt4Zgu6462xeaPwOFYw6+r+TvaBAZ14a82Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "21.0.3", + "@angular-devkit/schematics": "21.0.3", + "jsonc-parser": "3.3.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/bundle": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-4.0.0.tgz", + "integrity": "sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/core": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-3.0.0.tgz", + "integrity": "sha512-NgbJ+aW9gQl/25+GIEGYcCyi8M+ng2/5X04BMuIgoDfgvp18vDcoNHOQjQsG9418HGNYRxG3vfEXaR1ayD37gg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.5.0.tgz", + "integrity": "sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-4.0.1.tgz", + "integrity": "sha512-KFNGy01gx9Y3IBPG/CergxR9RZpN43N+lt3EozEfeoyqm8vEiLxwRl3ZO5sPx3Obv1ix/p7FWOlPc2Jgwfp9PA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0", + "make-fetch-happen": "^15.0.2", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-4.0.0.tgz", + "integrity": "sha512-0QFuWDHOQmz7t66gfpfNO6aEjoFrdhkJaej/AOqb4kqWZVbPWFZifXZzkxyQBB1OwTbkhdT3LNpMFxwkTvf+2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0", + "tuf-js": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-3.0.0.tgz", + "integrity": "sha512-moXtHH33AobOhTZF8xcX1MpOFqdvfCk7v6+teJL8zymBiDXwEsQH6XG9HGx2VIxnJZNm4cNSzflTLDnQLmIdmw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-4.0.0.tgz", + "integrity": "sha512-h5x5ga/hh82COe+GoD4+gKUeV4T3iaYOxqLt41GRKApinPI7DMidhCmNVTjKfhCWFJIGXaFJee07XczdT4jdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.0.tgz", + "integrity": "sha512-dOxxrhgyDIEUADhb/8OlV9JIqYLgos03YorAueTIeOUskLJSEsfwCByjbu98ctXitUN3znXKp0bYD/WHSudCeA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0" + } + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/abbrev": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", + "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/algoliasearch": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.40.1.tgz", + "integrity": "sha512-iUNxcXUNg9085TJx0HJLjqtDE0r1RZ0GOGrt8KNQqQT5ugu8lZsHuMUYW/e0lHhq6xBvmktU9Bw4CXP9VQeKrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.6.1", + "@algolia/client-abtesting": "5.40.1", + "@algolia/client-analytics": "5.40.1", + "@algolia/client-common": "5.40.1", + "@algolia/client-insights": "5.40.1", + "@algolia/client-personalization": "5.40.1", + "@algolia/client-query-suggestions": "5.40.1", + "@algolia/client-search": "5.40.1", + "@algolia/ingestion": "1.40.1", + "@algolia/monitoring": "1.40.1", + "@algolia/recommend": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", + "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.10", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.10.tgz", + "integrity": "sha512-2VIKvDx8Z1a9rTB2eCkdPE5nSe28XnA+qivGnWHoB40hMMt/h1hSz0960Zqsn6ZyxWXUie0EBdElKv8may20AA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/beasties": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.3.5.tgz", + "integrity": "sha512-NaWu+f4YrJxEttJSm16AzMIFtVldCvaJ68b1L098KpqXmxt9xOLtKoLkKxb8ekhOrLqEJAbvT6n6SEvB/sac7A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "css-select": "^6.0.0", + "css-what": "^7.0.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "htmlparser2": "^10.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.49", + "postcss-media-query-parser": "^0.2.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/body-parser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", + "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.3.tgz", + "integrity": "sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^5.0.0", + "fs-minipass": "^3.0.0", + "glob": "^13.0.0", + "lru-cache": "^11.1.0", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^13.0.0", + "unique-filename": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", + "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "path-scurry": "^2.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/cacache/node_modules/ssri": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.0.tgz", + "integrity": "sha512-yizwGBpbCn4YomB2lzhZqrHLJoqFGXihNbib3ozhqF/cIp5ue+xSmOQrjNasEE62hFxsCcg/V/z23t4n8jMEng==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001760", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz", + "integrity": "sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.3.0.tgz", + "integrity": "sha512-/+40ljC3ONVnYIttjMWrlL51nItDAbBrq2upN8BPyvGU/2n5Oxw3tbNwORCaNuNqLJnxGqOfjUuhsv7l5Q4IsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.1.1.tgz", + "integrity": "sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^7.1.0", + "string-width": "^8.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", + "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", + "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true, + "license": "ISC" + }, + "node_modules/content-disposition": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-6.0.0.tgz", + "integrity": "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^7.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "nth-check": "^2.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-7.0.0.tgz", + "integrity": "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dependency-graph": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz", + "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.26.0.tgz", + "integrity": "sha512-3Hq7jri+tRrVWha+ZeIVhl4qJRha/XjRNSopvTsOaCvfPHrflTYTcUFcEjMKdxofsXXsdc4zjg5NOTnL4Gl57Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.26.0", + "@esbuild/android-arm": "0.26.0", + "@esbuild/android-arm64": "0.26.0", + "@esbuild/android-x64": "0.26.0", + "@esbuild/darwin-arm64": "0.26.0", + "@esbuild/darwin-x64": "0.26.0", + "@esbuild/freebsd-arm64": "0.26.0", + "@esbuild/freebsd-x64": "0.26.0", + "@esbuild/linux-arm": "0.26.0", + "@esbuild/linux-arm64": "0.26.0", + "@esbuild/linux-ia32": "0.26.0", + "@esbuild/linux-loong64": "0.26.0", + "@esbuild/linux-mips64el": "0.26.0", + "@esbuild/linux-ppc64": "0.26.0", + "@esbuild/linux-riscv64": "0.26.0", + "@esbuild/linux-s390x": "0.26.0", + "@esbuild/linux-x64": "0.26.0", + "@esbuild/netbsd-arm64": "0.26.0", + "@esbuild/netbsd-x64": "0.26.0", + "@esbuild/openbsd-arm64": "0.26.0", + "@esbuild/openbsd-x64": "0.26.0", + "@esbuild/openharmony-arm64": "0.26.0", + "@esbuild/sunos-x64": "0.26.0", + "@esbuild/win32-arm64": "0.26.0", + "@esbuild/win32-ia32": "0.26.0", + "@esbuild/win32-x64": "0.26.0" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", + "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/find-cache-directory": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/find-cache-directory/-/find-cache-directory-6.0.0.tgz", + "integrity": "sha512-CvFd5ivA6HcSHbD+59P7CyzINHXzwhuQK8RY7CxJZtgDSAtRlHiCaQpZQ2lMR/WRyUIEmzUvL6G2AGurMfegZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^8.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up-simple": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", + "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", + "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^11.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/htmlparser2": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", + "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.1", + "entities": "^6.0.0" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz", + "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ignore-walk": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", + "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^10.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", + "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", + "dev": true, + "license": "MIT" + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", + "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/injection-js": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.6.1.tgz", + "integrity": "sha512-dbR5bdhi7TWDoCye9cByZqeg/gAfamm8Vu3G1KZOTYkOif8WkuM8CD0oeDPtZYMzT5YH76JAFB7bkmyY9OJi2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jose": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", + "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", + "integrity": "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/less": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/less/-/less-4.5.1.tgz", + "integrity": "sha512-UKgI3/KON4u6ngSsnDADsUERqhZknsVZbnuzlRZXLQCmfC/MDld42fTydUE9B+Mla1AL6SJ/Pp6SlEFi/AVGfw==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=14" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/listr2": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz", + "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^5.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/listr2/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lmdb": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.4.3.tgz", + "integrity": "sha512-GWV1kVi6uhrXWqe+3NXWO73OYe8fto6q8JMo0HOpk1vf8nEyFWgo4CSNJpIFzsOxOrysVUlcO48qRbQfmKd1gA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "msgpackr": "^1.11.2", + "node-addon-api": "^6.1.0", + "node-gyp-build-optional-packages": "5.2.2", + "ordered-binary": "^1.5.3", + "weak-lru-cache": "^1.2.2" + }, + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "3.4.3", + "@lmdb/lmdb-darwin-x64": "3.4.3", + "@lmdb/lmdb-linux-arm": "3.4.3", + "@lmdb/lmdb-linux-arm64": "3.4.3", + "@lmdb/lmdb-linux-x64": "3.4.3", + "@lmdb/lmdb-win32-arm64": "3.4.3", + "@lmdb/lmdb-win32-x64": "3.4.3" + } + }, + "node_modules/log-symbols": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", + "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/make-fetch-happen": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.3.tgz", + "integrity": "sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^6.0.0", + "promise-retry": "^2.0.1", + "ssri": "^13.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/make-fetch-happen/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.0.tgz", + "integrity": "sha512-yizwGBpbCn4YomB2lzhZqrHLJoqFGXihNbib3ozhqF/cIp5ue+xSmOQrjNasEE62hFxsCcg/V/z23t4n8jMEng==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-5.0.0.tgz", + "integrity": "sha512-fiCdUALipqgPWrOVTz9fw0XhcazULXOSU6ie40DDbX1F49p1dBrSRBuswndTx1x3vEb/g0FT7vC4c4C2u/mh3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^3.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/msgpackr": { + "version": "1.11.8", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.8.tgz", + "integrity": "sha512-bC4UGzHhVvgDNS7kn9tV8fAucIYUBuGojcaLiz7v+P63Lmtm0Xeji8B/8tYKddALXxJLpwIeBmUN3u64C4YkRA==", + "dev": true, + "license": "MIT", + "optional": true, + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", + "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.2.2" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" + } + }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ng-packagr": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-21.0.1.tgz", + "integrity": "sha512-IZGxuF226GF0d8FOZIfPvHsyBl53PrDEg/IB2+CVamsm3r4+gUw3mBp27eygpowBpdVLG0Sm2IbUiH4aSspzyA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@rollup/plugin-json": "^6.1.0", + "@rollup/wasm-node": "^4.24.0", + "ajv": "^8.17.1", + "ansi-colors": "^4.1.3", + "browserslist": "^4.26.0", + "chokidar": "^4.0.1", + "commander": "^14.0.0", + "dependency-graph": "^1.0.0", + "esbuild": "^0.27.0", + "find-cache-directory": "^6.0.0", + "injection-js": "^2.4.0", + "jsonc-parser": "^3.3.1", + "less": "^4.2.0", + "ora": "^9.0.0", + "piscina": "^5.0.0", + "postcss": "^8.4.47", + "rollup-plugin-dts": "^6.2.0", + "rxjs": "^7.8.1", + "sass": "^1.81.0", + "tinyglobby": "^0.2.12" + }, + "bin": { + "ng-packagr": "src/cli/main.js" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "optionalDependencies": { + "rollup": "^4.24.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^21.0.0-next || ^21.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "tslib": "^2.3.0", + "typescript": ">=5.9 <6.0" + }, + "peerDependenciesMeta": { + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/ng-packagr/node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-gyp": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.1.0.tgz", + "integrity": "sha512-W+RYA8jBnhSr2vrTtlPYPc1K+CSjGpVDRZxcqJcERZ8ND3A1ThWPHRwctTx3qC3oW99jt726jhdz3Y6ky87J4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^15.0.0", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.2", + "tinyglobby": "^0.2.12", + "which": "^6.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", + "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^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" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/node-gyp/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", + "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", + "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^4.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-bundled": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", + "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-install-checks": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-8.0.0.tgz", + "integrity": "sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-package-arg": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.1.tgz", + "integrity": "sha512-6zqls5xFvJbgFjB1B2U6yITtyGBjDBORB7suI4zA4T/sZ1OmkMFlaQSNB/4K0LtXNA1t4OprAFxPisadK5O2ag==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^9.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-packlist": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.3.tgz", + "integrity": "sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg==", + "dev": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-packlist/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz", + "integrity": "sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "npm-package-arg": "^13.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", + "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-19.1.1.tgz", + "integrity": "sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^4.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^15.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^13.0.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-9.0.0.tgz", + "integrity": "sha512-m0pg2zscbYgWbqRR6ABga5c3sZdEon7bSgjnlXC64kxtxLOyjRcbbUkLj7HFyy/FTD+P2xdBWu8snGhYI0jc4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.6.2", + "cli-cursor": "^5.0.0", + "cli-spinners": "^3.2.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.1.0", + "log-symbols": "^7.0.1", + "stdin-discarder": "^0.2.2", + "string-width": "^8.1.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/string-width": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", + "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ordered-binary": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.0.tgz", + "integrity": "sha512-IQh2aMfMIDbPjI/8a3Edr+PiOpcsB7yo8NdW7aHWVaoR/pcDldunMvnnwbk/auPGqmKeAdxtZl7MHX/QmPwhvQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pacote": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.3.tgz", + "integrity": "sha512-itdFlanxO0nmQv4ORsvA9K1wv40IPfB9OmWqfaJWvoJ30VKyHsqNgDVeG+TVhI7Gk7XW8slUy7cA9r6dF5qohw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^10.0.0", + "cacache": "^20.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^13.0.0", + "npm-packlist": "^10.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^4.0.0", + "ssri": "^12.0.0", + "tar": "^7.4.3" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", + "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-8.0.0.tgz", + "integrity": "sha512-wzh11mj8KKkno1pZEu+l2EVeWsuKDfR5KNWZOTsslfUX8lPDZx77m9T0kIoAVkFtD1nx6YF8oh4BnPHvxMtNMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0", + "parse5": "^8.0.0", + "parse5-sax-parser": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-8.0.0.tgz", + "integrity": "sha512-/dQ8UzHZwnrzs3EvDj6IkKrD/jIZyTlB+8XrHJvcjNgRdmWruNdN9i9RK/JtxakmlUdPwKubKPTCqvbTgzGhrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.1.3.tgz", + "integrity": "sha512-0u3N7H4+hbr40KjuVn2uNhOcthu/9usKhnw5vT3J7ply79v3D3M8naI00el9Klcy16x557VsEkkUQaHCWFXC/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.x" + }, + "optionalDependencies": { + "@napi-rs/nice": "^1.0.4" + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/pkg-dir": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-8.0.0.tgz", + "integrity": "sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up-simple": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true, + "license": "MIT" + }, + "node_modules/proc-log": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rolldown": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-beta.47.tgz", + "integrity": "sha512-Mid74GckX1OeFAOYz9KuXeWYhq3xkXbMziYIC+ULVdUzPTG9y70OBSBQDQn9hQP8u/AfhuYw1R0BSg15nBI4Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.96.0", + "@rolldown/pluginutils": "1.0.0-beta.47" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-beta.47", + "@rolldown/binding-darwin-arm64": "1.0.0-beta.47", + "@rolldown/binding-darwin-x64": "1.0.0-beta.47", + "@rolldown/binding-freebsd-x64": "1.0.0-beta.47", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.47", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.47", + "@rolldown/binding-linux-arm64-musl": "1.0.0-beta.47", + "@rolldown/binding-linux-x64-gnu": "1.0.0-beta.47", + "@rolldown/binding-linux-x64-musl": "1.0.0-beta.47", + "@rolldown/binding-openharmony-arm64": "1.0.0-beta.47", + "@rolldown/binding-wasm32-wasi": "1.0.0-beta.47", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.47", + "@rolldown/binding-win32-ia32-msvc": "1.0.0-beta.47", + "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.47" + } + }, + "node_modules/rollup": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.5.tgz", + "integrity": "sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.53.5", + "@rollup/rollup-android-arm64": "4.53.5", + "@rollup/rollup-darwin-arm64": "4.53.5", + "@rollup/rollup-darwin-x64": "4.53.5", + "@rollup/rollup-freebsd-arm64": "4.53.5", + "@rollup/rollup-freebsd-x64": "4.53.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.53.5", + "@rollup/rollup-linux-arm-musleabihf": "4.53.5", + "@rollup/rollup-linux-arm64-gnu": "4.53.5", + "@rollup/rollup-linux-arm64-musl": "4.53.5", + "@rollup/rollup-linux-loong64-gnu": "4.53.5", + "@rollup/rollup-linux-ppc64-gnu": "4.53.5", + "@rollup/rollup-linux-riscv64-gnu": "4.53.5", + "@rollup/rollup-linux-riscv64-musl": "4.53.5", + "@rollup/rollup-linux-s390x-gnu": "4.53.5", + "@rollup/rollup-linux-x64-gnu": "4.53.5", + "@rollup/rollup-linux-x64-musl": "4.53.5", + "@rollup/rollup-openharmony-arm64": "4.53.5", + "@rollup/rollup-win32-arm64-msvc": "4.53.5", + "@rollup/rollup-win32-ia32-msvc": "4.53.5", + "@rollup/rollup-win32-x64-gnu": "4.53.5", + "@rollup/rollup-win32-x64-msvc": "4.53.5", + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-dts": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-6.3.0.tgz", + "integrity": "sha512-d0UrqxYd8KyZ6i3M2Nx7WOMy708qsV/7fTHMHxCMCBOAe3V/U7OMPu5GkX8hC+cmkHhzGnfeYongl1IgiooddA==", + "dev": true, + "license": "LGPL-3.0-only", + "dependencies": { + "magic-string": "^0.30.21" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/Swatinem" + }, + "optionalDependencies": { + "@babel/code-frame": "^7.27.1" + }, + "peerDependencies": { + "rollup": "^3.29.4 || ^4", + "typescript": "^4.5 || ^5.0" + } + }, + "node_modules/rollup-plugin-dts/node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.93.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.2.tgz", + "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sax": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", + "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "optional": true + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sigstore": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-4.0.0.tgz", + "integrity": "sha512-Gw/FgHtrLM9WP8P5lLcSGh9OQcrTruWCELAiS48ik1QbL0cH+dfjomiRTUE9zzz+D1N6rOLkwXUvVmXZAsNE0Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0", + "@sigstore/sign": "^4.0.0", + "@sigstore/tuf": "^4.0.0", + "@sigstore/verify": "^3.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/ssri": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", + "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tar": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", + "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "peer": true + }, + "node_modules/tuf-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-4.0.0.tgz", + "integrity": "sha512-Lq7ieeGvXDXwpoSmOSgLWVdsGGV9J4a77oDTAPe/Ltrqnnm/ETaRlBAQTH5JatEh8KXuE6sddf9qAv1Q2282Hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "4.0.0", + "debug": "^4.4.1", + "make-fetch-happen": "^15.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz", + "integrity": "sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/unique-filename": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-5.0.0.tgz", + "integrity": "sha512-2RaJTAvAb4owyjllTfXzFClJ7WsGxlykkPvCr9pA//LD9goVq+m4PPAeBgNodGZ7nSrntT/auWpJ6Y5IFXcfjg==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/unique-slug": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-6.0.0.tgz", + "integrity": "sha512-4Lup7Ezn8W3d52/xBhZBVdx323ckxa7DEvd9kPQHppTkLoJXw6ltrBCyj5pnrxj0qKDxYMJ56CoxNuFCscdTiw==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz", + "integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.2.tgz", + "integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "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" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^7.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz", + "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.0", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.0.tgz", + "integrity": "sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "zod": "^3.25 || ^4" + } + } + } +} diff --git a/renderers/nativescript/package.json b/renderers/nativescript/package.json new file mode 100644 index 00000000..2acc6a98 --- /dev/null +++ b/renderers/nativescript/package.json @@ -0,0 +1,28 @@ +{ + "name": "@a2ui/nativescript", + "version": "0.0.1", + "scripts": { + "build": "ng build" + }, + "dependencies": { + "@a2ui/lit": "file:../lit", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^21.0.0", + "@angular/core": "^21.0.0", + "@nativescript/angular": "21.0.0-rc.2", + "@nativescript/core": "^9.0.0" + }, + "devDependencies": { + "@angular/build": "^21.0.0", + "@angular/cli": "^21.0.0", + "@angular/compiler": "^21.0.0", + "@angular/compiler-cli": "^21.0.0", + "@angular/core": "^21.0.0", + "@nativescript/angular": "21.0.0-rc.2", + "@nativescript/core": "^9.0.0", + "ng-packagr": "^21.0.0", + "typescript": "~5.9.2" + } +} diff --git a/renderers/nativescript/src/lib/data/index.ts b/renderers/nativescript/src/lib/data/index.ts new file mode 100644 index 00000000..d7e04ee8 --- /dev/null +++ b/renderers/nativescript/src/lib/data/index.ts @@ -0,0 +1 @@ +export * from './processor'; diff --git a/renderers/nativescript/src/lib/data/processor.ts b/renderers/nativescript/src/lib/data/processor.ts new file mode 100644 index 00000000..e95bda27 --- /dev/null +++ b/renderers/nativescript/src/lib/data/processor.ts @@ -0,0 +1,47 @@ +/* + * 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 { Data, Types } from '@a2ui/lit/0.8'; +import { Injectable } from '@angular/core'; +import { firstValueFrom, Subject } from 'rxjs'; + +export interface DispatchedEvent { + message: Types.A2UIClientEventMessage; + completion: Subject; +} + +@Injectable({ providedIn: 'root' }) +export class MessageProcessor extends Data.A2uiMessageProcessor { + readonly events = new Subject(); + + override setData( + node: Types.AnyComponentNode, + relativePath: string, + value: Types.DataValue, + surfaceId?: Types.SurfaceID | null, + ) { + // Override setData to convert from optional inputs (which can be null) + // to undefined so that this correctly falls back to the default value for + // surfaceId. + return super.setData(node, relativePath, value, surfaceId ?? undefined); + } + + dispatch(message: Types.A2UIClientEventMessage): Promise { + const completion = new Subject(); + this.events.next({ message, completion }); + return firstValueFrom(completion); + } +} diff --git a/renderers/nativescript/src/lib/rendering/catalog.ts b/renderers/nativescript/src/lib/rendering/catalog.ts new file mode 100644 index 00000000..37adde19 --- /dev/null +++ b/renderers/nativescript/src/lib/rendering/catalog.ts @@ -0,0 +1,36 @@ +/* + * 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 { Binding, InjectionToken, Type } from '@angular/core'; +import { DynamicComponent } from './dynamic-component'; +import { Types } from '@a2ui/lit/0.8'; + +export type CatalogLoader = () => + | Promise>> + | Type>; + +export type CatalogEntry = + | CatalogLoader + | { + type: CatalogLoader; + bindings: (data: T) => Binding[]; + }; + +export interface Catalog { + [key: string]: CatalogEntry; +} + +export const Catalog = new InjectionToken('Catalog'); diff --git a/renderers/nativescript/src/lib/rendering/dynamic-component.ts b/renderers/nativescript/src/lib/rendering/dynamic-component.ts new file mode 100644 index 00000000..af8a3ab2 --- /dev/null +++ b/renderers/nativescript/src/lib/rendering/dynamic-component.ts @@ -0,0 +1,59 @@ +/* + * 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 { Types } from '@a2ui/lit/0.8'; +import { Directive, inject, input } from '@angular/core'; +import { MessageProcessor } from '../data'; +import { Theme } from './theming'; + +@Directive() +export abstract class DynamicComponent { + protected readonly processor = inject(MessageProcessor); + protected readonly theme = inject(Theme); + + readonly surfaceId = input.required(); + readonly component = input.required(); + readonly weight = input.required(); + + protected sendAction(action: Types.Action): Promise { + const component = this.component(); + const surfaceId = this.surfaceId() ?? undefined; + const context: Record = {}; + + if (action.context) { + for (const item of action.context) { + 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 value = this.processor.getData(component, item.value.path, surfaceId); + if (value !== undefined) { + context[item.key] = value; + } + } + } + } + + return this.processor.dispatch({ + action: action.action, + context, + surfaceId, + }); + } +} diff --git a/renderers/nativescript/src/lib/rendering/index.ts b/renderers/nativescript/src/lib/rendering/index.ts new file mode 100644 index 00000000..591597f7 --- /dev/null +++ b/renderers/nativescript/src/lib/rendering/index.ts @@ -0,0 +1,20 @@ +/* + * 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 * from './catalog'; +export * from './dynamic-component'; +export * from './renderer'; +export * from './theming'; diff --git a/renderers/nativescript/src/lib/rendering/renderer.ts b/renderers/nativescript/src/lib/rendering/renderer.ts new file mode 100644 index 00000000..eb4fe1d8 --- /dev/null +++ b/renderers/nativescript/src/lib/rendering/renderer.ts @@ -0,0 +1,98 @@ +/* + * 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 { + Binding, + ComponentRef, + Directive, + effect, + inject, + input, + inputBinding, + OnDestroy, + Type, + untracked, + ViewContainerRef, +} from '@angular/core'; +import { Types } from '@a2ui/lit/0.8'; +import { Catalog } from './catalog'; + +@Directive({ + selector: 'ng-container[a2ui-renderer]', +}) +export class Renderer implements OnDestroy { + private viewContainerRef = inject(ViewContainerRef); + private catalog = inject(Catalog); + + private currentRef: ComponentRef | null = null; + private isDestroyed = false; + + readonly surfaceId = input.required(); + readonly component = input.required(); + + constructor() { + effect(() => { + const surfaceId = this.surfaceId(); + const component = this.component(); + untracked(() => this.render(surfaceId, component)); + }); + } + + ngOnDestroy(): void { + this.isDestroyed = true; + this.clear(); + } + + private async render(surfaceId: Types.SurfaceID, component: Types.AnyComponentNode) { + const config = this.catalog[component.type]; + let newComponent: Type | null = null; + let componentBindings: Binding[] | null = null; + + if (typeof config === 'function') { + newComponent = await config(); + } else if (typeof config === 'object') { + newComponent = await config.type(); + componentBindings = config.bindings(component as any); + } + + this.clear(); + + if (newComponent && !this.isDestroyed) { + const bindings = [ + inputBinding('surfaceId', () => surfaceId), + inputBinding('component', () => component), + inputBinding('weight', () => component.weight ?? 'initial'), + ]; + + if (componentBindings) { + bindings.push(...componentBindings); + } + + this.currentRef = this.viewContainerRef.createComponent(newComponent, { + bindings, + injector: this.viewContainerRef.injector, + }); + } + } + + private clear() { + if (this.currentRef) { + this.currentRef.destroy(); + this.currentRef = null; + } + this.viewContainerRef.clear(); + } +} diff --git a/renderers/nativescript/src/lib/rendering/theming.ts b/renderers/nativescript/src/lib/rendering/theming.ts new file mode 100644 index 00000000..16dd9cb1 --- /dev/null +++ b/renderers/nativescript/src/lib/rendering/theming.ts @@ -0,0 +1,22 @@ +/* + * 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 { Types } from '@a2ui/lit/0.8'; +import { InjectionToken } from '@angular/core'; + +export const Theme = new InjectionToken('Theme'); + +export type Theme = Types.Theme; diff --git a/renderers/nativescript/src/public-api.ts b/renderers/nativescript/src/public-api.ts new file mode 100644 index 00000000..600bc7f3 --- /dev/null +++ b/renderers/nativescript/src/public-api.ts @@ -0,0 +1,5 @@ +/* + * Public API Surface of @a2ui/nativescript + */ + +export * from './lib/rendering'; diff --git a/renderers/nativescript/tsconfig.json b/renderers/nativescript/tsconfig.json new file mode 100644 index 00000000..17be558b --- /dev/null +++ b/renderers/nativescript/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "files": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/renderers/nativescript/tsconfig.lib.json b/renderers/nativescript/tsconfig.lib.json new file mode 100644 index 00000000..6e46d4ac --- /dev/null +++ b/renderers/nativescript/tsconfig.lib.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/lib", + "target": "es2022", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2022"] + }, + "angularCompilerOptions": { + "skipTemplateCodegen": true, + "strictMetadataEmit": true, + "enableResourceInlining": true + }, + "exclude": ["src/test.ts", "**/*.spec.ts"] +} diff --git a/samples/client/lit/package-lock.json b/samples/client/lit/package-lock.json index 677cc607..24979185 100644 --- a/samples/client/lit/package-lock.json +++ b/samples/client/lit/package-lock.json @@ -1060,6 +1060,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.4.tgz", "integrity": "sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==", "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -2045,6 +2046,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, diff --git a/samples/client/nativescript/.editorconfig b/samples/client/nativescript/.editorconfig new file mode 100644 index 00000000..84ba4fa6 --- /dev/null +++ b/samples/client/nativescript/.editorconfig @@ -0,0 +1,19 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +charset = utf-8 + +[*.json] +indent_style = space +indent_size = 2 + +[*.js] +indent_style = space +indent_size = 2 + +[*.ts] +indent_style = space +indent_size = 2 \ No newline at end of file diff --git a/samples/client/nativescript/.gitignore b/samples/client/nativescript/.gitignore new file mode 100644 index 00000000..1cb1231c --- /dev/null +++ b/samples/client/nativescript/.gitignore @@ -0,0 +1,28 @@ +# NativeScript +hooks/ +node_modules/ +platforms/ + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# General +.DS_Store +.AppleDouble +.LSOverride +.idea +.cloud +.project +tmp/ +typings/ + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json diff --git a/samples/client/nativescript/App_Resources/Android/app.gradle b/samples/client/nativescript/App_Resources/Android/app.gradle new file mode 100644 index 00000000..9f60d1a5 --- /dev/null +++ b/samples/client/nativescript/App_Resources/Android/app.gradle @@ -0,0 +1,25 @@ +// You can add your native dependencies here +dependencies { +// implementation 'androidx.multidex:multidex:2.0.1' +} + +android { + compileSdkVersion 35 + buildToolsVersion "35" + // ndkVersion "" + + defaultConfig { + minSdkVersion 24 + targetSdkVersion 35 + + // Version Information + versionCode 1 + versionName "1.0.0" + + generatedDensities = [] + } + + aaptOptions { + additionalParameters "--no-version-vectors" + } +} diff --git a/samples/client/nativescript/App_Resources/Android/before-plugins.gradle b/samples/client/nativescript/App_Resources/Android/before-plugins.gradle new file mode 100644 index 00000000..9faffb81 --- /dev/null +++ b/samples/client/nativescript/App_Resources/Android/before-plugins.gradle @@ -0,0 +1,15 @@ +// this configurations is loaded before building plugins, as well as before building +// the app - this is where you can apply global settings and overrides + +project.ext { + // androidXAppCompat = "1.4.1" + // androidXExifInterface = "1.3.3" + // androidXFragment = "1.4.1" + // androidXMaterial = "1.5.0" + // androidXMultidex = "2.0.1" + // androidXTransition = "1.4.1" + // androidXViewPager = "1.0.0" + + // useKotlin = true + // kotlinVersion = "1.6.0" +} diff --git a/samples/client/nativescript/App_Resources/Android/src/main/AndroidManifest.xml b/samples/client/nativescript/App_Resources/Android/src/main/AndroidManifest.xml new file mode 100644 index 00000000..66017732 --- /dev/null +++ b/samples/client/nativescript/App_Resources/Android/src/main/AndroidManifest.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-hdpi/background.png b/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-hdpi/background.png new file mode 100644 index 0000000000000000000000000000000000000000..bbefbf42a4b53283de502b924cf2ed3c9ff03aec GIT binary patch literal 3661 zcmeAS@N?(olHy`uVBq!ia0y~yV3J{AV6Na`0*bKrExXLXz-X80>>Lp0ZfI$2P@c=c zpfNEyA>q>r&vUwINeKxj&T4CN6_p2dbo2xz>_2(n*nz_bjvqLwFndN!%me8+VoV{2 z9z1{l{8R(uzS!ghmW$I%9n%s|J!Xy3TzT}Q!!Le;a1ln`^n?T*#!ar56yNX(SaTkl z$DAbI%3{fUQ@SB%UkS%=hK{)`iSY~@PkVDUq#4*Ttn}B@VA{B!;U?e7PD=-~$($ZC zS^69WZ9Ao-q@<@jKO}SXq`+AF-VGW0- zAGF-RV3UTi?P8b2rA-qX8<#poq-9kW)WxN3YAUV^bgT3ItnpqvFBk;M!Q!8{<$=zH~-00RThR!tU_%@`!w30gOb*9F7*5RKVvr1GR7lohNbzB9=vm1y z!BCXJXjF1E5JpqNXm%Ja6GjWh(b{3OiX3exj5d}=8-=4SW7>2N&aht&;`p4bYqbs7 Pt6}hT^>bP0l+XkK#s4G) literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-hdpi/logo.png b/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-hdpi/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e788deb314f1c7493977876f02dd0f261830b30c GIT binary patch literal 5165 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%0D4l9w_KO(atKw51I&5^GF zhQghmi^zAP!#X)4yH84PsHE2ea(@Wa`E)=o(<~rqB}q#H<+4_0H7GcL&u8dzV5H2!DY;mOb!yh{lay^mhjnd6{auotij@0GL_S1ahgHPpG6XmT*k01; zJU@{dPLed!%r1`!nAt`0kx8(}?m^Oaz%4Y9GN#p-*)8(8y7UTRO9Q0kZ}7G8)uqjW z4+DqMfv~EAT#wt5(t3@-V}EdyR$%%YMi8#YO)!G4A9GfU!{(vog#ZUBKZ_0Rv)lp@nAME zThc`Q#j`u^uE#A3?*h^CFDsQZV zoEJIX3e>@L$9XA+V&C(FeQC7W4y&1R9|CSvhT-1KmbRhYwqj=Y6CN3kz&EIE2uTxg z_k&Ci?Sz@YqDJfPAiu`LhtiA#ko#rTt$Gsf=<@D`q7?CE>V=uTYi8G***JXU6?+&D zs`-CR|GGtp0ZQKYi21OE?vIA)bPnfT@KmhFcevel^L=0+JeI03lC}n7SzMRmj+4`I z2hEvgwm`lB&}YZSR$^vv%3T@KM&)t1zf@>CxR|irB^Hx+HF3YMEEe?qN1o8|$bigU zW;P?M5;J>7(iylqA=b72x0_XbOXfxp&>N~7mC9O$#I(W00y%jhf>#(}b?6%0cMtPTT z@b4IWN}fk7pZkgo4rcb2q_^-en_4!IG(2)mk+eGD&h+knwhzD#WOrDxmv?&VUx>19 z`U{m4oI21jv!`f2Ml!TFHtJWjhT!(NJp=N=(UO@h!e0Ps zc2T}>-*9Dwvm}`yUI?7pOF3>k2{CW-^fLVPfJ_%~LQdU33w&ZDma;fW@u2??5MLO1 zv_Knm_h(rh)-c?jmAP^=0J#`9m=|Su;MmI17AxYOjfziC!FMPG4bakv~aamGBRI5nbV5(@Rh^R((iyI z>0pimg2Vj`Lczm3DIAuwH}KPf^~aXF$H>D$c9is~CC| zH@*c}Ew>W3Wvva|FX?be8%kOwSz){#2<273%goxjy4Wl~k?&Qxhdj(~e_#smrHK4* zl96*S5?78;_KcN)3nYz|N5rhtY(A{0(OmVO?s@#8(O*ZNd#WgH@pR8A|M?u9(xEwL zMdX%9nl8_^bh@P5bLtIxx+iTkl1J)esWJ_Fx~Iwwk&kTh*u8<@^4N^>OC-&f^q}JL zYf>P_Qa)O`v;iF(CHPFpUj%uib62JLRG{9Fr+a9W64I#^p6;P&f-DwG+AKq-8ycwN z=w?S)(T1DgOOircP=(0!gzqny*$rfP0tdK?uqX2{+%feW+-tbUDRUlhe?hgPp%gVV zliH?^#4+-hIb!pON9osc3GvN6hv8F`9f&U=JxE{*nT&=fQ2cic@tbX_nBmu$H<+eIb&LgeVh{3)U&(7!~I|&uB1;W9xy9O zPb!I!mvmL&d~`~flo>ARYVSQoqCQ+zdY)!+luB;2|x;@R8bs_)g7AW|r$*8M&`8vs||U`9fF7 zyz)je+OL(Jf{#MeY+`25B{IYC%}PFwFLFGGCu4l9nQNTXwO#s=lN3=A3* zlM@m?o$x%To0gQ2aN?}CCRb5;P)A2kP{RI`2aX*$eBk(jlM1tE#Kb(1ej~;da_GVH z_s>r?Fz$;@PGGq>z0@%+@zi717|oSOPdfbK7YG+&)J;!F&|%!mg>L(-_=Xn>3+ hhS7{bzmnl3_w8oZYK8hZ5nzeN;OXk;vd$@?2>{eFH1Plc literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-ldpi/logo.png b/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-ldpi/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e4cac1adb9d183933b367930c6a241c211bd9874 GIT binary patch literal 2511 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 R39K?1JYD@<);T3K0RUrsV7dSR literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-mdpi/logo.png b/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-mdpi/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ce3c3a4b4fe24e68242245b6ad1beabb16f31410 GIT binary patch literal 3432 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 KMNUMnLSTZ1B6j%z literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml b/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml new file mode 100644 index 00000000..ada77f92 --- /dev/null +++ b/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-xhdpi/background.png b/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-xhdpi/background.png new file mode 100644 index 0000000000000000000000000000000000000000..3541570c1cee0feb7ae07c98e84563d237c4582e GIT binary patch literal 5473 zcmeAS@N?(olHy`uVBq!ia0y~yV7kD-z_NgY2`CbG{DlDn1EXE0vvWY0yP>7AL3u6% zgT}<u>a(NV+Rf&IDX)y!t5C_F%P8Qh%tp6 zdhq=H^HU9s`(l$5ST0U4bxcb<^_VqAbLG*K4!`&X!bKQ$(-RVO7&p0IQhdWFV9j}G z9&?g-D~l!bP3eZ5eI*>f89L^&B*rsrJnhZZkY-@Vu+m>ogK6V_hMRmRJ1rf|CUbho zWa)DhwC$9Rl9HbC{E*DilLE&coJ%;7a5CXc!hwKu6HYtWGH}IntX|jAcyJ}di*249 z8#nCb;n7xOn0vidAUKBY$^Ybp8>i>TM1`=KwoN=aqp?vyKJnOdy#g7-uCLRVgf$$R ze$aCNf=wF6wu@a7mo`moY+ULTk(O0iP#2fBsj0Xw(6KHs$uq4^?$BLDhrdb=R!dcc zWn@ldvM@ZJ6Vmv5rspkSfN~aiL>4nJpY(Kb45^s&_L?K_0R@Hw z4hOV93A8t_%u6{1-oD!M6| literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png b/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..88267df0231a5e016a67e4cd783f5a64cc5b1570 GIT binary patch literal 6904 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 literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png b/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png new file mode 100644 index 0000000000000000000000000000000000000000..abb0fc704741cbf206833a86b43ce14b5ff991a1 GIT binary patch literal 9949 zcmeAS@N?(olHy`uVBq!ia0y~yV6k9eVEe$q1Qg*6E7M?LV6@A0b`A)0H?%Z1D9>eJ z(3qHuY}__L&sc}#CV2{r@grv(hTevR{HB{Fm2q=aFg$3r=^40WKIv6 zEPalGww=;ZQqohNACftGQsCHwa|tIBP9~g5I1q4d!f6Lv2CjIH)$2MM53Xc*vCWfX zOwuvWaG&TyzCmwsQS0H29^>zA^u!cj^ z4_fYDut~$%cCkz1(x!=xjZ2*((y}TG>f+KiH5JzdI@Sdyd8XCL9lERN@K?#fYN?8_ zjLeBl7KX=jLK=V1^t=TM&;pOhVg`m~5+KZ2S9-FSfkA=6)5S5QV$PfEhKvUk7!GVO zTz|q@hVO@=L%)mT{l1;w*cliCKJDiNYTqF#3RHi51(0d!#>&8O!cdEW!J#jZk%6J8 z2N;DDl0z668e|p&=)78&qol`;+0Mgm%5&!@I literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png b/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..55800c9ab9ea2cad920ce68dccb14fe60418232b GIT binary patch literal 10319 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 S`Af#N0iXtE`n9^S$Nvw3wEU(3 literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png b/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png new file mode 100644 index 0000000000000000000000000000000000000000..108977520c8929349df397242f1ef0d7b8c80374 GIT binary patch literal 15701 zcmeHNUr1A76hE6&x1npG6u4_?h)qn>R?#YD(}`XLojR;!2yVPLQx22oTGjdYff= zBiURqxxni-w<(Wjii+9^*(;iOU@_x%oR#)zrTTCej`v&=8mrJ?JvKTA2 zGo@F*4ox&WLqkDrV0=ccDZ6K|_}qgom#^Z4t@D!IaoRTH?s7Ef9Sv=)&9O7Io~!%5 zTX)2lm%%XM4hd|Gm|Tfl>{|+`%wBV{3t+ulI7APx%zFTGfHmk%7f0f&`gAS_IIi?j zxROyQgPsGkO)q+u%!wrWq&m@>N>A`^|6y94$2`Ktum%^10qz6*7O)>+PefioIz&l; zvIwOi%44($=#0=Ap)*2fgw6<^5jrDuM(B*t8KE=!3uhFawx;IMJp=9^fpgX48VQ{T zNrV~1^qybZx-2N7i?~cdE2+2B3YXo2-dN3GXywMDwBjR(7;YH+Ucia%f_6jfmJ|de z3xODa;XY}NH@2hWV<3p6lN&QaP)(dFC6^g+!M#Xlo&C+ryyW@PeH)+ c{{K$zMZQm&p4$6&ztDFLY*n3Ms)D$G0x>!>?f?J) literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png b/samples/client/nativescript/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0703f90f437fb831ea98b3ee99c783e1934992e2 GIT binary patch literal 13941 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 literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/Android/src/main/res/drawable/ic_launcher_foreground.xml b/samples/client/nativescript/App_Resources/Android/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 00000000..fd826a31 --- /dev/null +++ b/samples/client/nativescript/App_Resources/Android/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/samples/client/nativescript/App_Resources/Android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/samples/client/nativescript/App_Resources/Android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 00000000..7353dbd1 --- /dev/null +++ b/samples/client/nativescript/App_Resources/Android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/samples/client/nativescript/App_Resources/Android/src/main/res/mipmap-hdpi/ic_launcher.png b/samples/client/nativescript/App_Resources/Android/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..69948d224f4d018068dfed3c884394cc3d178524 GIT binary patch literal 3092 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 Q{bLAFSJqbgq5up2AGbo6Bme*a literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/Android/src/main/res/values-v21/colors.xml b/samples/client/nativescript/App_Resources/Android/src/main/res/values-v21/colors.xml new file mode 100644 index 00000000..da5ca2fe --- /dev/null +++ b/samples/client/nativescript/App_Resources/Android/src/main/res/values-v21/colors.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/samples/client/nativescript/App_Resources/Android/src/main/res/values-v21/styles.xml b/samples/client/nativescript/App_Resources/Android/src/main/res/values-v21/styles.xml new file mode 100644 index 00000000..04d8a065 --- /dev/null +++ b/samples/client/nativescript/App_Resources/Android/src/main/res/values-v21/styles.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + diff --git a/samples/client/nativescript/App_Resources/Android/src/main/res/values-v29/styles.xml b/samples/client/nativescript/App_Resources/Android/src/main/res/values-v29/styles.xml new file mode 100644 index 00000000..9a2a79d5 --- /dev/null +++ b/samples/client/nativescript/App_Resources/Android/src/main/res/values-v29/styles.xml @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/samples/client/nativescript/App_Resources/Android/src/main/res/values/colors.xml b/samples/client/nativescript/App_Resources/Android/src/main/res/values/colors.xml new file mode 100644 index 00000000..78c4a519 --- /dev/null +++ b/samples/client/nativescript/App_Resources/Android/src/main/res/values/colors.xml @@ -0,0 +1,14 @@ + + + + #F5F5F5 + + + #757575 + + + #65ADF1 + + + + diff --git a/samples/client/nativescript/App_Resources/Android/src/main/res/values/ic_launcher_background.xml b/samples/client/nativescript/App_Resources/Android/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 00000000..c5d5899f --- /dev/null +++ b/samples/client/nativescript/App_Resources/Android/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #FFFFFF + \ No newline at end of file diff --git a/samples/client/nativescript/App_Resources/Android/src/main/res/values/styles.xml b/samples/client/nativescript/App_Resources/Android/src/main/res/values/styles.xml new file mode 100644 index 00000000..4f91b610 --- /dev/null +++ b/samples/client/nativescript/App_Resources/Android/src/main/res/values/styles.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + diff --git a/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..1a8b0e64 --- /dev/null +++ b/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "icon-20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "icon-20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-29.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "icon-40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "icon-40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "icon-60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "icon-60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "icon-20.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "icon-20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "icon-29.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "icon-29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "icon-40.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "icon-40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "icon-76.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "icon-76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "icon-83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "icon-1024.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png b/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..b46c8bb2f70abf9fa2d5f91cb6987dfda64ba1fe GIT binary patch literal 17868 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 SSurqkh|+ZxxolZu-~R*5H2Tf} literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20.png b/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20.png new file mode 100644 index 0000000000000000000000000000000000000000..d73288a7f480c3fcee88b28d2de9f88fb4564ff1 GIT binary patch literal 745 zcmV8 zGcb2;001bFV_;zN$VtvEW@2Dq$jvJ$3UYT+h=`0*V86-0#=yhC$H2)To0wc&;2Z1~ z0#w4_=kMprfC0W;V_*c)mvupAVanqLTq&u=$w2xK5LXldEoWe0ECI4b(jn{)5IYIN zo&#bRg#jkxf@y<8U!rK>Z>>I;A8N9304L1OVfl zRDt`MN!kDa010qNS#tmYH(dY#H(dc4fJR*a00B`+L_t(Ijm?w2P69y?$N#%`;qJhL z5I+)4G%B^#MH}rbtat)m!PbZI0qE>#jTMa=s7z=iBpNh^BjmVGyt`cs0dFry3{*_D zJM;g|?9A>G&N)^!x-z*|u>Z|F{m``Iq|@?Pryp7#ONr&=X6Ufnd)o=vhDxum^rALR z-TjL09$iXsQ!SP9fAxgQ11oj{2EYkez3E0`CC2eN5>B+R=l5aMXnBjG8E`zia+w0a zb9eIeI>{8I;UMI#-c)*dqUjn1&}e&aW;EBddy^pK88GJ{v$d|$+Ic~uh#BflckHvI zECbeZ#5hvs+k-8+YUBaf0eg7yf1Sp$qUA^i3_udccUDnOD++-5*d-ze{&`_lBfq~X zFNzBAZdsyYZkeKXQP5Qips3NEl9Y^+)R(k8_A!e0%2M(rnRYxFv%_sU*>DEDl&#N~ bT*`g`2AY0HSk3hD00000NkvXXu0mjf%;QJU literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png b/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c8d24cdc75a820965d03d4550d5fa343e051a378 GIT binary patch literal 995 zcmV<9104K`P)8 zGcb2;001bFV_;zN$VtvEW@2Dq$jvJ$3UYT+h=`0*V86-0#=yhC$H2)To0wc&;2Z1~ z0#w4_=kMprfC0W;V_*c)mvupAVanqLTq&u=$w2xK5LXldEoWe0ECI4b(jn{)5IYIN zo&#bRg#jkxf@y<8U!rK>Z>>I;A8N9304L1OVfl zRDt`MN!kDa010qNS#tmYZn^*fZn^>1-mw<|00K)%L_t(oh3%F-Z__{+#~+{H>NrV( z24x5&qV7NkRMgNgv~*?(3mX~wDflRCY!&$cr2}GM2^}CMQp6I8wlsw@kQ70j_}xB+ zNL8Hr&Z*O?68M>{yZ>`P-`)S7I|gG6R}tt+s4+MO$KZ<$j^6!S^FAM0ot_5(0tb(m zB#vcB;#$iXDsRoP_X~o+5tRVIP%2kX_g=hJRoy#nS-vAYeJGR0d-+a1_~{J4Ws!Ma zo~5v9OI_bLN2vhN_-cLlVp390V_@QD+oA|)U{w!TjO~VY*l{LdAOCVAf&;_DP~92) z(Y$aeHKMq>Z+NeE2F`Toh{x&siL?0}KgYWVW_@oWqn#V9TfQl!CB*vWuNzvs zOEj8p(^iBCHf-GbVUM>A}0*I<^fmI~aV}aW-px+Z|6^QN+@M zING8bUX@@p+r^u;KI!ZQgIy0u1+BcC$Y*?o_NeP@H?%-8#^4gn9}HHq+{Sv64=T$n zg379#l6;9D_sshKxY2l)*;r31+2HGdxW^*TEav#Yu9So-tMZu9wmxZH)i=Av953>b zYPBQ~)AAXve8y;FE~BJ}fay_E#1%yh*IhUm0LsP0?YWQ}{Zhajg36klnu#*Vv`?S3 zgr2R*h_;*O2j_0ElMGQfW3*vhlWBv~`j!epaO6&sV;d Rs09E3002ovPDHLkV1h0F!n^8 zGcb2;001bFV_;zN$VtvEW@2Dq$jvJ$3UYT+h=`0*V86-0#=yhC$H2)To0wc&;2Z1~ z0#w4_=kMprfC0W;V_*c)mvupAVanqLTq&u=$w2xK5LXldEoWe0ECI4b(jn{)5IYIN zo&#bRg#jkxf@y<8U!rK>Z>>I;A8N9304L1OVfl zRDt`MN!kDa010qNS#tmYrWgPKrWgT!b;*qY00UAePZLob$KNbnrlo}l z2q++%#7Hj|#F%1YG(=-S&(gnu1AmPt&RWhIOX2~%NE0Qt9F!no6$OH9T07HDXL;Ug z1M@n+S7t^@=5w2+zxj0LedjI1V2sgugZ#P$`U&DE}P{i?X)+Q(M|DPCN+vz}^(iWA;=2v@t?R$7m{*`z7h{QYSdd z>2DVc@bf98SN9asAyLLJ=5nf5{d{8m2eJ5RD5SIbN>1BH+RKkp)z+1ZpTNquM`ok= zVMVsEAPI|KdC82lxo^c-RS z^8Bh@p|o-Ak<3VjozdBWO6wREipCH8`el#deoaSHb7D3R3T2^)b#QxvO79+P3L#sM zZUj0SjRzjT3wmNsQ~}zGhIfxO^YaiwKxtJ+(+d*mD956wv0zv*F7@qDO{R&zEoXW` zg8V&XDy?XEc}JO?$yV+%LVh+r6yylS=GWx;HSR}5uGBR@VI zinMu62iBlA&2!91lz11*8Honk8wjDy>xq=8k+nyo0iFZR1E6n@mO9SMn^)vm6psZ% zgivlBsL70RD7`$>T*m=rpwbM31TW||gakGoBZl(Jj`3h$@G=Z|mS{_l*xta8_Jf*J zb=cL74|e-*c0;G=wAeWI80`Vv+l;Mv8(`kqq0vN7>6Oqv0l z=KYF1`#E3QY^vq@TD{Ru^O0RSbkhF`=kiN{EA14nv{Sg!PT@*Bg)8k8uC!D90fMq7 UzqfVJMgRZ+07*qoM6N<$g89ozYybcN literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png b/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png new file mode 100644 index 0000000000000000000000000000000000000000..72a164103c514a7c5abac63b1bcdf86103e6de04 GIT binary patch literal 851 zcmV-Z1FZasP)8 zGcb2;001bFV_;zN$VtvEW@2Dq$jvJ$3UYT+h=`0*V86-0#=yhC$H2)To0wc&;2Z1~ z0#w4_=kMprfC0W;V_*c)mvupAVanqLTq&u=$w2xK5LXldEoWe0ECI4b(jn{)5IYIN zo&#bRg#jkxf@y<8U!rK>Z>>I;A8N9304L1OVfl zRDt`MN!kDa010qNS#tmYH(dY#H(dc4fJR*a00Fy6L_t(YiS3oWPr^_T!0(mHD^MiC zuR$HabRcm8O(2*MXH9f9I{Ck$i-QijlVC9MgGm`kgaHO)M3ho^Q2HD|Qs{vY!eGKp z*SqVl*ZX*naL!>0B1{81<4&C`4sw(=Lu1@7!lK(|^_Enl-sG}G<{fxu2$us~+*Q;0 z1^@^IPIuk@<^HgnwDwYL5&{v0?gyP#2=cX0)o4Qjz~FFxtClqbO^S0!Wm%<$co8ns zdp4!Ycs!{#Tlo5L4k|-jBlWFVYF*xIW9{Xr^N`Lr?y_tmZp-w`R3u&f`bo>Z>%-%R zai0s#uI^tELw?%U4Gw2X^~=&jbNoPVD$5d?diRk49E2Qe3!OQuG9FJ>_1**%nYy(^ z{oIH`V*$x*5pCo+>XM~SK?)`P>Y=BHv49j-=pS4F*j%^wSv*eRC@KrTrGCscUf=W~ z@i^Cp&4_PF+%xT!dB)NBG0vT^LW4deHB`pn5`e=k=c*SuhDPGLBq9*282~`Ek&_+S zMSI+m9f?M`Zb=9$lng-k^>BNGdYlM^47!iMYld3q(j4*1$ZH=JgX!Ew2?`y?olySU d{Wjya1TXuEP)8 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 O00008 zGcb2;001bFV_;zN$VtvEW@2Dq$jvJ$3UYT+h=`0*V86-0#=yhC$H2)To0wc&;2Z1~ z0#w4_=kMprfC0W;V_*c)mvupAVanqLTq&u=$w2xK5LXldEoWe0ECI4b(jn{)5IYIN zo&#bRg#jkxf@y<8U!rK>Z>>I;A8N9304L1OVfl zRDt`MN!kDa010qNS#tmYH(dY#H(dc4fJR*a00K)%L_t(oh3%F-Z__{+#~+{H>NrV( z24x5&qV7NkRMgNgv~*?(3mX~wDflRCY!&$cr2}GM2^}CMQp6I8wlsw@kQ70j_}xB+ zNL8Hr&Z*O?68M>{yZ>`P-`)S7I|gG6R}tt+s4+MO$KZ<$j^6!S^FAM0ot_5(0tb(m zB#vcB;#$iXDsRoP_X~o+5tRVIP%2kX_g=hJRoy#nS-vAYeJGR0d-+a1_~{J4Ws!Ma zo~5v9OI_bLN2vhN_-cLlVp390V_@QD+oA|)U{w!TjO~VY*l{LdAOCVAf&;_DP~92) z(Y$aeHKMq>Z+NeE2F`Toh{x&siL?0}KgYWVW_@oWqn#V9TfQl!CB*vWuNzvs zOEj8p(^iBCHf-GbVUM>A}0*I<^fmI~aV}aW-px+Z|6^QN+@M zING8bUX@@p+r^u;KI!ZQgIy0u1+BcC$Y*?o_NeP@H?%-8#^4gn9}HHq+{Sv64=T$n zg379#l6;9D_sshKxY2l)*;r31+2HGdxW^*TEav#Yu9So-tMZu9wmxZH)i=Av953>b zYPBQ~)AAXve8y;FE~BJ}fay_E#1%yh*IhUm0LsP0?YWQ}{Zhajg36klnu#*Vv`?S3 zgr2R*h_;*O2j_0ElMGQfW3*vhlWBv~`j!epaO6&sV;d Rs09E3002ovPDHLkV1i*Fz*GPL literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png b/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..88824fa7ca87f8cd64217bd0bccb6eaa8e197759 GIT binary patch literal 1504 zcmV<61t0o}P)8 zGcb2;001bFV_;zN$VtvEW@2Dq$jvJ$3UYT+h=`0*V86-0#=yhC$H2)To0wc&;2Z1~ z0#w4_=kMprfC0W;V_*c)mvupAVanqLTq&u=$w2xK5LXldEoWe0ECI4b(jn{)5IYIN zo&#bRg#jkxf@y<8U!rK>Z>>I;A8N9304L1OVfl zRDt`MN!kDa010qNS#tmYZn^*fZn^>1-mw<|00c-$L_t(|ob8*bO4|j> zp)>`O*s&YO!wCsYoAJDMY%qR~kv%g{;{Imd@suNkpzjGB_5gw=7LGcxaMX!~qfRUw zbzR2(0wA~&#GIs+%VHja_e#BuiGWtL#uG%`?Kb~XJ(xXUcaqfnbLjVBAi>Y?)+zfZ-)!t zeoF6kdSUhMOua7!M*T0kK0x7O#ThE=absGaU$S7mc<=p7fWoDU+eg(VXmq0dUI&iP z`v4pSF%LH)z`z8w@K{`_U47_(fB^_@rInvwz3(Ax{36h$<+Z#%|HkJ4VB+V>x{xi~wttFh{H4 zY=TB7H1G-$3{dzTEol#=#b$-lc-gQ=#x)D1OdY^_0EHJ@STo7xNzJIbnpXODHXY~|sh5rA z^%u)*znHN~E>CK@$vnF;2p3BBSs{oUlxZ#YNl$gg4N$I472V6vvgZ?gYf0};RKRNwnfu0cq-6Fsif#>0Et&ko3 zW4+3bHdg^gopL%r13+Nm7SJmN9;0kVP0|9aSh1;lBj9%$K^G568D}%}0BcpR#?EKQC*U2u)bPC_4z5NIeqf34oN0PrF!w z`Af)09)4&Oj`ao_VBw$f*q0Xf?g}oz!WZTcI?*S01QlT63nPRCp37#`gyj9m3LT&@ zb$Q52vw}}&5-v}xa0s;|f?ZmwBIo5)(wcO(yA81R6fX+E#{oX*gX|R|mHpjf@6IOb zWqcqlPCl-!6v2fIhg`-X^9Cc#hsPh5po_gajvPsea0000 ziJ7ittaqB2kPza^_LY69>-+2ef6x8ndEWP&=e*}V=RMDPpHxSCn`1Bp3;=**n2V^( zM>YCy@N*wA75Xe00Juy8t*jiKZL|$_wW4kSfJ%-p2>$5B3~BiLfMD;SnkpN1&} zaT)Ajc6N8Z@9gPh%0DT@4mk0J|fpUPhSwiDu}f3_wJkJ#j93#G0pdc zMO-AfGzcK5&eeqeaB^8l#7KZq!s8>A3^C*xLlUpQi{Re}$i)zEFM!f-3nTh#nF7@g znkw9s4q!}(nQCZ$K3CwPOwd{WkQ5ry9f8bSV90baMY^Ylz+R9E4uGAGL)rc2CIHNf zzqX!CqE`cpR180*v0YG5O$jLGB#T_ZL+5_`f}i?J@$NY2xs)7cA&Dd+=iR-a86u;d zwpmc&Ok@<$4LhDTspy)Nqr58RQu+ zVe^rIGvE_Fg@mWXo1wIo)v*cM2I-@oWXN#QBSXUC-K*PM6T>CNYXgs__^SfB?-`e| zc@Mm%%T(#;D+%dU5UEQ7nvccsdZ%9pU_)4W|EplBbjbCFtHVrlNHZus&{O03=LOFA z^d*@eVrM{aw+`dH$@OR14t1FqTSRGrS<5*POWryw=MA~6bWTrrZ4G6UU7uCk#_*ZF zDV&PXo3yK6LYn5`N0dwR0eOVPFjZ~8hJRe%AY#K|E|#yk;gujzCD5KYHosh3iXr31 zcfN5pUhdxsle55X9PWPDq~Ldlhb0HoTXjxPQcn1=lSl0wXd>X-7FJlp>1JmQew9Sw7L+)M4nXfIO9C0<_)?)J@e zN8d~vaM2Jq>bk`x$_lq#tg;i2;nNj@mKT3*C6X5-h8`-lfLE8J)ZsUdcSvh`N}GC) z#)s&^DYKVZfR?F;Op%I#C-3>sY6#$FMlCzuP&xx1+7j?S=?iH9D;;dRJsZRVvNa6e z`usC_0?pIOXo}lB|C8QJ3;^IyRE11HBlwueF~BUdI?Gka+8>2f!XtX~!r3FmTBi`B zi4?PPigbp0DwMc;`fy2BDKSU;Xzkt$17qe@ttMpzuxCB;2;H5KgJG#dPvw?z$>-|F zLYojqHK}CHygHM3vk#`f@z^$NdHBoYUP?P?sdKvdR4Q^~%gM{?T-tXdc5=?W!bI(S z7Ur`%{p1 z;+KZ&y(i-lHhVCSM7Iq*)~aM~)Ve}=LLy13>Zi4X*$^o6SRI@y>r#!;AmAyjEDqi! zv`nCK;x7#Lds{H=8bQ~NsP_KM7f<)=WzQdsyXbSy2P>dK?o%{c5yyk~QGD zwR;8n9Ie}hpH@ooeei85toR?5_lB{qW$t1#c+1_r0zF2|Tuxu9e-9OzkmBkt(oyObCMiO!ckwL6ZgOe~^+GH`zU299wPy5&WC7>n1?`Mj8<9^BQ z_=9NNeVh4Qn?K`+^4}qu-_oO#dQOFLLg)L|yN}IzWDiN3@QgW3!LU?5v{&-F(~~fR z`_F@s6YxI`R(HP^JE|+r#JqpFmv%ox8zr-&$j+6Pm?76R5i-gbJx zE7^6btbAlhk<9XuRoNQ9+FwgaRCr&0rEVGZT&&KoI{IPIq5jFz=o5imixSJYJ+b}T zId)H>fOQI*$K0d5wS|-k`gyzp*5lNW^j>PfjxwC5Uf8;o<05o4W%_Ko{TjJ=MIHex z`P>xlzM+5s#)V@%meh*seXdZm0=S;mj(8y{v1)jEU5KdY%Ev)FH?bp^a_3WV=)|2? z7h-n6eu1QpcSp3QXrp*Ws7}`{eHP#-m+Nq@oX^+T($Co*72!ExnsJHS(39D#-QJ|9M2s*xJ+JEX9Z@sKhOreJgF8(7;~324O44Ho3D0`5anyuic2l zOx4ZrUcYA<;0GZ-V=~s2lv}y;E!7pz;rea9N+wxnNQp=dx)Jv41U-fRPrv=YF%i$x XBXL@GcuU&uDA526+8$MJ2`2mpoxasn literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png b/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d7b077f1b6a77b21c294a5b696ea576188e761d5 GIT binary patch literal 2121 zcmb_dc{J3G8vc!CFrVx)W{4z9hHQoG%#3EpQ1e+w#*(p=tP#bGt+9m=m8EQD2}5X- znCY{O^=e{5LWnEdSN5f@@2~s+J@=32dEaxM^Pcyd_dMr)lI?7*jzM4$0053*E+Q`< z)yRLq&vnGj;Ae>d05b8jw6t@u(lXG|jJN>+Dp_7c;*TE8pt_GIk=Qe!rV0s(xJ;#{ zT_(1(I=VXEcXW5KU z^HBu^Gcpt8Wt&R8s;9If)`y2;jNjUc^s*#RL~T_*_yJE1yCUk@M(U& z3T79|6~$#_di;2R*#bOe{}E>V=%4~Y7o9@^An?sU0F8d3NdW+uhC!O+BMVlZOyKZV zGTpHY4Tx6K**AS9%qlW9U8#bf>(*`G$Dfo&9-bd5OTk@wyitBg8aLS}$0-PpjyhE} zVc2{W;0*DJu0q^Xa$qohWp!+VzCrn@D;YFY@W_C)c<1W&*2GXz;adNrDgFvSu6sr$ zY~BO+=@L~2>PlQ{1&`Dv0gcCE1l`lGeX&8qIsdC*p>zm(18O(b7}W4j^>b6d{&|5j zK7C2%hu9gShjY78&gA;DOk7R+#U@d@U&eA4j|FdyrNf3?Mk=Q}w7QD6$*#?)Ze@DT z1_~#`bSG_Um*6Hjgc0T9TtFTsG1RQKU&TKzuOGI7n~Uaata~L0R0y=ikIgSv7h|aS z@ttp+jhFkkL*&e{8;83eHfe<2p&`kE)E4d2le80_?1bXA`Jysii!~fF45L?gPVNcCw!swW2FPEw`cu_flPJ% zx1N6`PN29um<=(T=YKMK$i4vdiK>t>(GWT&atts{ugq`~Li-@$N(5L>PAGe%Q1cXQ zG@fQ!N|R1QB!kJjrw^B8mEyCsj@ItI&^KaT)of6P0ek3?N2sp2EX*(hd@8#HB%iGp z4Q_xLRwYw4a%zlYO+T3YCSY69^3a#Z-IaDwQs;DXo15VqTlVgj=Tg2KvJyyDq}!G^s3|w35_tY_xJfl zFkxw^)?+djX0-=#jd$K4U@eR0M$u)$6A}qh6+h89(?O!lV+3)kq*FCYokXCu408yM z!6gFa6Mti{-&+Id*GM`xWVQEazPPzuFM0l8+)9>_O8;@PE?0x zSMTNNaWrq`e_AOf^g_3#u;PD|-y6a@mAHt_5G;20@^qO|bKR{=tMv)hs=C>F?T6}< zuO~uZbp3QmR~D-ew;yjS8Hvjpfcp=3=%0k(Qzi=`E}C0{-dexrF9A)y-anIE>i3Io z#U4cB?_14hTiuNv%zX!EeM^l@=sp#~37+p=?>aW;nmH(K%sqyif?%8ZQ0|HA_D@3e z?>`TKPeAYLukL;=v_mM)M7@8wmvTQ|g|V|kA0@TrZJOfml?_b^%rpo_l4K1f{Gh3MP+qdm$}d@ntwH|6aCE8m_`!9{(Ri&nOVuCaZj$us17x<| ziOxIyT)%tQos0*)Oc_{O>lJfoP&jwgUgN)wu+*7D$oFX}H`#~C8oq)p^n9&@Df16b z2)b_5wekUfEA!KXZ@fFGJ_Y=&#;YdA#20Ev?f}AHZ_QaB%MH*ny<@w6Xd_pxqOTp0 zwru5omcB&R-2bSU!k2W*Nm2BTI95azItf^Z^WF7~;5vQOdi}Xp{a`Al@AXpkXb&mDqH7#cI4OBOm%7>YXf(JmJ^5D6x#+6Wgzz zV|V8Zpp#JCX0D|zO_X$^x9cllJw^@A=xO%dQHFBY3Zq*%jzULMCeNnZu2BnDpWG7CUk&S8g*N6~EKs zNY3=#&y&>lXphtotrt%V*6zHiHw@UxW#i73@_89qcstl4!`%8UJ!2d1TzLF;AY6s< zx(-`A#u}7VPYr5*&q{s?tTTf97%Gr|jeI4k3WA>cJP)fHTYDOip%@kcmbgimyr@uM z&9jwBFQ6=LtRl0w8?zbycP1kp#_Vrtu0pJf-%1Qdh?KE76`?2_&%$zk_qTEDG{jwXVQL+pqtSD>9_wkCStj} XB~Hr@ZAsf4B^rQ1*&=H#h;jb`p3Bx- literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png b/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..2f872dd4e6b82061ed2194970feba051eae12d89 GIT binary patch literal 3018 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 literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png b/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png new file mode 100644 index 0000000000000000000000000000000000000000..7fb23a706ad105fce9a3b47c9743dfd95d2d9bdd GIT binary patch literal 1482 zcmV;*1vUDKP)8 zGcb2;001bFV_;zN$VtvEW@2Dq$jvJ$3UYT+h=`0*V86-0#=yhC$H2)To0wc&;2Z1~ z0#w4_=kMprfC0W;V_*c)mvupAVanqLTq&u=$w2xK5LXldEoWe0ECI4b(jn{)5IYIN zo&#bRg#jkxf@y<8U!rK>Z>>I;A8N9304L1OVfl zRDt`MN!kDa010qNS#tmYH(dY#H(dc4fJR*a00c5gL_t(|ob8*-Z`4K{$7k&I+WSmN z69NgSyc)=cfJAtN$10=>;s#PnfkQa;AL>2Fa3};MBoG{crPT_O2oXWcCJGPHR7s?~ z1le8h+Uv*kRwZfhcz$cf$nocBjc5FoXTJ0M{l>RiVO;&$e<94 z3<{yhpb&}-3ZclLuqi}F>hGeWld^8FzS5Ku1q|tmAhcMtR$qxlaZ0K8O~6H(HX3=O zP0kwAOXj-jLSIHXcPIwvlMwXl{o=Zd>6mbIPqeQyCPKvm?;{A^d9FTqS^ax)y+VZ0 zlL@UbV*sD%e-x{BuAmL(N|sG;ydgl5Pp7o;4>gAd!=viL+KE>u|16omPiU}vfg+#1 z(VZLAOfr-&Yc(&cWG_BY2K^imkrkbMQt4A?xn$oMRXr>Qep2m<4(SdeQZw9+G&N^D zeq99&QUB1Z`QrOzuAohLXF@P|1OuL%5Gy=H>L$6KS79^F6F7x+OC@XAQxjr>U+g+L zYvc;Rjjm3(2I!ApS0`tEFd^Pq$jwo8sl?lac#G5xGL%p*MtCq-E1n5GjHO z&Lm?|r|JMf=*Eb;Tw;4OBX4y;R>>yPveCWqikld%F)3U@tj_rr z>)v>URi|5#)f#yb~D5ou?H+7K+xbQI*Mq#@^|JxzelYTGe&3>QXarx&CKZ|q{WhX5 zm+4Ebr9os>hyd;?3g}e3%ydg*Qn-3D;arH-YUFypT%(!L>HRXGFbUZw+Zvgxwe8y_ zY9)4l#kxJFI=5-v0x1+jM8;)EdAv8H9CTqqUt(x}u`5RC(h0Wp>=j%C^k@VRoJlGY z=$xbucxNHsri3dr6Y?A%Qmy^1QhyiZI0%eC=aXkMO6Lw&TfZmxBNAhDsVA{D&B=s( zJ8709cp#gQxtNfj$LUQe@k&pE!$3ZNGjO1dhY3MMdb`o}Wt5IKS0*H2l;9TeC=zZ= zdNu_xMwfdMO)0twZEX-Gkz-iby@xFkaYmN#wQNF;Pz3aLD6sy4B6~ZOUCkbR9`hf~ zY4PWiP9~H+pd9{=65oFgphy9uU;0x0U9pC^XY)4GCjHR4{#^+e?Q4-P9*v(r4EHBo z{~tbO&91DiDK)1-O9vrB(Bj&Yl9VDimp0wtfyl3)P4R7AC^9I7B7;IGGAM*1gF+}W kD1;(|LMSpQYzmS80#`U~)%i12?EnA(07*qoM6N<$g20KIp8x;= literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png b/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cb04c367d06f849ae97d73d9802400253a353181 GIT binary patch literal 2633 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 literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json b/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json new file mode 100644 index 00000000..444d7152 --- /dev/null +++ b/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchScreen-Center.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchScreen-Center@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchScreen-Center@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png b/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png new file mode 100644 index 0000000000000000000000000000000000000000..280c30e083fda186bcc1b24d9b226a9c47bfc7e3 GIT binary patch literal 6808 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 literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png b/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f984b9e44d67e72483d624e50eacc6ce2b7d3a94 GIT binary patch literal 13502 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 literal 0 HcmV?d00001 diff --git a/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@3x.png b/samples/client/nativescript/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..95d86f3f768054dc8c83bdf1e2e095d9213c8e8d GIT binary patch literal 20794 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 + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIRequiresFullScreen + + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/samples/client/nativescript/App_Resources/iOS/LaunchScreen.storyboard b/samples/client/nativescript/App_Resources/iOS/LaunchScreen.storyboard new file mode 100644 index 00000000..c4e5a3f3 --- /dev/null +++ b/samples/client/nativescript/App_Resources/iOS/LaunchScreen.storyboard @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/client/nativescript/App_Resources/iOS/build.xcconfig b/samples/client/nativescript/App_Resources/iOS/build.xcconfig new file mode 100644 index 00000000..80bc9923 --- /dev/null +++ b/samples/client/nativescript/App_Resources/iOS/build.xcconfig @@ -0,0 +1,7 @@ +// You can add custom settings here +// for example you can uncomment the following line to force distribution code signing +// CODE_SIGN_IDENTITY = iPhone Distribution +// To build for device with XCode you need to specify your development team. +// DEVELOPMENT_TEAM = YOUR_TEAM_ID; +ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; +IPHONEOS_DEPLOYMENT_TARGET = 16.0; diff --git a/samples/client/nativescript/README.md b/samples/client/nativescript/README.md new file mode 100644 index 00000000..e819a36c --- /dev/null +++ b/samples/client/nativescript/README.md @@ -0,0 +1,14 @@ +# NativeScript A2UI Sample + +This is a sample NativeScript Angular application using the A2UI NativeScript renderer. + +## Setup + +1. `npm install` +2. `ns run ios` or `ns run android` + +## Structure + +- `src/app/catalog.ts`: Implements the A2UI Catalog mapping. +- `src/app/components/`: Contains the NativeScript implementations of A2UI components. +- `src/app/app.component.ts`: Main entry point demonstrating the renderer. diff --git a/samples/client/nativescript/nativescript.config.ts b/samples/client/nativescript/nativescript.config.ts new file mode 100644 index 00000000..24855414 --- /dev/null +++ b/samples/client/nativescript/nativescript.config.ts @@ -0,0 +1,11 @@ +import { NativeScriptConfig } from '@nativescript/core'; + +export default { + id: 'org.nativescript.a2uidemo', + appPath: 'src', + appResourcesPath: 'App_Resources', + android: { + v8Flags: '--expose_gc', + markingMode: 'none' + } +} as NativeScriptConfig; \ No newline at end of file diff --git a/samples/client/nativescript/package-lock.json b/samples/client/nativescript/package-lock.json new file mode 100644 index 00000000..438c1a21 --- /dev/null +++ b/samples/client/nativescript/package-lock.json @@ -0,0 +1,17235 @@ +{ + "name": "nativescript", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "nativescript", + "version": "1.0.0", + "dependencies": { + "@a2a-js/sdk": "^0.3.4", + "@a2ui/lit": "file:../../../renderers/lit", + "@angular/animations": "^21.0.0", + "@angular/common": "^21.0.0", + "@angular/core": "^21.0.0", + "@angular/forms": "^21.0.0", + "@angular/platform-browser": "^21.0.0", + "@angular/platform-browser-dynamic": "^21.0.0", + "@angular/router": "^21.0.0", + "@google/genai": "^1.22.0", + "@nativescript/angular": "21.0.0-rc.2", + "@nativescript/core": "^9.0.0", + "rxjs": "~7.8.0", + "zone.js": "~0.16.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^21.0.0", + "@angular/build": "^21.0.0", + "@angular/cli": "^21.0.0", + "@angular/compiler": "^21.0.0", + "@angular/compiler-cli": "^21.0.0", + "@nativescript/ios": "9.0.2", + "@nativescript/tailwind": "^2.1.0", + "@nativescript/types": "~9.0.0", + "@nativescript/webpack": "~5.0.28", + "@ngtools/webpack": "^21.0.0", + "tailwindcss": "~3.4.0", + "typescript": "~5.9.2" + } + }, + "../../../renderers/lit": { + "name": "@a2ui/lit", + "version": "0.8.1", + "license": "Apache-2.0", + "dependencies": { + "@lit-labs/signals": "^0.1.3", + "@lit/context": "^1.1.4", + "lit": "^3.3.1", + "markdown-it": "^14.1.0", + "signal-utils": "^0.21.1" + }, + "devDependencies": { + "@types/markdown-it": "^14.1.2", + "@types/node": "^24.10.1", + "google-artifactregistry-auth": "^3.5.0", + "typescript": "^5.8.3", + "wireit": "^0.15.0-pre.2" + } + }, + "node_modules/@a2a-js/sdk": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@a2a-js/sdk/-/sdk-0.3.7.tgz", + "integrity": "sha512-1WBghkOjgiKt4rPNje8jlB9VateVQXqyjlc887bY/H8yM82Hlf0+5JW8zB98BPExKAplI5XqtXVH980J6vqi+w==", + "license": "Apache-2.0", + "dependencies": { + "uuid": "^11.1.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "express": "^4.21.2 || ^5.1.0" + }, + "peerDependenciesMeta": { + "express": { + "optional": true + } + } + }, + "node_modules/@a2a-js/sdk/node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/@a2ui/lit": { + "resolved": "../../../renderers/lit", + "link": true + }, + "node_modules/@algolia/abtesting": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.6.1.tgz", + "integrity": "sha512-wV/gNRkzb7sI9vs1OneG129hwe3Q5zPj7zigz3Ps7M5Lpo2hSorrOnXNodHEOV+yXE/ks4Pd+G3CDFIjFTWhMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-abtesting": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.40.1.tgz", + "integrity": "sha512-cxKNATPY5t+Mv8XAVTI57altkaPH+DZi4uMrnexPxPHODMljhGYY+GDZyHwv9a+8CbZHcY372OkxXrDMZA4Lnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.40.1.tgz", + "integrity": "sha512-XP008aMffJCRGAY8/70t+hyEyvqqV7YKm502VPu0+Ji30oefrTn2al7LXkITz7CK6I4eYXWRhN6NaIUi65F1OA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.40.1.tgz", + "integrity": "sha512-gWfQuQUBtzUboJv/apVGZMoxSaB0M4Imwl1c9Ap+HpCW7V0KhjBddqF2QQt5tJZCOFsfNIgBbZDGsEPaeKUosw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.40.1.tgz", + "integrity": "sha512-RTLjST/t+lsLMouQ4zeLJq2Ss+UNkLGyNVu+yWHanx6kQ3LT5jv8UvPwyht9s7R6jCPnlSI77WnL80J32ZuyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.40.1.tgz", + "integrity": "sha512-2FEK6bUomBzEYkTKzD0iRs7Ljtjb45rKK/VSkyHqeJnG+77qx557IeSO0qVFE3SfzapNcoytTofnZum0BQ6r3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.40.1.tgz", + "integrity": "sha512-Nju4NtxAvXjrV2hHZNLKVJLXjOlW6jAXHef/CwNzk1b2qIrCWDO589ELi5ZHH1uiWYoYyBXDQTtHmhaOVVoyXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.40.1.tgz", + "integrity": "sha512-Mw6pAUF121MfngQtcUb5quZVqMC68pSYYjCRZkSITC085S3zdk+h/g7i6FxnVdbSU6OztxikSDMh1r7Z+4iPlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/ingestion": { + "version": "1.40.1", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.40.1.tgz", + "integrity": "sha512-z+BPlhs45VURKJIxsR99NNBWpUEEqIgwt10v/fATlNxc4UlXvALdOsWzaFfe89/lbP5Bu4+mbO59nqBC87ZM/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.40.1", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.40.1.tgz", + "integrity": "sha512-VJMUMbO0wD8Rd2VVV/nlFtLJsOAQvjnVNGkMkspFiFhpBA7s/xJOb+fJvvqwKFUjbKTUA7DjiSi1ljSMYBasXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.40.1.tgz", + "integrity": "sha512-ehvJLadKVwTp9Scg9NfzVSlBKH34KoWOQNTaN8i1Ac64AnO6iH2apJVSP6GOxssaghZ/s8mFQsDH3QIZoluFHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.40.1.tgz", + "integrity": "sha512-PbidVsPurUSQIr6X9/7s34mgOMdJnn0i6p+N6Ab+lsNhY5eiu+S33kZEpZwkITYBCIbhzDLOvb7xZD3gDi+USA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.40.1.tgz", + "integrity": "sha512-ThZ5j6uOZCF11fMw9IBkhigjOYdXGXQpj6h4k+T9UkZrF2RlKcPynFzDeRgaLdpYk8Yn3/MnFbwUmib7yxj5Lw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.40.1.tgz", + "integrity": "sha512-H1gYPojO6krWHnUXu/T44DrEun/Wl95PJzMXRcM/szstNQczSbwq6wIFJPI9nyE95tarZfUNU3rgorT+wZ6iCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.2100.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2100.3.tgz", + "integrity": "sha512-PcruWF0+IxXOTZd9MN/3y4A5aTfblALzT/+zWym26PtisaBgWQ3tRPQsf/CgT8EdmZl8eUOAWlNBSkbUj/S/lQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "21.0.3", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-21.0.3.tgz", + "integrity": "sha512-KcaI9sDvY6rVsVvILSNBIzJaE5+KcapULShMInD90px9X0QoajXgm8l63FiQOBCNkZt+todMM0h3+u6y7UPsYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.2100.3", + "@angular-devkit/build-webpack": "0.2100.3", + "@angular-devkit/core": "21.0.3", + "@angular/build": "21.0.3", + "@babel/core": "7.28.4", + "@babel/generator": "7.28.3", + "@babel/helper-annotate-as-pure": "7.27.3", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-transform-async-generator-functions": "7.28.0", + "@babel/plugin-transform-async-to-generator": "7.27.1", + "@babel/plugin-transform-runtime": "7.28.3", + "@babel/preset-env": "7.28.3", + "@babel/runtime": "7.28.4", + "@discoveryjs/json-ext": "0.6.3", + "@ngtools/webpack": "21.0.3", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.21", + "babel-loader": "10.0.0", + "browserslist": "^4.26.0", + "copy-webpack-plugin": "13.0.1", + "css-loader": "7.1.2", + "esbuild-wasm": "0.26.0", + "http-proxy-middleware": "3.0.5", + "istanbul-lib-instrument": "6.0.3", + "jsonc-parser": "3.3.1", + "karma-source-map-support": "1.4.0", + "less": "4.4.2", + "less-loader": "12.3.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.3.1", + "mini-css-extract-plugin": "2.9.4", + "open": "10.2.0", + "ora": "9.0.0", + "picomatch": "4.0.3", + "piscina": "5.1.3", + "postcss": "8.5.6", + "postcss-loader": "8.2.0", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.2", + "sass": "1.93.2", + "sass-loader": "16.0.5", + "semver": "7.7.3", + "source-map-loader": "5.0.0", + "source-map-support": "0.5.21", + "terser": "5.44.0", + "tinyglobby": "0.2.15", + "tree-kill": "1.2.2", + "tslib": "2.8.1", + "webpack": "5.102.1", + "webpack-dev-middleware": "7.4.5", + "webpack-dev-server": "5.2.2", + "webpack-merge": "6.0.1", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.26.0" + }, + "peerDependencies": { + "@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.0.3", + "@web/test-runner": "^0.20.0", + "browser-sync": "^3.0.2", + "jest": "^30.2.0", + "jest-environment-jsdom": "^30.2.0", + "karma": "^6.3.0", + "ng-packagr": "^21.0.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "typescript": ">=5.9 <6.0" + }, + "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 + }, + "@web/test-runner": { + "optional": true + }, + "browser-sync": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@angular-devkit/build-angular/node_modules/webpack": { + "version": "5.102.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.102.1.tgz", + "integrity": "sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.26.3", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.3", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.4", + "webpack-sources": "^3.3.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.2100.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2100.3.tgz", + "integrity": "sha512-q76y3iwua3eL3pF3zlKRvDYgnICVWexyReQWIEcCHb4Q4K5hDeJCAO1eLX9no+xmTzbavCADmqcJ6hOkyRjw6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.2100.3", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^5.0.2" + } + }, + "node_modules/@angular-devkit/core": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.0.3.tgz", + "integrity": "sha512-X1y3GMYru9+Vt7vz+R8SFAEmDtgf0aZ+1JOpiE7ubHsQOnhA++Pb94HBjQ6CHqlUhQli/XPOBksKNdZkpup8rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.3", + "rxjs": "7.8.2", + "source-map": "0.7.6" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^4.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.0.3.tgz", + "integrity": "sha512-E/Nja+RIyMzjqLXREOnTRwv7GMrycpAD7kGwDg7l8cWrNQ7phqBZcXAt74Jv9K9aYsOC8tw2Ms9t59aQ6iow8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "21.0.3", + "jsonc-parser": "3.3.1", + "magic-string": "0.30.19", + "ora": "9.0.0", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/magic-string": { + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/@angular/animations": { + "version": "21.0.6", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-21.0.6.tgz", + "integrity": "sha512-dSxhkh/ZlljdglZ0rriSy7GdC1Y3rGaagkx6oAzF5XqAoBbFmiVFEBZPxssSeQ+O0izmAw3GwsUnz3E/1JYsbA==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/core": "21.0.6" + } + }, + "node_modules/@angular/build": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-21.0.3.tgz", + "integrity": "sha512-3h2s0Igruei1RB/Hmu7nwbKvjJQ2ykNaiicXYuS2muWUBhDg+lm0QsGTGXrQV2BD0M9YdHU4Byh9upiZgMYpjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.2100.3", + "@babel/core": "7.28.4", + "@babel/helper-annotate-as-pure": "7.27.3", + "@babel/helper-split-export-declaration": "7.24.7", + "@inquirer/confirm": "5.1.19", + "@vitejs/plugin-basic-ssl": "2.1.0", + "beasties": "0.3.5", + "browserslist": "^4.26.0", + "esbuild": "0.26.0", + "https-proxy-agent": "7.0.6", + "istanbul-lib-instrument": "6.0.3", + "jsonc-parser": "3.3.1", + "listr2": "9.0.5", + "magic-string": "0.30.19", + "mrmime": "2.0.1", + "parse5-html-rewriting-stream": "8.0.0", + "picomatch": "4.0.3", + "piscina": "5.1.3", + "rolldown": "1.0.0-beta.47", + "sass": "1.93.2", + "semver": "7.7.3", + "source-map-support": "0.5.21", + "tinyglobby": "0.2.15", + "undici": "7.16.0", + "vite": "7.2.2", + "watchpack": "2.4.4" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "lmdb": "3.4.3" + }, + "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.0.3", + "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" + }, + "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 + } + } + }, + "node_modules/@angular/build/node_modules/magic-string": { + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/@angular/cli": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.0.3.tgz", + "integrity": "sha512-3lMR3J231JhLgAt37yEULSHFte3zPeta9VYpIIf92JiBsTnWrvKnaK8RXhfdiSQrvhqQ9FMQdl5AG62r1c4dbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.2100.3", + "@angular-devkit/core": "21.0.3", + "@angular-devkit/schematics": "21.0.3", + "@inquirer/prompts": "7.9.0", + "@listr2/prompt-adapter-inquirer": "3.0.5", + "@modelcontextprotocol/sdk": "1.24.0", + "@schematics/angular": "21.0.3", + "@yarnpkg/lockfile": "1.1.0", + "algoliasearch": "5.40.1", + "ini": "5.0.0", + "jsonc-parser": "3.3.1", + "listr2": "9.0.5", + "npm-package-arg": "13.0.1", + "pacote": "21.0.3", + "parse5-html-rewriting-stream": "8.0.0", + "resolve": "1.22.11", + "semver": "7.7.3", + "yargs": "18.0.0", + "zod": "4.1.13" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/common": { + "version": "21.0.6", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-21.0.6.tgz", + "integrity": "sha512-Yd8PF0dR37FAzqEcBHAyVCiSGMJOezSJe6rV/4BC6AVLfaZ7oZLl8CNVxKsod2UHd6rKxt1hzx05QdVcVvYNeA==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/core": "21.0.6", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "21.0.6", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.0.6.tgz", + "integrity": "sha512-rBMzG7WnQMouFfDST+daNSAOVYdtw560645PhlxyVeIeHMlCm0j1jjBgVPGTBNpVgKRdT/sqbi6W6JYkY9mERA==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@angular/compiler-cli": { + "version": "21.0.6", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.0.6.tgz", + "integrity": "sha512-UcIUx+fbn0VLlCBCIYxntAzWG3zPRUo0K7wvuK0MC6ZFCWawgewx9SdLLZTqcaWe1g5FRQlQeVQcFgHAO5R2Mw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "7.28.4", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^4.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.2.0", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^18.0.0" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/compiler": "21.0.6", + "typescript": ">=5.9 <6.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@angular/core": { + "version": "21.0.6", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-21.0.6.tgz", + "integrity": "sha512-SvWbOkkrsqprYJSBmzQEWkWjfZB/jkRYyFp2ClMJBPqOLxP1a+i3Om2rolcNQjZPz87bs9FszwgRlXUy7sw5cQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/compiler": "21.0.6", + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.15.0 || ~0.16.0" + }, + "peerDependenciesMeta": { + "@angular/compiler": { + "optional": true + }, + "zone.js": { + "optional": true + } + } + }, + "node_modules/@angular/forms": { + "version": "21.0.6", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.0.6.tgz", + "integrity": "sha512-aAkAAKuUrP8U7R4aH/HbmG/CXP90GlML77ECBI5b4qCSb+bvaTEYsaf85mCyTpr9jvGkia2LTe42hPcOuyzdsQ==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/common": "21.0.6", + "@angular/core": "21.0.6", + "@angular/platform-browser": "21.0.6", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "21.0.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.0.6.tgz", + "integrity": "sha512-tPk8rlUEBPXIUPRYq6Xu7QhJgKtnVr0dOHHuhyi70biKTupr5VikpZC5X9dy2Q3H3zYbK6MHC6384YMuwfU2kg==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/animations": "21.0.6", + "@angular/common": "21.0.6", + "@angular/core": "21.0.6" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "21.0.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-21.0.6.tgz", + "integrity": "sha512-7mvlvEx66C1cwbAbaeTnbfw1EeZwK5eRCT55pGW+Fsx+vg/8TVF/6NPEbYO65earwIp9Xqt9mGGtq+fPopsbSA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/common": "21.0.6", + "@angular/compiler": "21.0.6", + "@angular/core": "21.0.6", + "@angular/platform-browser": "21.0.6" + } + }, + "node_modules/@angular/router": { + "version": "21.0.6", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-21.0.6.tgz", + "integrity": "sha512-HOfomKq7jRSgxt/uUvpdbB8RNaYuGB/FJQ3BfQCFfGw1O9L3B72b7Hilk6AcjCruul6cfv/kmT4EB6Vqi3dQtA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/common": "21.0.6", + "@angular/core": "21.0.6", + "@angular/platform-browser": "21.0.6", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", + "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.4", + "@babel/types": "^7.28.4", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz", + "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.5", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", + "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.10" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", + "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", + "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", + "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", + "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz", + "integrity": "sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", + "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", + "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", + "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", + "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz", + "integrity": "sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", + "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz", + "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", + "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", + "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz", + "integrity": "sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", + "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.3.tgz", + "integrity": "sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", + "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", + "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.3.tgz", + "integrity": "sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.28.0", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.0", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.28.3", + "@babel/plugin-transform-classes": "^7.28.3", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.0", + "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.28.0", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.28.3", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "core-js-compat": "^3.43.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.4.tgz", + "integrity": "sha512-vTVO/uZixpTVAOQt3qZRUFJ/K1L03OfNkeJ8sFNDVNdVy/zW0h1L5WT7HIPMDUkvSrxQkFaCCybTZkUP7UESlQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^3.0.1", + "postcss-selector-parser": "^6.0.13" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz", + "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", + "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.17.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", + "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", + "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.26.0.tgz", + "integrity": "sha512-hj0sKNCQOOo2fgyII3clmJXP28VhgDfU5iy3GNHlWO76KG6N7x4D9ezH5lJtQTG+1J6MFDAJXC1qsI+W+LvZoA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.26.0.tgz", + "integrity": "sha512-C0hkDsYNHZkBtPxxDx177JN90/1MiCpvBNjz1f5yWJo1+5+c5zr8apjastpEG+wtPjo9FFtGG7owSsAxyKiHxA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.26.0.tgz", + "integrity": "sha512-DDnoJ5eoa13L8zPh87PUlRd/IyFaIKOlRbxiwcSbeumcJ7UZKdtuMCHa1Q27LWQggug6W4m28i4/O2qiQQ5NZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.26.0.tgz", + "integrity": "sha512-bKDkGXGZnj0T70cRpgmv549x38Vr2O3UWLbjT2qmIkdIWcmlg8yebcFWoT9Dku7b5OV3UqPEuNKRzlNhjwUJ9A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.26.0.tgz", + "integrity": "sha512-6Z3naJgOuAIB0RLlJkYc81An3rTlQ/IeRdrU3dOea8h/PvZSgitZV+thNuIccw0MuK1GmIAnAmd5TrMZad8FTQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.26.0.tgz", + "integrity": "sha512-OPnYj0zpYW0tHusMefyaMvNYQX5pNQuSsHFTHUBNp3vVXupwqpxofcjVsUx11CQhGVkGeXjC3WLjh91hgBG2xw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.26.0.tgz", + "integrity": "sha512-jix2fa6GQeZhO1sCKNaNMjfj5hbOvoL2F5t+w6gEPxALumkpOV/wq7oUBMHBn2hY2dOm+mEV/K+xfZy3mrsxNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.26.0.tgz", + "integrity": "sha512-tccJaH5xHJD/239LjbVvJwf6T4kSzbk6wPFerF0uwWlkw/u7HL+wnAzAH5GB2irGhYemDgiNTp8wJzhAHQ64oA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.26.0.tgz", + "integrity": "sha512-JY8NyU31SyRmRpuc5W8PQarAx4TvuYbyxbPIpHAZdr/0g4iBr8KwQBS4kiiamGl2f42BBecHusYCsyxi7Kn8UQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.26.0.tgz", + "integrity": "sha512-IMJYN7FSkLttYyTbsbme0Ra14cBO5z47kpamo16IwggzzATFY2lcZAwkbcNkWiAduKrTgFJP7fW5cBI7FzcuNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.26.0.tgz", + "integrity": "sha512-XITaGqGVLgk8WOHw8We9Z1L0lbLFip8LyQzKYFKO4zFo1PFaaSKsbNjvkb7O8kEXytmSGRkYpE8LLVpPJpsSlw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.26.0.tgz", + "integrity": "sha512-MkggfbDIczStUJwq9wU7gQ7kO33d8j9lWuOCDifN9t47+PeI+9m2QVh51EI/zZQ1spZtFMC1nzBJ+qNGCjJnsg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.26.0.tgz", + "integrity": "sha512-fUYup12HZWAeccNLhQ5HwNBPr4zXCPgUWzEq2Rfw7UwqwfQrFZ0SR/JljaURR8xIh9t+o1lNUFTECUTmaP7yKA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.26.0.tgz", + "integrity": "sha512-MzRKhM0Ip+//VYwC8tialCiwUQ4G65WfALtJEFyU0GKJzfTYoPBw5XNWf0SLbCUYQbxTKamlVwPmcw4DgZzFxg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.26.0.tgz", + "integrity": "sha512-QhCc32CwI1I4Jrg1enCv292sm3YJprW8WHHlyxJhae/dVs+KRWkbvz2Nynl5HmZDW/m9ZxrXayHzjzVNvQMGQA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.26.0.tgz", + "integrity": "sha512-1D6vi6lfI18aNT1aTf2HV+RIlm6fxtlAp8eOJ4mmnbYmZ4boz8zYDar86sIYNh0wmiLJEbW/EocaKAX6Yso2fw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.26.0.tgz", + "integrity": "sha512-rnDcepj7LjrKFvZkx+WrBv6wECeYACcFjdNPvVPojCPJD8nHpb3pv3AuR9CXgdnjH1O23btICj0rsp0L9wAnHA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.26.0.tgz", + "integrity": "sha512-FSWmgGp0mDNjEXXFcsf12BmVrb+sZBBBlyh3LwB/B9ac3Kkc8x5D2WimYW9N7SUkolui8JzVnVlWh7ZmjCpnxw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.26.0.tgz", + "integrity": "sha512-0QfciUDFryD39QoSPUDshj4uNEjQhp73+3pbSAaxjV2qGOEDsM67P7KbJq7LzHoVl46oqhIhJ1S+skKGR7lMXA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.26.0.tgz", + "integrity": "sha512-vmAK+nHhIZWImwJ3RNw9hX3fU4UGN/OqbSE0imqljNbUQC3GvVJ1jpwYoTfD6mmXmQaxdJY6Hn4jQbLGJKg5Yw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.26.0.tgz", + "integrity": "sha512-GPXF7RMkJ7o9bTyUsnyNtrFMqgM3X+uM/LWw4CeHIjqc32fm0Ir6jKDnWHpj8xHFstgWDUYseSABK9KCkHGnpg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.26.0.tgz", + "integrity": "sha512-nUHZ5jEYqbBthbiBksbmHTlbb5eElyVfs/s1iHQ8rLBq1eWsd5maOnDpCocw1OM8kFK747d1Xms8dXJHtduxSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.26.0.tgz", + "integrity": "sha512-TMg3KCTCYYaVO+R6P5mSORhcNDDlemUVnUbb8QkboUtOhb5JWKAzd5uMIMECJQOxHZ/R+N8HHtDF5ylzLfMiLw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.26.0.tgz", + "integrity": "sha512-apqYgoAUd6ZCb9Phcs8zN32q6l0ZQzQBdVXOofa6WvHDlSOhwCWgSfVQabGViThS40Y1NA4SCvQickgZMFZRlA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.26.0.tgz", + "integrity": "sha512-FGJAcImbJNZzLWu7U6WB0iKHl4RuY4TsXEwxJPl9UZLS47agIZuILZEX3Pagfw7I4J3ddflomt9f0apfaJSbaw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.26.0.tgz", + "integrity": "sha512-WAckBKaVnmFqbEhbymrPK7M086DQMpL1XoRbpmN0iW8k5JSXjDRQBhcZNa0VweItknLq9eAeCL34jK7/CDcw7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@google/genai": { + "version": "1.34.0", + "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.34.0.tgz", + "integrity": "sha512-vu53UMPvjmb7PGzlYu6Tzxso8Dfhn+a7eQFaS2uNemVtDZKwzSpJ5+ikqBbXplF7RGB1STcVDqCkPvquiwb2sw==", + "license": "Apache-2.0", + "dependencies": { + "google-auth-library": "^10.3.0", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@modelcontextprotocol/sdk": "^1.24.0" + }, + "peerDependenciesMeta": { + "@modelcontextprotocol/sdk": { + "optional": true + } + } + }, + "node_modules/@google/genai/node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@hookun/parse-animation-shorthand": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@hookun/parse-animation-shorthand/-/parse-animation-shorthand-0.1.5.tgz", + "integrity": "sha512-/fnwYK9Tgllhtv2EpwZZVbwhCokAoGtfEz23mZtjHMHvih4YeiAeUuVpyjGrTGf6j6ymgrCxGwUiAkAfDsmUjw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@inquirer/ansi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", + "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.2.tgz", + "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.19", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.19.tgz", + "integrity": "sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", + "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/core/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@inquirer/core/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/core/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/core/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/editor": { + "version": "4.2.23", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz", + "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/external-editor": "^1.0.3", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.23.tgz", + "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor/node_modules/iconv-lite": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz", + "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz", + "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz", + "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.23.tgz", + "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.9.0.tgz", + "integrity": "sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@inquirer/checkbox": "^4.3.0", + "@inquirer/confirm": "^5.1.19", + "@inquirer/editor": "^4.2.21", + "@inquirer/expand": "^4.0.21", + "@inquirer/input": "^4.2.5", + "@inquirer/number": "^3.0.21", + "@inquirer/password": "^4.0.21", + "@inquirer/rawlist": "^4.1.9", + "@inquirer/search": "^3.2.0", + "@inquirer/select": "^4.4.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.11.tgz", + "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.2.tgz", + "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.2.tgz", + "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", + "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@listr2/prompt-adapter-inquirer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-3.0.5.tgz", + "integrity": "sha512-WELs+hj6xcilkloBXYf9XXK8tYEnKsgLj01Xl5ONUJpKjmT5hGVUzNUS5tooUxs7pGMrw+jFD/41WpqW4V3LDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@inquirer/prompts": ">= 3 < 8", + "listr2": "9.0.5" + } + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.4.3.tgz", + "integrity": "sha512-zR6Y45VNtW5s+A+4AyhrJk0VJKhXdkLhrySCpCu7PSdnakebsOzNxf58p5Xoq66vOSuueGAxlqDAF49HwdrSTQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.4.3.tgz", + "integrity": "sha512-nfGm5pQksBGfaj9uMbjC0YyQreny/Pl7mIDtHtw6g7WQuCgeLullr9FNRsYyKplaEJBPrCVpEjpAznxTBIrXBw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.4.3.tgz", + "integrity": "sha512-Kjqomp7i0rgSbYSUmv9JnXpS55zYT/YcW3Bdf9oqOTjcH0/8tFAP8MLhu/i9V2pMKIURDZk63Ww49DTK0T3c/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.4.3.tgz", + "integrity": "sha512-uX9eaPqWb740wg5D3TCvU/js23lSRSKT7lJrrQ8IuEG/VLgpPlxO3lHDywU44yFYdGS7pElBn6ioKFKhvALZlw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.4.3.tgz", + "integrity": "sha512-7/8l20D55CfwdMupkc3fNxNJdn4bHsti2X0cp6PwiXlLeSFvAfWs5kCCx+2Cyje4l4GtN//LtKWjTru/9hDJQg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-arm64": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.4.3.tgz", + "integrity": "sha512-yWVR0e5Gl35EGJBsAuqPOdjtUYuN8CcTLKrqpQFoM+KsMadViVCulhKNhkcjSGJB88Am5bRPjMro4MBB9FS23Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.4.3.tgz", + "integrity": "sha512-1JdBkcO0Vrua4LUgr4jAe4FUyluwCeq/pDkBrlaVjX3/BBWP1TzVjCL+TibWNQtPAL1BITXPAhlK5Ru4FBd/hg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.24.0.tgz", + "integrity": "sha512-D8h5KXY2vHFW8zTuxn2vuZGN0HGrQ5No6LkHwlEA9trVgNdPL3TF1dSqKA7Dny6BbBYKSW/rOBDXdC8KJAjUCg==", + "devOptional": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "jose": "^6.1.1", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/body-parser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", + "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/content-disposition": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/iconv-lite": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz", + "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", + "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", + "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", + "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", + "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", + "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", + "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@napi-rs/nice": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.1.1.tgz", + "integrity": "sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/nice-android-arm-eabi": "1.1.1", + "@napi-rs/nice-android-arm64": "1.1.1", + "@napi-rs/nice-darwin-arm64": "1.1.1", + "@napi-rs/nice-darwin-x64": "1.1.1", + "@napi-rs/nice-freebsd-x64": "1.1.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.1.1", + "@napi-rs/nice-linux-arm64-gnu": "1.1.1", + "@napi-rs/nice-linux-arm64-musl": "1.1.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.1.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.1.1", + "@napi-rs/nice-linux-s390x-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-musl": "1.1.1", + "@napi-rs/nice-openharmony-arm64": "1.1.1", + "@napi-rs/nice-win32-arm64-msvc": "1.1.1", + "@napi-rs/nice-win32-ia32-msvc": "1.1.1", + "@napi-rs/nice-win32-x64-msvc": "1.1.1" + } + }, + "node_modules/@napi-rs/nice-android-arm-eabi": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz", + "integrity": "sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-android-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz", + "integrity": "sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz", + "integrity": "sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz", + "integrity": "sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-freebsd-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz", + "integrity": "sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz", + "integrity": "sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz", + "integrity": "sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz", + "integrity": "sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-ppc64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz", + "integrity": "sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-riscv64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz", + "integrity": "sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-s390x-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz", + "integrity": "sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz", + "integrity": "sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz", + "integrity": "sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-openharmony-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz", + "integrity": "sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-arm64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz", + "integrity": "sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-ia32-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz", + "integrity": "sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-x64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz", + "integrity": "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.0.tgz", + "integrity": "sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@tybys/wasm-util": "^0.10.1" + } + }, + "node_modules/@nativescript/angular": { + "version": "21.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@nativescript/angular/-/angular-21.0.0-rc.2.tgz", + "integrity": "sha512-gghBkClTq+BfiTFP/5SOMvlIoA5vK+RCBipO58C8JXn/5kr5hQ6ybRGp+G1dU+9qBWVZDgTo1/QNffDTHLLyfA==", + "license": "Apache-2.0", + "dependencies": { + "@nativescript/zone-js": "^4.0.0", + "tslib": "^2.3.0" + } + }, + "node_modules/@nativescript/core": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@nativescript/core/-/core-9.0.8.tgz", + "integrity": "sha512-CiMiSxXsFNeYm67enKbanKflvfdWr9Yk28SSSOXV8I4hLPElEq4kKkqwFIwM7y3Ago2jhAsMGv4Ymz61Q6WfFg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/NativeScript" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NativeScript" + } + ], + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@csstools/css-calc": "~2.1.4", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@nativescript/hook": "~3.0.4", + "acorn": "^8.15.0", + "css-tree": "^3.1.0", + "css-what": "^7.0.0", + "emoji-regex": "^10.2.1", + "source-map": "0.7.6", + "source-map-js": "^1.2.1", + "tslib": "^2.0.0" + } + }, + "node_modules/@nativescript/hook": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@nativescript/hook/-/hook-3.0.4.tgz", + "integrity": "sha512-oahiN7V0D+fgl9o8mjGRgExujTpgSBB0DAFr3eX91qdlJZV8ywJ6mnvtHZyEI2j46yPgAE8jmNIw/Z/d3aWetw==", + "license": "Apache-2.0", + "dependencies": { + "glob": "^11.0.0", + "mkdirp": "^3.0.1" + } + }, + "node_modules/@nativescript/ios": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@nativescript/ios/-/ios-9.0.2.tgz", + "integrity": "sha512-v5uiT3ipMZmygot603VwBlMnqiGtGqrHU5/VGencokF8s6Wbpb1mGzBvJtB7YCaKncrp/y8b3COoYTkGUp9HbA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@nativescript/tailwind": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@nativescript/tailwind/-/tailwind-2.1.1.tgz", + "integrity": "sha512-Fo+E8JG0MbZLRLcvIWPiI2P4SqJ/S6u4uzceIun5wfmm3LG4gErF4ivvHuJu/IdwDKCGw5FNLO21e+M0O/P5/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/postcss-is-pseudo-class": "4.0.4", + "@hookun/parse-animation-shorthand": "^0.1.4" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/@nativescript/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@nativescript/types/-/types-9.0.0.tgz", + "integrity": "sha512-fR9ot7Si9L0StcsOZpAEThggeQb8cQxCL0BwRKuWHbm+SdlinuOWSl6lS3bKuIIcCzJem2cWP3UrzgweRnOe/A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@nativescript/types-android": "9.0.0", + "@nativescript/types-ios": "9.0.0" + } + }, + "node_modules/@nativescript/types-android": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@nativescript/types-android/-/types-android-9.0.0.tgz", + "integrity": "sha512-Az64E1m6jd7CKX/QKOZi3uSxQEXZbPW5NlmMNP9VGCP9UobHLd5GgqpEIyeBB4Jep4rckA2Z4LEEpjbu/my63Q==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@nativescript/types-ios": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@nativescript/types-ios/-/types-ios-9.0.0.tgz", + "integrity": "sha512-A13VLFFKNrkYqS7JU0V+R4wxKIE66VvYiHK1+vrVXqiK6l+95BxgEgRPD8FlXN7W2iXXqYLapo8nVMtWArpscg==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@nativescript/webpack": { + "version": "5.0.28", + "resolved": "https://registry.npmjs.org/@nativescript/webpack/-/webpack-5.0.28.tgz", + "integrity": "sha512-36pj2rTf97npazh3uaORF1HZ0uGgDVWIY8FfV6kIedl+l783kylHOCkfmIc8ZjDbIOxurB94vjZ9l2xVd68xXg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/core": "^7.0.0", + "@pmmmwh/react-refresh-webpack-plugin": "~0.6.1", + "@vue/compiler-sfc": "^3.5.17", + "acorn": "^8.0.0", + "acorn-stage3": "^4.0.0", + "ansi-colors": "^4.1.3", + "babel-loader": "^10.0.0", + "cli-highlight": "^2.0.0", + "commander": "^14.0.0", + "copy-webpack-plugin": "^13.0.0", + "css": "^3.0.0", + "css-loader": "^7.0.0", + "dotenv-webpack": "^8.0.0", + "fork-ts-checker-webpack-plugin": "^9.0.0", + "loader-utils": "^2.0.0 || ^3.0.0", + "lodash.get": "^4.0.0", + "micromatch": "^4.0.0", + "postcss": "^8.0.0", + "postcss-import": "^16.0.0", + "postcss-loader": "^8.0.0", + "raw-loader": "^4.0.0", + "react-refresh": "~0.18.0", + "sass": "^1.0.0", + "sass-loader": "^16.0.0", + "sax": "^1.0.0", + "semver": "^7.0.0 || ^6.0.0", + "source-map": "^0.7.0", + "terser-webpack-plugin": "^5.0.0", + "ts-dedent": "^2.0.0", + "ts-loader": "^9.0.0", + "vue-loader": "^17.4.2", + "webpack": "^5.30.0 <= 5.50.0 || ^5.51.2", + "webpack-bundle-analyzer": "^4.0.0", + "webpack-chain": "^6.0.0", + "webpack-cli": "^6.0.0", + "webpack-merge": "^6.0.0", + "webpack-virtual-modules": "^0.4.0" + }, + "bin": { + "nativescript-webpack": "dist/bin/index.js" + }, + "peerDependencies": { + "nativescript-vue-template-compiler": "^2.8.1" + }, + "peerDependenciesMeta": { + "nativescript-vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/@nativescript/zone-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@nativescript/zone-js/-/zone-js-4.0.0.tgz", + "integrity": "sha512-CpCMfQ8lPOmW0RKPhE0XByt78zmN12zKdaJTv6dlqHOjvfDqnpXwtlQVONkaDgxtowuTRJaQqWZsc2Wsyec/LA==" + }, + "node_modules/@ngtools/webpack": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-21.0.3.tgz", + "integrity": "sha512-JDO+KOpNBL5bKgHugjLLgDNDt3odBZLYDaKyeC7s9xv3nAPu0UXQHkMcZe+sOJVMZS0zkSTTQ7zMO8BC6MDj3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^21.0.0", + "typescript": ">=5.9 <6.0", + "webpack": "^5.54.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", + "integrity": "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==", + "dev": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^11.2.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@npmcli/fs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-5.0.0.tgz", + "integrity": "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-7.0.1.tgz", + "integrity": "sha512-+XTFxK2jJF/EJJ5SoAzXk3qwIDfvFc5/g+bD274LZ7uY7LE8sTfG6Z8rOanPl2ZEvZWqNvmEdtXC25cE54VcoA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^9.0.0", + "ini": "^6.0.0", + "lru-cache": "^11.2.1", + "npm-pick-manifest": "^11.0.1", + "proc-log": "^6.0.0", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git/node_modules/@npmcli/promise-spawn": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", + "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git/node_modules/ini": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", + "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@npmcli/git/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", + "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", + "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz", + "integrity": "sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.4.tgz", + "integrity": "sha512-0wInJG3j/K40OJt/33ax47WfWMzZTm6OQxB9cDhTt5huCP2a9g2GnlsxmfN+PulItNPIpPrZ+kfwwUil7eHcZQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "glob": "^13.0.0", + "hosted-git-info": "^9.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", + "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "path-scurry": "^2.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/json-parse-even-better-errors": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", + "integrity": "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.3.tgz", + "integrity": "sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-4.0.0.tgz", + "integrity": "sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.3.tgz", + "integrity": "sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "node-gyp": "^12.1.0", + "proc-log": "^6.0.0", + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/@npmcli/promise-spawn": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", + "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/run-script/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", + "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.96.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.96.0.tgz", + "integrity": "sha512-r/xkmoXA0xEpU6UGtn18CNVjXH6erU3KCpCDbpLmbVxBFor1U9MqN5Z2uMmCHJuXjJzlnDR+hWY+yPoLo8oHDw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.6.2.tgz", + "integrity": "sha512-IhIAD5n4XvGHuL9nAgWfsBR0TdxtjrUWETYKCBHxauYXEv+b+ctEbs9neEgPC7Ecgzv4bpZTBwesAoGDeFymzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "anser": "^2.1.1", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "html-entities": "^2.1.0", + "schema-utils": "^4.2.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "@types/webpack": "5.x", + "react-refresh": ">=0.10.0 <1.0.0", + "sockjs-client": "^1.4.0", + "type-fest": ">=0.17.0 <6.0.0", + "webpack": "^5.0.0", + "webpack-dev-server": "^4.8.0 || 5.x", + "webpack-hot-middleware": "2.x", + "webpack-plugin-serve": "1.x" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + }, + "sockjs-client": { + "optional": true + }, + "type-fest": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + }, + "webpack-hot-middleware": { + "optional": true + }, + "webpack-plugin-serve": { + "optional": true + } + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-beta.47.tgz", + "integrity": "sha512-vPP9/MZzESh9QtmvQYojXP/midjgkkc1E4AdnPPAzQXo668ncHJcVLKjJKzoBdsQmaIvNjrMdsCwES8vTQHRQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-beta.47.tgz", + "integrity": "sha512-Lc3nrkxeaDVCVl8qR3qoxh6ltDZfkQ98j5vwIr5ALPkgjZtDK4BGCrrBoLpGVMg+csWcaqUbwbKwH5yvVa0oOw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-beta.47.tgz", + "integrity": "sha512-eBYxQDwP0O33plqNVqOtUHqRiSYVneAknviM5XMawke3mwMuVlAsohtOqEjbCEl/Loi/FWdVeks5WkqAkzkYWQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-beta.47.tgz", + "integrity": "sha512-Ns+kgp2+1Iq/44bY/Z30DETUSiHY7ZuqaOgD5bHVW++8vme9rdiWsN4yG4rRPXkdgzjvQ9TDHmZZKfY4/G11AA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-beta.47.tgz", + "integrity": "sha512-4PecgWCJhTA2EFOlptYJiNyVP2MrVP4cWdndpOu3WmXqWqZUmSubhb4YUAIxAxnXATlGjC1WjxNPhV7ZllNgdA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-beta.47.tgz", + "integrity": "sha512-CyIunZ6D9U9Xg94roQI1INt/bLkOpPsZjZZkiaAZ0r6uccQdICmC99M9RUPlMLw/qg4yEWLlQhG73W/mG437NA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-beta.47.tgz", + "integrity": "sha512-doozc/Goe7qRCSnzfJbFINTHsMktqmZQmweull6hsZZ9sjNWQ6BWQnbvOlfZJe4xE5NxM1NhPnY5Giqnl3ZrYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-beta.47.tgz", + "integrity": "sha512-fodvSMf6Aqwa0wEUSTPewmmZOD44rc5Tpr5p9NkwQ6W1SSpUKzD3SwpJIgANDOhwiYhDuiIaYPGB7Ujkx1q0UQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-beta.47.tgz", + "integrity": "sha512-Rxm5hYc0mGjwLh5sjlGmMygxAaV2gnsx7CNm2lsb47oyt5UQyPDZf3GP/ct8BEcwuikdqzsrrlIp8+kCSvMFNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-beta.47.tgz", + "integrity": "sha512-YakuVe+Gc87jjxazBL34hbr8RJpRuFBhun7NEqoChVDlH5FLhLXjAPHqZd990TVGVNkemourf817Z8u2fONS8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-beta.47.tgz", + "integrity": "sha512-ak2GvTFQz3UAOw8cuQq8pWE+TNygQB6O47rMhvevvTzETh7VkHRFtRUwJynX5hwzFvQMP6G0az5JrBGuwaMwYQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.0.7" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-beta.47.tgz", + "integrity": "sha512-o5BpmBnXU+Cj+9+ndMcdKjhZlPb79dVPBZnWwMnI4RlNSSq5yOvFZqvfPYbyacvnW03Na4n5XXQAPhu3RydZ0w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-ia32-msvc": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.0.0-beta.47.tgz", + "integrity": "sha512-FVOmfyYehNE92IfC9Kgs913UerDog2M1m+FADJypKz0gmRg3UyTt4o1cZMCAl7MiR89JpM9jegNO1nXuP1w1vw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-beta.47.tgz", + "integrity": "sha512-by/70F13IUE101Bat0oeH8miwWX5mhMFPk1yjCdxoTNHTyTdLgb0THNaebRM6AP7Kz+O3O2qx87sruYuF5UxHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.47.tgz", + "integrity": "sha512-8QagwMH3kNCuzD8EWL8R2YPW5e4OrHNSAHRFDdmFqEwEaD/KcNKjVoumo+gP2vW5eKB2UPbM6vTYiGZX0ixLnw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.5.tgz", + "integrity": "sha512-iDGS/h7D8t7tvZ1t6+WPK04KD0MwzLZrG0se1hzBjSi5fyxlsiggoJHwh18PCFNn7tG43OWb6pdZ6Y+rMlmyNQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.5.tgz", + "integrity": "sha512-wrSAViWvZHBMMlWk6EJhvg8/rjxzyEhEdgfMMjREHEq11EtJ6IP6yfcCH57YAEca2Oe3FNCE9DSTgU70EIGmVw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.5.tgz", + "integrity": "sha512-S87zZPBmRO6u1YXQLwpveZm4JfPpAa6oHBX7/ghSiGH3rz/KDgAu1rKdGutV+WUI6tKDMbaBJomhnT30Y2t4VQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.5.tgz", + "integrity": "sha512-YTbnsAaHo6VrAczISxgpTva8EkfQus0VPEVJCEaboHtZRIb6h6j0BNxRBOwnDciFTZLDPW5r+ZBmhL/+YpTZgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.5.tgz", + "integrity": "sha512-1T8eY2J8rKJWzaznV7zedfdhD1BqVs1iqILhmHDq/bqCUZsrMt+j8VCTHhP0vdfbHK3e1IQ7VYx3jlKqwlf+vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.5.tgz", + "integrity": "sha512-sHTiuXyBJApxRn+VFMaw1U+Qsz4kcNlxQ742snICYPrY+DDL8/ZbaC4DVIB7vgZmp3jiDaKA0WpBdP0aqPJoBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.5.tgz", + "integrity": "sha512-dV3T9MyAf0w8zPVLVBptVlzaXxka6xg1f16VAQmjg+4KMSTWDvhimI/Y6mp8oHwNrmnmVl9XxJ/w/mO4uIQONA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.5.tgz", + "integrity": "sha512-wIGYC1x/hyjP+KAu9+ewDI+fi5XSNiUi9Bvg6KGAh2TsNMA3tSEs+Sh6jJ/r4BV/bx/CyWu2ue9kDnIdRyafcQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.5.tgz", + "integrity": "sha512-Y+qVA0D9d0y2FRNiG9oM3Hut/DgODZbU9I8pLLPwAsU0tUKZ49cyV1tzmB/qRbSzGvY8lpgGkJuMyuhH7Ma+Vg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.5.tgz", + "integrity": "sha512-juaC4bEgJsyFVfqhtGLz8mbopaWD+WeSOYr5E16y+1of6KQjc0BpwZLuxkClqY1i8sco+MdyoXPNiCkQou09+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.5.tgz", + "integrity": "sha512-rIEC0hZ17A42iXtHX+EPJVL/CakHo+tT7W0pbzdAGuWOt2jxDFh7A/lRhsNHBcqL4T36+UiAgwO8pbmn3dE8wA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.5.tgz", + "integrity": "sha512-T7l409NhUE552RcAOcmJHj3xyZ2h7vMWzcwQI0hvn5tqHh3oSoclf9WgTl+0QqffWFG8MEVZZP1/OBglKZx52Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.5.tgz", + "integrity": "sha512-7OK5/GhxbnrMcxIFoYfhV/TkknarkYC1hqUw1wU2xUN3TVRLNT5FmBv4KkheSG2xZ6IEbRAhTooTV2+R5Tk0lQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.5.tgz", + "integrity": "sha512-GwuDBE/PsXaTa76lO5eLJTyr2k8QkPipAyOrs4V/KJufHCZBJ495VCGJol35grx9xryk4V+2zd3Ri+3v7NPh+w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.5.tgz", + "integrity": "sha512-IAE1Ziyr1qNfnmiQLHBURAD+eh/zH1pIeJjeShleII7Vj8kyEm2PF77o+lf3WTHDpNJcu4IXJxNO0Zluro8bOw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.5.tgz", + "integrity": "sha512-Pg6E+oP7GvZ4XwgRJBuSXZjcqpIW3yCBhK4BcsANvb47qMvAbCjR6E+1a/U2WXz1JJxp9/4Dno3/iSJLcm5auw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.5.tgz", + "integrity": "sha512-txGtluxDKTxaMDzUduGP0wdfng24y1rygUMnmlUJ88fzCCULCLn7oE5kb2+tRB+MWq1QDZT6ObT5RrR8HFRKqg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.5.tgz", + "integrity": "sha512-3DFiLPnTxiOQV993fMc+KO8zXHTcIjgaInrqlG8zDp1TlhYl6WgrOHuJkJQ6M8zHEcntSJsUp1XFZSY8C1DYbg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.5.tgz", + "integrity": "sha512-nggc/wPpNTgjGg75hu+Q/3i32R00Lq1B6N1DO7MCU340MRKL3WZJMjA9U4K4gzy3dkZPXm9E1Nc81FItBVGRlA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.5.tgz", + "integrity": "sha512-U/54pTbdQpPLBdEzCT6NBCFAfSZMvmjr0twhnD9f4EIvlm9wy3jjQ38yQj1AGznrNO65EWQMgm/QUjuIVrYF9w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.5.tgz", + "integrity": "sha512-2NqKgZSuLH9SXBBV2dWNRCZmocgSOx8OJSdpRaEcRlIfX8YrKxUT6z0F1NpvDVhOsl190UFTRh2F2WDWWCYp3A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.5.tgz", + "integrity": "sha512-JRpZUhCfhZ4keB5v0fe02gQJy05GqboPOaxvjugW04RLSYYoB/9t2lx2u/tMs/Na/1NXfY8QYjgRljRpN+MjTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@schematics/angular": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.0.3.tgz", + "integrity": "sha512-XYOI2WOz8B+ydJ8iUHRXrUyjTx+YGdCQ8b2FlXnU46ksIctVU+zt4Zgu6462xeaPwOFYw6+r+TvaBAZ14a82Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "21.0.3", + "@angular-devkit/schematics": "21.0.3", + "jsonc-parser": "3.3.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/bundle": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-4.0.0.tgz", + "integrity": "sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/core": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-3.0.0.tgz", + "integrity": "sha512-NgbJ+aW9gQl/25+GIEGYcCyi8M+ng2/5X04BMuIgoDfgvp18vDcoNHOQjQsG9418HGNYRxG3vfEXaR1ayD37gg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.5.0.tgz", + "integrity": "sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-4.0.1.tgz", + "integrity": "sha512-KFNGy01gx9Y3IBPG/CergxR9RZpN43N+lt3EozEfeoyqm8vEiLxwRl3ZO5sPx3Obv1ix/p7FWOlPc2Jgwfp9PA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0", + "make-fetch-happen": "^15.0.2", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-4.0.0.tgz", + "integrity": "sha512-0QFuWDHOQmz7t66gfpfNO6aEjoFrdhkJaej/AOqb4kqWZVbPWFZifXZzkxyQBB1OwTbkhdT3LNpMFxwkTvf+2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0", + "tuf-js": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-3.0.0.tgz", + "integrity": "sha512-moXtHH33AobOhTZF8xcX1MpOFqdvfCk7v6+teJL8zymBiDXwEsQH6XG9HGx2VIxnJZNm4cNSzflTLDnQLmIdmw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-4.0.0.tgz", + "integrity": "sha512-h5x5ga/hh82COe+GoD4+gKUeV4T3iaYOxqLt41GRKApinPI7DMidhCmNVTjKfhCWFJIGXaFJee07XczdT4jdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "^1" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.7", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz", + "integrity": "sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.0.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz", + "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.0.tgz", + "integrity": "sha512-dOxxrhgyDIEUADhb/8OlV9JIqYLgos03YorAueTIeOUskLJSEsfwCByjbu98ctXitUN3znXKp0bYD/WHSudCeA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.26.tgz", + "integrity": "sha512-vXyI5GMfuoBCnv5ucIT7jhHKl55Y477yxP6fc4eUswjP8FG3FFVFd41eNDArR+Uk3QKn2Z85NavjaxLxOC19/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@vue/shared": "3.5.26", + "entities": "^7.0.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.26.tgz", + "integrity": "sha512-y1Tcd3eXs834QjswshSilCBnKGeQjQXB6PqFn/1nxcQw4pmG42G8lwz+FZPAZAby6gZeHSt/8LMPfZ4Rb+Bd/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.26", + "@vue/shared": "3.5.26" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.26.tgz", + "integrity": "sha512-egp69qDTSEZcf4bGOSsprUr4xI73wfrY5oRs6GSgXFTiHrWj4Y3X5Ydtip9QMqiCMCPVwLglB9GBxXtTadJ3mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@vue/compiler-core": "3.5.26", + "@vue/compiler-dom": "3.5.26", + "@vue/compiler-ssr": "3.5.26", + "@vue/shared": "3.5.26", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.26.tgz", + "integrity": "sha512-lZT9/Y0nSIRUPVvapFJEVDbEXruZh2IYHMk2zTtEgJSlP5gVOqeWXH54xDKAaFS4rTnDeDBQUYDtxKyoW9FwDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.26", + "@vue/shared": "3.5.26" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.26.tgz", + "integrity": "sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", + "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", + "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", + "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/abbrev": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", + "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-class-fields": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/acorn-class-fields/-/acorn-class-fields-0.3.7.tgz", + "integrity": "sha512-jdUWSFce0fuADUljmExz4TWpPkxmRW/ZCPRqeeUzbGf0vFUcpQYbyq52l75qGd0oSwwtAepeL6hgb/naRgvcKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn-private-class-elements": "^0.2.7" + }, + "engines": { + "node": ">=4.8.2" + }, + "peerDependencies": { + "acorn": "^6 || ^7 || ^8" + } + }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, + "node_modules/acorn-private-class-elements": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/acorn-private-class-elements/-/acorn-private-class-elements-0.2.7.tgz", + "integrity": "sha512-+GZH2wOKNZOBI4OOPmzpo4cs6mW297sn6fgIk1dUI08jGjhAaEwvC39mN2gJAg2lmAQJ1rBkFqKWonL3Zz6PVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.8.2" + }, + "peerDependencies": { + "acorn": "^6.1.0 || ^7 || ^8" + } + }, + "node_modules/acorn-private-methods": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/acorn-private-methods/-/acorn-private-methods-0.3.3.tgz", + "integrity": "sha512-46oeEol3YFvLSah5m9hGMlNpxDBCEkdceJgf01AjqKYTK9r6HexKs2rgSbLK81pYjZZMonhftuUReGMlbbv05w==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn-private-class-elements": "^0.2.7" + }, + "engines": { + "node": ">=4.8.2" + }, + "peerDependencies": { + "acorn": "^6 || ^7 || ^8" + } + }, + "node_modules/acorn-stage3": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-stage3/-/acorn-stage3-4.0.0.tgz", + "integrity": "sha512-BR+LaADtA6GTB5prkNqWmlmCLYmkyW0whvSxdHhbupTaro2qBJ95fJDEiRLPUmiACGHPaYyeH9xmNJWdGfXRQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn-class-fields": "^0.3.7", + "acorn-private-methods": "^0.3.3", + "acorn-static-class-features": "^0.2.4" + }, + "engines": { + "node": ">=4.8.2" + }, + "peerDependencies": { + "acorn": "^7.4 || ^8" + } + }, + "node_modules/acorn-static-class-features": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/acorn-static-class-features/-/acorn-static-class-features-0.2.4.tgz", + "integrity": "sha512-5X4mpYq5J3pdndLmIB0+WtFd/mKWnNYpuTlTzj32wUu/PMmEGOiayQ5UrqgwdBNiaZBtDDh5kddpP7Yg2QaQYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn-private-class-elements": "^0.2.7" + }, + "engines": { + "node": ">=4.8.2" + }, + "peerDependencies": { + "acorn": "^6.1.0 || ^7 || ^8" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "devOptional": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/algoliasearch": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.40.1.tgz", + "integrity": "sha512-iUNxcXUNg9085TJx0HJLjqtDE0r1RZ0GOGrt8KNQqQT5ugu8lZsHuMUYW/e0lHhq6xBvmktU9Bw4CXP9VQeKrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.6.1", + "@algolia/client-abtesting": "5.40.1", + "@algolia/client-analytics": "5.40.1", + "@algolia/client-common": "5.40.1", + "@algolia/client-insights": "5.40.1", + "@algolia/client-personalization": "5.40.1", + "@algolia/client-query-suggestions": "5.40.1", + "@algolia/client-search": "5.40.1", + "@algolia/ingestion": "1.40.1", + "@algolia/monitoring": "1.40.1", + "@algolia/recommend": "5.40.1", + "@algolia/requester-browser-xhr": "5.40.1", + "@algolia/requester-fetch": "5.40.1", + "@algolia/requester-node-http": "5.40.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/anser": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/anser/-/anser-2.3.5.tgz", + "integrity": "sha512-vcZjxvvVoxTeR5XBNJB38oTu/7eDCZlwdz32N1eNgpyPF7j/Z7Idf+CUwQOkKKpJ7RJyjxgLHCM7vdIK0iCNMQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", + "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.0.0.tgz", + "integrity": "sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": "^18.20.0 || ^20.10.0 || >=22.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5.61.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.10", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.10.tgz", + "integrity": "sha512-2VIKvDx8Z1a9rTB2eCkdPE5nSe28XnA+qivGnWHoB40hMMt/h1hSz0960Zqsn6ZyxWXUie0EBdElKv8may20AA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/beasties": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.3.5.tgz", + "integrity": "sha512-NaWu+f4YrJxEttJSm16AzMIFtVldCvaJ68b1L098KpqXmxt9xOLtKoLkKxb8ekhOrLqEJAbvT6n6SEvB/sac7A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "css-select": "^6.0.0", + "css-what": "^7.0.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "htmlparser2": "^10.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.49", + "postcss-media-query-parser": "^0.2.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.3.tgz", + "integrity": "sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^5.0.0", + "fs-minipass": "^3.0.0", + "glob": "^13.0.0", + "lru-cache": "^11.1.0", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^13.0.0", + "unique-filename": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", + "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "path-scurry": "^2.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/ssri": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.0.tgz", + "integrity": "sha512-yizwGBpbCn4YomB2lzhZqrHLJoqFGXihNbib3ozhqF/cIp5ue+xSmOQrjNasEE62hFxsCcg/V/z23t4n8jMEng==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001760", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz", + "integrity": "sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dev": true, + "license": "ISC", + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-highlight/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cli-highlight/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-highlight/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/cli-highlight/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cli-highlight/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/cli-spinners": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.3.0.tgz", + "integrity": "sha512-/+40ljC3ONVnYIttjMWrlL51nItDAbBrq2upN8BPyvGU/2n5Oxw3tbNwORCaNuNqLJnxGqOfjUuhsv7l5Q4IsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.1.1.tgz", + "integrity": "sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^7.1.0", + "string-width": "^8.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", + "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", + "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-13.0.1.tgz", + "integrity": "sha512-J+YV3WfhY6W/Xf9h+J1znYuqTye2xkBUIGyTPWuBAT27qajBa5mR4f8WBmfDY3YjRftT2kqZZiLi1qf0H+UOFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-parent": "^6.0.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2", + "tinyglobby": "^0.2.12" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.47.0.tgz", + "integrity": "sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.47.0.tgz", + "integrity": "sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + } + }, + "node_modules/css-loader": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", + "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.27.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-select": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-6.0.0.tgz", + "integrity": "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^7.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "nth-check": "^2.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-7.0.0.tgz", + "integrity": "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz", + "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-defaults": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-2.0.2.tgz", + "integrity": "sha512-iOIzovWfsUHU91L5i8bJce3NYK5JXeAwH50Jh6+ARUdLiiGlYWfGw6UkzsYqaXZH/hjE/eCd/PlfM/qqyK0AMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dotenv": "^8.2.0" + } + }, + "node_modules/dotenv-webpack": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-8.1.1.tgz", + "integrity": "sha512-+TY/AJ2k9bU2EML3mxgLmaAvEcqs1Wbv6deCIUSI3eW3Xeo8LBQumYib6puyaSwbjC9JCzg/y5Pwjd/lePX04w==", + "dev": true, + "license": "MIT", + "dependencies": { + "dotenv-defaults": "^2.0.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "webpack": "^4 || ^5" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.4", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", + "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.0.tgz", + "integrity": "sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/envinfo": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.21.0.tgz", + "integrity": "sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.26.0.tgz", + "integrity": "sha512-3Hq7jri+tRrVWha+ZeIVhl4qJRha/XjRNSopvTsOaCvfPHrflTYTcUFcEjMKdxofsXXsdc4zjg5NOTnL4Gl57Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.26.0", + "@esbuild/android-arm": "0.26.0", + "@esbuild/android-arm64": "0.26.0", + "@esbuild/android-x64": "0.26.0", + "@esbuild/darwin-arm64": "0.26.0", + "@esbuild/darwin-x64": "0.26.0", + "@esbuild/freebsd-arm64": "0.26.0", + "@esbuild/freebsd-x64": "0.26.0", + "@esbuild/linux-arm": "0.26.0", + "@esbuild/linux-arm64": "0.26.0", + "@esbuild/linux-ia32": "0.26.0", + "@esbuild/linux-loong64": "0.26.0", + "@esbuild/linux-mips64el": "0.26.0", + "@esbuild/linux-ppc64": "0.26.0", + "@esbuild/linux-riscv64": "0.26.0", + "@esbuild/linux-s390x": "0.26.0", + "@esbuild/linux-x64": "0.26.0", + "@esbuild/netbsd-arm64": "0.26.0", + "@esbuild/netbsd-x64": "0.26.0", + "@esbuild/openbsd-arm64": "0.26.0", + "@esbuild/openbsd-x64": "0.26.0", + "@esbuild/openharmony-arm64": "0.26.0", + "@esbuild/sunos-x64": "0.26.0", + "@esbuild/win32-arm64": "0.26.0", + "@esbuild/win32-ia32": "0.26.0", + "@esbuild/win32-x64": "0.26.0" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.26.0.tgz", + "integrity": "sha512-9rZuermDo9ZbWvKBv/vDRaRciCpR4L3rEbZLDs5kDq3TrCHRQZaQipQeV9wK/btpLBzNUBujTrd1uorDxbL/GA==", + "dev": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "devOptional": true, + "license": "MIT", + "peer": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", + "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "devOptional": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.1.0.tgz", + "integrity": "sha512-mpafl89VFPJmhnJ1ssH+8wmM2b50n+Rew5x42NeI2U78aRWgtkEtGmctp7iT16UjquJTjorEmIfESj3DxdW84Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "chalk": "^4.1.2", + "chokidar": "^4.0.1", + "cosmiconfig": "^8.2.0", + "deepmerge": "^4.2.2", + "fs-extra": "^10.0.0", + "memfs": "^3.4.1", + "minimatch": "^3.0.4", + "node-abort-controller": "^3.0.1", + "schema-utils": "^3.1.1", + "semver": "^7.3.5", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">=14.21.3" + }, + "peerDependencies": { + "typescript": ">3.6.0", + "webpack": "^5.11.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-monkey": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz", + "integrity": "sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==", + "dev": true, + "license": "Unlicense" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "devOptional": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gaxios": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.3.tgz", + "integrity": "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==", + "license": "Apache-2.0", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "node-fetch": "^3.3.2", + "rimraf": "^5.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/gcp-metadata": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-8.1.2.tgz", + "integrity": "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==", + "license": "Apache-2.0", + "dependencies": { + "gaxios": "^7.0.0", + "google-logging-utils": "^1.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regex.js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/glob/node_modules/minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/google-auth-library": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.5.0.tgz", + "integrity": "sha512-7ABviyMOlX5hIVD60YOfHw4/CxOfBhyduaYB+wbFWCWoni4N7SLcV46hrVRktuBbZjFC9ONyqamZITN7q3n32w==", + "license": "Apache-2.0", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^7.0.0", + "gcp-metadata": "^8.0.0", + "google-logging-utils": "^1.0.0", + "gtoken": "^8.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/google-logging-utils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz", + "integrity": "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/gtoken": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-8.0.0.tgz", + "integrity": "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==", + "license": "MIT", + "dependencies": { + "gaxios": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true, + "license": "MIT" + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/hosted-git-info": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", + "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^11.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", + "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.1", + "entities": "^6.0.0" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-middleware": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.5.tgz", + "integrity": "sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.15", + "debug": "^4.3.6", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.3", + "is-plain-object": "^5.0.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ignore-walk": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", + "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^10.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", + "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", + "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-network-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz", + "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/jose": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", + "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", + "devOptional": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "license": "MIT", + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/launch-editor": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz", + "integrity": "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" + } + }, + "node_modules/less": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/less/-/less-4.4.2.tgz", + "integrity": "sha512-j1n1IuTX1VQjIy3tT7cyGbX7nvQOsFLoIqobZv4ttI5axP923gA44zUj6miiA6R5Aoms4sEGVIIcucXUbRI14g==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=14" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-12.3.0.tgz", + "integrity": "sha512-0M6+uYulvYIWs52y0LqN4+QM9TqWAohYSNTo4htE8Z7Cn3G/qQMEmktfHmyJT23k+20kU9zHH2wrfFXkxNLtVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "license": "ISC", + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz", + "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cli-truncate": "^5.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lmdb": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.4.3.tgz", + "integrity": "sha512-GWV1kVi6uhrXWqe+3NXWO73OYe8fto6q8JMo0HOpk1vf8nEyFWgo4CSNJpIFzsOxOrysVUlcO48qRbQfmKd1gA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "msgpackr": "^1.11.2", + "node-addon-api": "^6.1.0", + "node-gyp-build-optional-packages": "5.2.2", + "ordered-binary": "^1.5.3", + "weak-lru-cache": "^1.2.2" + }, + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "3.4.3", + "@lmdb/lmdb-darwin-x64": "3.4.3", + "@lmdb/lmdb-linux-arm": "3.4.3", + "@lmdb/lmdb-linux-arm64": "3.4.3", + "@lmdb/lmdb-linux-x64": "3.4.3", + "@lmdb/lmdb-win32-arm64": "3.4.3", + "@lmdb/lmdb-win32-x64": "3.4.3" + } + }, + "node_modules/lmdb/node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/loader-runner": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/loader-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", + "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/make-fetch-happen": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.3.tgz", + "integrity": "sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^6.0.0", + "promise-retry": "^2.0.1", + "ssri": "^13.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/make-fetch-happen/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/make-fetch-happen/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.0.tgz", + "integrity": "sha512-yizwGBpbCn4YomB2lzhZqrHLJoqFGXihNbib3ozhqF/cIp5ue+xSmOQrjNasEE62hFxsCcg/V/z23t4n8jMEng==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "devOptional": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "devOptional": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz", + "integrity": "sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-5.0.0.tgz", + "integrity": "sha512-fiCdUALipqgPWrOVTz9fw0XhcazULXOSU6ie40DDbX1F49p1dBrSRBuswndTx1x3vEb/g0FT7vC4c4C2u/mh3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^3.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/msgpackr": { + "version": "1.11.8", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.8.tgz", + "integrity": "sha512-bC4UGzHhVvgDNS7kn9tV8fAucIYUBuGojcaLiz7v+P63Lmtm0Xeji8B/8tYKddALXxJLpwIeBmUN3u64C4YkRA==", + "dev": true, + "license": "MIT", + "optional": true, + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", + "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.2.2" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" + } + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-forge": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz", + "integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.1.0.tgz", + "integrity": "sha512-W+RYA8jBnhSr2vrTtlPYPc1K+CSjGpVDRZxcqJcERZ8ND3A1ThWPHRwctTx3qC3oW99jt726jhdz3Y6ky87J4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^15.0.0", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.2", + "tinyglobby": "^0.2.12", + "which": "^6.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", + "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^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" + } + }, + "node_modules/node-gyp-build-optional-packages/node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/node-gyp/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", + "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", + "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^4.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", + "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-install-checks": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-8.0.0.tgz", + "integrity": "sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-package-arg": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.1.tgz", + "integrity": "sha512-6zqls5xFvJbgFjB1B2U6yITtyGBjDBORB7suI4zA4T/sZ1OmkMFlaQSNB/4K0LtXNA1t4OprAFxPisadK5O2ag==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^9.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-packlist": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.3.tgz", + "integrity": "sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg==", + "dev": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-packlist/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz", + "integrity": "sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "npm-package-arg": "^13.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", + "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-19.1.1.tgz", + "integrity": "sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^4.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^15.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^13.0.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/ora": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-9.0.0.tgz", + "integrity": "sha512-m0pg2zscbYgWbqRR6ABga5c3sZdEon7bSgjnlXC64kxtxLOyjRcbbUkLj7HFyy/FTD+P2xdBWu8snGhYI0jc4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.6.2", + "cli-cursor": "^5.0.0", + "cli-spinners": "^3.2.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.1.0", + "log-symbols": "^7.0.1", + "stdin-discarder": "^0.2.2", + "string-width": "^8.1.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/string-width": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", + "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ordered-binary": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.0.tgz", + "integrity": "sha512-IQh2aMfMIDbPjI/8a3Edr+PiOpcsB7yo8NdW7aHWVaoR/pcDldunMvnnwbk/auPGqmKeAdxtZl7MHX/QmPwhvQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/pacote": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.3.tgz", + "integrity": "sha512-itdFlanxO0nmQv4ORsvA9K1wv40IPfB9OmWqfaJWvoJ30VKyHsqNgDVeG+TVhI7Gk7XW8slUy7cA9r6dF5qohw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^10.0.0", + "cacache": "^20.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^13.0.0", + "npm-packlist": "^10.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^4.0.0", + "ssri": "^12.0.0", + "tar": "^7.4.3" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-8.0.0.tgz", + "integrity": "sha512-wzh11mj8KKkno1pZEu+l2EVeWsuKDfR5KNWZOTsslfUX8lPDZx77m9T0kIoAVkFtD1nx6YF8oh4BnPHvxMtNMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0", + "parse5": "^8.0.0", + "parse5-sax-parser": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", + "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse5-sax-parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-8.0.0.tgz", + "integrity": "sha512-/dQ8UzHZwnrzs3EvDj6IkKrD/jIZyTlB+8XrHJvcjNgRdmWruNdN9i9RK/JtxakmlUdPwKubKPTCqvbTgzGhrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parse5-sax-parser/node_modules/parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", + "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/piscina": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.1.3.tgz", + "integrity": "sha512-0u3N7H4+hbr40KjuVn2uNhOcthu/9usKhnw5vT3J7ply79v3D3M8naI00el9Klcy16x557VsEkkUQaHCWFXC/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.x" + }, + "optionalDependencies": { + "@napi-rs/nice": "^1.0.4" + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-16.1.1.tgz", + "integrity": "sha512-2xVS1NCZAfjtVdvXiyegxzJ447GyqCeEI5V7ApgQVOWnros1p5lGNovJNapwPpMombyFBfqDwt7AD3n2l0KOfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/postcss-loader": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.2.0.tgz", + "integrity": "sha512-tHX+RkpsXVcc7st4dSdDGliI+r4aAQDuv+v3vFYHixb6YgjreG5AG4SEB0kDK8u2s6htqEEpKlkhSBUTvWKYnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^9.0.0", + "jiti": "^2.5.1", + "semver": "^7.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/postcss-loader/node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/postcss-loader/node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/proc-log": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/promise-retry/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "devOptional": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/raw-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", + "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/raw-loader/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/raw-loader/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/raw-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/raw-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/raw-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-cache/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz", + "integrity": "sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/regexpu-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/rimraf/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rolldown": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-beta.47.tgz", + "integrity": "sha512-Mid74GckX1OeFAOYz9KuXeWYhq3xkXbMziYIC+ULVdUzPTG9y70OBSBQDQn9hQP8u/AfhuYw1R0BSg15nBI4Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.96.0", + "@rolldown/pluginutils": "1.0.0-beta.47" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-beta.47", + "@rolldown/binding-darwin-arm64": "1.0.0-beta.47", + "@rolldown/binding-darwin-x64": "1.0.0-beta.47", + "@rolldown/binding-freebsd-x64": "1.0.0-beta.47", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.47", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.47", + "@rolldown/binding-linux-arm64-musl": "1.0.0-beta.47", + "@rolldown/binding-linux-x64-gnu": "1.0.0-beta.47", + "@rolldown/binding-linux-x64-musl": "1.0.0-beta.47", + "@rolldown/binding-openharmony-arm64": "1.0.0-beta.47", + "@rolldown/binding-wasm32-wasi": "1.0.0-beta.47", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.47", + "@rolldown/binding-win32-ia32-msvc": "1.0.0-beta.47", + "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.47" + } + }, + "node_modules/rollup": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.5.tgz", + "integrity": "sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.53.5", + "@rollup/rollup-android-arm64": "4.53.5", + "@rollup/rollup-darwin-arm64": "4.53.5", + "@rollup/rollup-darwin-x64": "4.53.5", + "@rollup/rollup-freebsd-arm64": "4.53.5", + "@rollup/rollup-freebsd-x64": "4.53.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.53.5", + "@rollup/rollup-linux-arm-musleabihf": "4.53.5", + "@rollup/rollup-linux-arm64-gnu": "4.53.5", + "@rollup/rollup-linux-arm64-musl": "4.53.5", + "@rollup/rollup-linux-loong64-gnu": "4.53.5", + "@rollup/rollup-linux-ppc64-gnu": "4.53.5", + "@rollup/rollup-linux-riscv64-gnu": "4.53.5", + "@rollup/rollup-linux-riscv64-musl": "4.53.5", + "@rollup/rollup-linux-s390x-gnu": "4.53.5", + "@rollup/rollup-linux-x64-gnu": "4.53.5", + "@rollup/rollup-linux-x64-musl": "4.53.5", + "@rollup/rollup-openharmony-arm64": "4.53.5", + "@rollup/rollup-win32-arm64-msvc": "4.53.5", + "@rollup/rollup-win32-ia32-msvc": "4.53.5", + "@rollup/rollup-win32-x64-gnu": "4.53.5", + "@rollup/rollup-win32-x64-msvc": "4.53.5", + "fsevents": "~2.3.2" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/router/node_modules/path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "devOptional": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.93.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.2.tgz", + "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass-loader": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.5.tgz", + "integrity": "sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", + "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true, + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sigstore": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-4.0.0.tgz", + "integrity": "sha512-Gw/FgHtrLM9WP8P5lLcSGh9OQcrTruWCELAiS48ik1QbL0cH+dfjomiRTUE9zzz+D1N6rOLkwXUvVmXZAsNE0Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0", + "@sigstore/sign": "^4.0.0", + "@sigstore/tuf": "^4.0.0", + "@sigstore/verify": "^3.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", + "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "license": "MIT", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/ssri": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", + "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true, + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", + "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/tailwindcss/node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tailwindcss/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tailwindcss/node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/tailwindcss/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tar": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", + "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/terser": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", + "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.16", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", + "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/thingies": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", + "integrity": "sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "^2" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tree-dump": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/ts-loader": { + "version": "9.5.4", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.4.tgz", + "integrity": "sha512-nCz0rEwunlTZiy6rXFByQU1kVVpCIgUpc/psFiKVrUwrizdnIbRFu8w7bxhUF0X613DYwT4XzrZHpVyMe758hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "peer": true + }, + "node_modules/tuf-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-4.0.0.tgz", + "integrity": "sha512-Lq7ieeGvXDXwpoSmOSgLWVdsGGV9J4a77oDTAPe/Ltrqnnm/ETaRlBAQTH5JatEh8KXuE6sddf9qAv1Q2282Hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "4.0.0", + "debug": "^4.4.1", + "make-fetch-happen": "^15.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true, + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz", + "integrity": "sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-5.0.0.tgz", + "integrity": "sha512-2RaJTAvAb4owyjllTfXzFClJ7WsGxlykkPvCr9pA//LD9goVq+m4PPAeBgNodGZ7nSrntT/auWpJ6Y5IFXcfjg==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/unique-slug": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-6.0.0.tgz", + "integrity": "sha512-4Lup7Ezn8W3d52/xBhZBVdx323ckxa7DEvd9kPQHppTkLoJXw6ltrBCyj5pnrxj0qKDxYMJ56CoxNuFCscdTiw==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz", + "integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.2.tgz", + "integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "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" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/vue-loader": { + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.4.2.tgz", + "integrity": "sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "watchpack": "^2.4.0" + }, + "peerDependencies": { + "webpack": "^4.1.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "@vue/compiler-sfc": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/watchpack": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/webpack": { + "version": "5.104.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz", + "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.4", + "es-module-lexer": "^2.0.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.3.1", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.16", + "watchpack": "^2.4.4", + "webpack-sources": "^3.3.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", + "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "commander": "^7.2.0", + "debounce": "^1.2.1", + "escape-string-regexp": "^4.0.0", + "gzip-size": "^6.0.0", + "html-escaper": "^2.0.2", + "opener": "^1.5.2", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-chain": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.5.1.tgz", + "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-chain/node_modules/deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-cli": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", + "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.6.1", + "@webpack-cli/configtest": "^3.0.1", + "@webpack-cli/info": "^3.0.1", + "@webpack-cli/serve": "^3.0.1", + "colorette": "^2.0.14", + "commander": "^12.1.0", + "cross-spawn": "^7.0.3", + "envinfo": "^7.14.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^6.0.1" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.82.0" + }, + "peerDependenciesMeta": { + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", + "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^4.43.1", + "mime-types": "^3.0.1", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware/node_modules/memfs": { + "version": "4.51.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.51.1.tgz", + "integrity": "sha512-Eyt3XrufitN2ZL9c/uIRMyDwXanLI88h/L3MoWqNY747ha3dMR9dWqp8cRT5ntjZ0U1TNuq4U91ZXK0sMBjYOQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/webpack-dev-server": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", + "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/express-serve-static-core": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "express": "^4.21.2", + "graceful-fs": "^4.2.6", + "http-proxy-middleware": "^2.0.9", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", + "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", + "dev": true, + "license": "MIT" + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^7.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz", + "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", + "devOptional": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.0", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.0.tgz", + "integrity": "sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ==", + "devOptional": true, + "license": "ISC", + "peerDependencies": { + "zod": "^3.25 || ^4" + } + }, + "node_modules/zone.js": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.16.0.tgz", + "integrity": "sha512-LqLPpIQANebrlxY6jKcYKdgN5DTXyyHAKnnWWjE5pPfEQ4n7j5zn7mOEEpwNZVKGqx3kKKmvplEmoBrvpgROTA==", + "license": "MIT", + "peer": true + } + } +} diff --git a/samples/client/nativescript/package.json b/samples/client/nativescript/package.json new file mode 100644 index 00000000..5efc09d2 --- /dev/null +++ b/samples/client/nativescript/package.json @@ -0,0 +1,53 @@ +{ + "name": "nativescript", + "main": "./src/main.ts", + "version": "1.0.0", + "private": true, + "dependencies": { + "@a2a-js/sdk": "^0.3.4", + "@a2ui/lit": "file:../../../renderers/lit", + "@angular/animations": "^21.0.0", + "@angular/common": "^21.0.0", + "@angular/core": "^21.0.0", + "@angular/forms": "^21.0.0", + "@angular/platform-browser": "^21.0.0", + "@angular/platform-browser-dynamic": "^21.0.0", + "@angular/router": "^21.0.0", + "@google/genai": "^1.22.0", + "@nativescript/angular": "21.0.0-rc.2", + "@nativescript/core": "^9.0.0", + "rxjs": "~7.8.0", + "zone.js": "~0.16.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^21.0.0", + "@angular/build": "^21.0.0", + "@angular/cli": "^21.0.0", + "@angular/compiler": "^21.0.0", + "@angular/compiler-cli": "^21.0.0", + "@nativescript/ios": "9.0.2", + "@nativescript/tailwind": "^2.1.0", + "@nativescript/types": "~9.0.0", + "@nativescript/webpack": "~5.0.28", + "@ngtools/webpack": "^21.0.0", + "tailwindcss": "~3.4.0", + "typescript": "~5.9.2" + }, + "overrides": { + "@angular-devkit/build-angular": "^21.0.0", + "@angular/core": "^21.0.0", + "@angular/animations": "^21.0.0", + "@angular/build": "^21.0.0", + "@angular/cli": "^21.0.0", + "@angular/compiler": "^21.0.0", + "@angular/compiler-cli": "^21.0.0", + "@angular/common": "^21.0.0", + "@angular/forms": "^21.0.0", + "@angular/platform-browser": "^21.0.0", + "@angular/platform-browser-dynamic": "^21.0.0", + "@angular/router": "^21.0.0", + "@nativescript/angular": "21.0.0-rc.2", + "@nativescript/core": "^9.0.0", + "rxjs": "~7.8.0" + } +} diff --git a/samples/client/nativescript/references.d.ts b/samples/client/nativescript/references.d.ts new file mode 100644 index 00000000..d7433268 --- /dev/null +++ b/samples/client/nativescript/references.d.ts @@ -0,0 +1 @@ +/// diff --git a/samples/client/nativescript/src/app.css b/samples/client/nativescript/src/app.css new file mode 100644 index 00000000..b5c61c95 --- /dev/null +++ b/samples/client/nativescript/src/app.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/samples/client/nativescript/src/app/app.html b/samples/client/nativescript/src/app/app.html new file mode 100644 index 00000000..6527bcf8 --- /dev/null +++ b/samples/client/nativescript/src/app/app.html @@ -0,0 +1,6 @@ + + + + + + diff --git a/samples/client/nativescript/src/app/app.ts b/samples/client/nativescript/src/app/app.ts new file mode 100644 index 00000000..7e094d1a --- /dev/null +++ b/samples/client/nativescript/src/app/app.ts @@ -0,0 +1,23 @@ +import { Component, NO_ERRORS_SCHEMA } from '@angular/core'; +import { PageRouterOutlet } from '@nativescript/angular'; +import { Renderer, Theme } from '@a2ui/nativescript'; +import { Types } from '@a2ui/lit/0.8'; + +@Component({ + selector: 'ns-app', + templateUrl: './app.html', + imports: [PageRouterOutlet, Renderer], + schemas: [NO_ERRORS_SCHEMA], +}) +export class App { + surfaceId = 'main' as Types.SurfaceID; + component: Types.AnyComponentNode = { + type: 'button', + id: 'btn1', + text: 'Hello from A2UI NativeScript!', + action: { + type: 'click', + handler: 'console.log("Clicked!")', + }, + } as any; // Cast to any for now as we might not have full types setup +} diff --git a/samples/client/nativescript/src/app/catalog.ts b/samples/client/nativescript/src/app/catalog.ts new file mode 100644 index 00000000..240804f2 --- /dev/null +++ b/samples/client/nativescript/src/app/catalog.ts @@ -0,0 +1,14 @@ +import { inputBinding } from '@angular/core'; +import { Catalog, CatalogEntry } from '@a2ui/nativescript'; +import { Types } from '@a2ui/lit/0.8'; + +export const NativeScriptCatalog: Catalog = { + [Types.ComponentType.BUTTON]: { + type: async () => (await import('./components/button.component')).ButtonComponent, + bindings: (component) => [ + inputBinding('component', () => component), + inputBinding('weight', () => component.weight ?? 'initial'), + ], + }, + // Add other components here +}; diff --git a/samples/client/nativescript/src/app/components/button.component.ts b/samples/client/nativescript/src/app/components/button.component.ts new file mode 100644 index 00000000..6c99a63e --- /dev/null +++ b/samples/client/nativescript/src/app/components/button.component.ts @@ -0,0 +1,21 @@ +import { Component, NO_ERRORS_SCHEMA } from '@angular/core'; +import { Types } from '@a2ui/lit/0.8'; +import { DynamicComponent } from '@a2ui/nativescript'; +import { NativeScriptCommonModule } from '@nativescript/angular'; + +@Component({ + selector: 'ns-button', + template: ` + + `, + imports: [NativeScriptCommonModule], + schemas: [NO_ERRORS_SCHEMA] +}) +export class ButtonComponent extends DynamicComponent { + onTap() { + console.log('Button tapped:', this.component().action); + if (this.component().action) { + this.sendAction(this.component().action!); + } + } +} diff --git a/samples/client/nativescript/src/main.ts b/samples/client/nativescript/src/main.ts new file mode 100644 index 00000000..dd22aaef --- /dev/null +++ b/samples/client/nativescript/src/main.ts @@ -0,0 +1,25 @@ +import { + bootstrapApplication, + provideNativeScriptHttpClient, + provideNativeScriptRouter, + runNativeScriptAngularApp, +} from '@nativescript/angular'; +import { provideZonelessChangeDetection } from '@angular/core'; +import { withInterceptorsFromDi } from '@angular/common/http'; +// import { routes } from './app/app.routes'; +import { App } from './app/app'; +import { Catalog } from '@a2ui/nativescript'; +import { NativeScriptCatalog } from './app/catalog'; + +runNativeScriptAngularApp({ + appModuleBootstrap: () => { + return bootstrapApplication(App, { + providers: [ + provideNativeScriptHttpClient(withInterceptorsFromDi()), + // provideNativeScriptRouter(routes), + provideZonelessChangeDetection(), + { provide: Catalog, useValue: NativeScriptCatalog }, + ], + }); + }, +}); diff --git a/samples/client/nativescript/src/polyfills.ts b/samples/client/nativescript/src/polyfills.ts new file mode 100644 index 00000000..5e94ad85 --- /dev/null +++ b/samples/client/nativescript/src/polyfills.ts @@ -0,0 +1,8 @@ +/** + * NativeScript Polyfills + */ + +// Install @nativescript/core polyfills (XHR, setTimeout, requestAnimationFrame) +import '@nativescript/core/globals'; +// Install @nativescript/angular specific polyfills +import '@nativescript/angular/polyfills'; \ No newline at end of file diff --git a/samples/client/nativescript/tailwind.config.js b/samples/client/nativescript/tailwind.config.js new file mode 100644 index 00000000..a6183d24 --- /dev/null +++ b/samples/client/nativescript/tailwind.config.js @@ -0,0 +1,13 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ['./src/**/*.{css,xml,html,vue,svelte,ts,tsx}'], + // use the .ns-dark class to control dark mode (applied by NativeScript) - since 'media' (default) is not supported. + darkMode: ['class', '.ns-dark'], + theme: { + extend: {}, + }, + plugins: [], + corePlugins: { + preflight: false, // disables browser-specific resets + }, +} diff --git a/samples/client/nativescript/tsconfig.json b/samples/client/nativescript/tsconfig.json new file mode 100644 index 00000000..8798be96 --- /dev/null +++ b/samples/client/nativescript/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "module": "esnext", + "target": "ES2020", + "moduleResolution": "bundler", + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "noEmitHelpers": true, + "noEmitOnError": true, + "skipLibCheck": true, + "lib": ["ESNext", "dom"], + "baseUrl": ".", + "paths": { + "~/*": ["src/*"], + "@/*": ["src/*"], + "@a2ui/nativescript": ["../../../renderers/nativescript/src/public-api.ts"], + "@a2ui/lit": ["../../../renderers/lit/src/index.ts"], + "@a2ui/lit/*": ["../../../renderers/lit/src/*"] + } + }, + "include": ["src/tests/**/*.ts", "src/**/*.ios.ts", "src/**/*.android.ts"], + "files": ["./src/main.ts", "./references.d.ts", "./src/polyfills.ts"], + "exclude": ["node_modules", "platforms", "e2e"] +} diff --git a/samples/client/nativescript/webpack.config.js b/samples/client/nativescript/webpack.config.js new file mode 100644 index 00000000..45573416 --- /dev/null +++ b/samples/client/nativescript/webpack.config.js @@ -0,0 +1,10 @@ +const webpack = require("@nativescript/webpack"); + +module.exports = (env) => { + webpack.init(env); + + // Learn how to customize: + // https://docs.nativescript.org/webpack + + return webpack.resolveConfig(); +}; From 72b5fa7c25ed002a486f6dd10e63790658060b16 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Wed, 31 Dec 2025 22:32:58 -0800 Subject: [PATCH 2/9] feat: A2UI for NativeScript surface demo --- .../nativescript/src/lib/data/processor.ts | 62 +- .../src/lib/rendering/dynamic-component.ts | 92 ++- renderers/nativescript/src/public-api.ts | 1 + samples/client/angular/package-lock.json | 45 +- .../client/nativescript/src/a2ui-lit-types.ts | 577 ++++++++++++++++++ samples/client/nativescript/src/app.css | 170 ++++++ samples/client/nativescript/src/app/app.ts | 198 +++++- .../client/nativescript/src/app/catalog.ts | 79 ++- .../src/app/components/button.component.ts | 70 ++- .../src/app/components/canvas.component.ts | 84 +++ .../src/app/components/card.component.ts | 141 +++++ .../app/components/chat-history.component.ts | 103 ++++ .../app/components/chat-input.component.ts | 104 ++++ .../src/app/components/column.component.ts | 42 ++ .../src/app/components/divider.component.ts | 36 ++ .../src/app/components/image.component.ts | 49 ++ .../src/app/components/list.component.ts | 111 ++++ .../components/message-bubble.component.ts | 169 +++++ .../src/app/components/row.component.ts | 56 ++ .../src/app/components/spacer.component.ts | 35 ++ .../src/app/components/text.component.ts | 69 +++ .../src/app/components/textfield.component.ts | 118 ++++ .../nativescript/src/app/demo-surfaces.ts | 359 +++++++++++ .../src/app/services/a2a.service.ts | 166 +++++ .../src/app/services/chat.service.ts | 193 ++++++ samples/client/nativescript/src/app/theme.ts | 119 ++++ samples/client/nativescript/src/main.ts | 13 +- samples/client/nativescript/tsconfig.json | 9 +- samples/client/nativescript/webpack.config.js | 21 + 29 files changed, 3222 insertions(+), 69 deletions(-) create mode 100644 samples/client/nativescript/src/a2ui-lit-types.ts create mode 100644 samples/client/nativescript/src/app/components/canvas.component.ts create mode 100644 samples/client/nativescript/src/app/components/card.component.ts create mode 100644 samples/client/nativescript/src/app/components/chat-history.component.ts create mode 100644 samples/client/nativescript/src/app/components/chat-input.component.ts create mode 100644 samples/client/nativescript/src/app/components/column.component.ts create mode 100644 samples/client/nativescript/src/app/components/divider.component.ts create mode 100644 samples/client/nativescript/src/app/components/image.component.ts create mode 100644 samples/client/nativescript/src/app/components/list.component.ts create mode 100644 samples/client/nativescript/src/app/components/message-bubble.component.ts create mode 100644 samples/client/nativescript/src/app/components/row.component.ts create mode 100644 samples/client/nativescript/src/app/components/spacer.component.ts create mode 100644 samples/client/nativescript/src/app/components/text.component.ts create mode 100644 samples/client/nativescript/src/app/components/textfield.component.ts create mode 100644 samples/client/nativescript/src/app/demo-surfaces.ts create mode 100644 samples/client/nativescript/src/app/services/a2a.service.ts create mode 100644 samples/client/nativescript/src/app/services/chat.service.ts create mode 100644 samples/client/nativescript/src/app/theme.ts diff --git a/renderers/nativescript/src/lib/data/processor.ts b/renderers/nativescript/src/lib/data/processor.ts index e95bda27..dbf1beef 100644 --- a/renderers/nativescript/src/lib/data/processor.ts +++ b/renderers/nativescript/src/lib/data/processor.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Data, Types } from '@a2ui/lit/0.8'; +import { Types } from '@a2ui/lit/0.8'; import { Injectable } from '@angular/core'; import { firstValueFrom, Subject } from 'rxjs'; @@ -23,20 +23,66 @@ export interface DispatchedEvent { completion: Subject; } +/** + * A simplified message processor for NativeScript that handles + * data model operations and event dispatching. + */ @Injectable({ providedIn: 'root' }) -export class MessageProcessor extends Data.A2uiMessageProcessor { +export class MessageProcessor implements Types.MessageProcessor { readonly events = new Subject(); - override setData( + #surfaces: Map = new Map(); + + getSurfaces(): ReadonlyMap { + return this.#surfaces; + } + + clearSurfaces(): void { + this.#surfaces.clear(); + } + + processMessages(messages: Types.ServerToClientMessage[]): void { + // Process incoming messages and update surfaces + for (const message of messages) { + if (message.beginRendering) { + const surfaceId = message.beginRendering.surfaceId; + if (!this.#surfaces.has(surfaceId)) { + this.#surfaces.set(surfaceId, { + rootComponentId: message.beginRendering.root, + componentTree: null, + dataModel: new Map(), + components: new Map(), + styles: message.beginRendering.styles ?? {}, + }); + } + } + // Handle other message types as needed + } + } + + getData( node: Types.AnyComponentNode, relativePath: string, + surfaceId?: string, + ): Types.DataValue | null { + // For now, return null - implement data binding as needed + return null; + } + + setData( + node: Types.AnyComponentNode | null, + relativePath: string, value: Types.DataValue, surfaceId?: Types.SurfaceID | null, - ) { - // Override setData to convert from optional inputs (which can be null) - // to undefined so that this correctly falls back to the default value for - // surfaceId. - return super.setData(node, relativePath, value, surfaceId ?? undefined); + ): void { + // Implement data setting as needed + } + + resolvePath(path: string, dataContextPath?: string): string { + if (!dataContextPath || path.startsWith('/')) { + return path; + } + return `${dataContextPath}/${path}`; } dispatch(message: Types.A2UIClientEventMessage): Promise { diff --git a/renderers/nativescript/src/lib/rendering/dynamic-component.ts b/renderers/nativescript/src/lib/rendering/dynamic-component.ts index af8a3ab2..8ab3d14f 100644 --- a/renderers/nativescript/src/lib/rendering/dynamic-component.ts +++ b/renderers/nativescript/src/lib/rendering/dynamic-component.ts @@ -14,26 +14,41 @@ * limitations under the License. */ -import { Types } from '@a2ui/lit/0.8'; -import { Directive, inject, input } from '@angular/core'; +import { Types, Primitives } from '@a2ui/lit/0.8'; +import { Directive, inject, input, Input, computed } from '@angular/core'; import { MessageProcessor } from '../data'; import { Theme } from './theming'; +let idCounter = 0; + @Directive() export abstract class DynamicComponent { - protected readonly processor = inject(MessageProcessor); - protected readonly theme = inject(Theme); + protected readonly processor = inject(MessageProcessor, { optional: true }); + protected readonly theme = inject(Theme, { optional: true }); - readonly surfaceId = input.required(); - readonly component = input.required(); - readonly weight = input.required(); + readonly surfaceId = input(null); + readonly component = input(null); + readonly weight = input('initial'); + + // Alternative input for simpler usage + @Input() node: T | null = null; + + // Helper to get the node from either input + protected get currentNode(): T | null { + return this.node ?? this.component(); + } protected sendAction(action: Types.Action): Promise { - const component = this.component(); + const component = this.currentNode; + if (!component) { + console.warn('No component/node available for action'); + return Promise.resolve([]); + } + const surfaceId = this.surfaceId() ?? undefined; const context: Record = {}; - if (action.context) { + if (action.context && this.processor) { for (const item of action.context) { if (item.value.literalBoolean) { context[item.key] = item.value.literalBoolean; @@ -42,18 +57,59 @@ export abstract class DynamicComponent=18" }, @@ -1857,6 +1869,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -2655,6 +2668,7 @@ "integrity": "sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@inquirer/checkbox": "^4.3.0", "@inquirer/confirm": "^5.1.19", @@ -3088,6 +3102,7 @@ "integrity": "sha512-D8h5KXY2vHFW8zTuxn2vuZGN0HGrQ5No6LkHwlEA9trVgNdPL3TF1dSqKA7Dny6BbBYKSW/rOBDXdC8KJAjUCg==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "ajv": "^8.17.1", "ajv-formats": "^3.0.1", @@ -4966,7 +4981,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@tufjs/canonical-json": { "version": "2.0.0", @@ -5161,6 +5177,7 @@ "integrity": "sha512-0l6cjgF0XnihUpndDhk+nyD3exio3iKaYROSgvh/qSevPXax3L8p5DBRFjbvalnwatGgHEQn2R88y2fA3g4irg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~6.21.0" } @@ -5934,6 +5951,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -6204,6 +6222,7 @@ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.1.tgz", "integrity": "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==", "license": "MIT", + "peer": true, "dependencies": { "@kurkle/color": "^0.3.0" }, @@ -7542,6 +7561,7 @@ "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" @@ -7871,6 +7891,7 @@ "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", + "peer": true, "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", @@ -9286,7 +9307,8 @@ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.9.0.tgz", "integrity": "sha512-OMUvF1iI6+gSRYOhMrH4QYothVLN9C3EJ6wm4g7zLJlnaTl8zbaPOr0bTw70l7QxkoM7sVFOWo83u9B2Fe2Zng==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/jose": { "version": "6.1.3", @@ -9524,6 +9546,7 @@ "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", @@ -9898,6 +9921,7 @@ "integrity": "sha512-j1n1IuTX1VQjIy3tT7cyGbX7nvQOsFLoIqobZv4ttI5axP923gA44zUj6miiA6R5Aoms4sEGVIIcucXUbRI14g==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -9996,6 +10020,7 @@ "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cli-truncate": "^5.0.0", "colorette": "^2.0.20", @@ -10887,6 +10912,7 @@ "integrity": "sha512-2lMGkmS91FyP+p/Tzmu49hY+p1PDgHBNM+Fce8yrzZo8/EbybNPBYfJnwFfl0lwGmqpYLevH2oh12+ikKCLv9g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.3.0", "@rollup/plugin-json": "^6.1.0", @@ -12382,6 +12408,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -12802,6 +12829,7 @@ "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -12892,6 +12920,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "license": "Apache-2.0", + "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -13983,7 +14012,8 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "license": "0BSD", + "peer": true }, "node_modules/tuf-js": { "version": "4.0.0", @@ -14075,6 +14105,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14293,6 +14324,7 @@ "integrity": "sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -14852,6 +14884,7 @@ "integrity": "sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@vitest/expect": "4.0.15", "@vitest/mocker": "4.0.15", @@ -15308,6 +15341,7 @@ "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", "devOptional": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -15326,10 +15360,11 @@ "version": "0.15.1", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.1.tgz", "integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==", - "license": "MIT" + "license": "MIT", + "peer": true }, "projects/a2a-chat-canvas": { - "version": "0.8.1", + "version": "0.0.1", "dependencies": { "tslib": "^2.3.0" }, diff --git a/samples/client/nativescript/src/a2ui-lit-types.ts b/samples/client/nativescript/src/a2ui-lit-types.ts new file mode 100644 index 00000000..d2f57ded --- /dev/null +++ b/samples/client/nativescript/src/a2ui-lit-types.ts @@ -0,0 +1,577 @@ +/* + * Self-contained types from @a2ui/lit/0.8 for NativeScript compatibility. + * This avoids importing the Lit-based UI components which are web-only. + * + * Copyright 2025 Google LLC - Apache License 2.0 + */ + +// ============ Primitives ============ + +export interface StringValue { + path?: string; + literalString?: string; + literal?: string; +} + +export interface NumberValue { + path?: string; + literalNumber?: number; + literal?: number; +} + +export interface BooleanValue { + path?: string; + literalBoolean?: boolean; + literal?: boolean; +} + +// Re-export Primitives namespace +export const Primitives = { + StringValue: {} as StringValue, + NumberValue: {} as NumberValue, + BooleanValue: {} as BooleanValue, +}; + +export namespace Primitives { + export type StringValue = import('./a2ui-lit-types').StringValue; + export type NumberValue = import('./a2ui-lit-types').NumberValue; + export type BooleanValue = import('./a2ui-lit-types').BooleanValue; +} + +// ============ Components ============ + +export interface Action { + name: string; + id?: string; + label?: string; + type?: string; + payload?: Record; + context?: { + key: string; + value: { + path?: string; + literalString?: string; + literalNumber?: number; + literalBoolean?: boolean; + }; + }[]; +} + +export interface Text { + text: StringValue; + usageHint: "h1" | "h2" | "h3" | "h4" | "h5" | "caption" | "body"; +} + +export interface Image { + url: StringValue; + usageHint: "icon" | "avatar" | "smallFeature" | "mediumFeature" | "largeFeature" | "header"; + fit?: "contain" | "cover" | "fill" | "none" | "scale-down"; +} + +export interface Icon { + name: StringValue; +} + +export interface Video { + url: StringValue; +} + +export interface AudioPlayer { + url: StringValue; + description?: StringValue; +} + +export interface Divider { + axis?: "horizontal" | "vertical"; + color?: string; + thickness?: number; +} + +export interface Button { + child: string; + action: Action; +} + +export interface Checkbox { + label: StringValue; + value: { + path?: string; + literalBoolean?: boolean; + }; +} + +export interface TextField { + text?: StringValue; + label: StringValue; + type?: "shortText" | "number" | "date" | "longText"; + validationRegexp?: string; +} + +export interface DateTimeInput { + value: StringValue; + enableDate?: boolean; + enableTime?: boolean; + outputFormat?: string; +} + +export interface MultipleChoice { + selections: { + path?: string; + literalArray?: string[]; + }; + options?: { + label: { + path?: string; + literalString?: string; + }; + value: string; + }[]; + maxAllowedSelections?: number; +} + +export interface Slider { + value: { + path?: string; + literalNumber?: number; + }; + minValue?: number; + maxValue?: number; +} + +// ============ Types ============ + +export type SurfaceID = string; + +export type DataValue = string | number | boolean | null | DataMap | DataObject | DataArray; +export type DataObject = { [key: string]: DataValue }; +export type DataMap = Map; +export type DataArray = DataValue[]; + +export interface ComponentInstance { + id: string; + weight?: number; + component?: { [k: string]: unknown }; +} + +export interface BeginRenderingMessage { + surfaceId: string; + root: string; + styles?: Record; +} + +export interface SurfaceUpdateMessage { + surfaceId: string; + components: ComponentInstance[]; +} + +export interface DataModelUpdate { + surfaceId: string; + path?: string; + contents: { key: string; [k: string]: unknown }[]; +} + +export interface DeleteSurfaceMessage { + surfaceId: string; +} + +export interface ServerToClientMessage { + beginRendering?: BeginRenderingMessage; + surfaceUpdate?: SurfaceUpdateMessage; + dataModelUpdate?: DataModelUpdate; + deleteSurface?: DeleteSurfaceMessage; +} + +export interface UserAction { + name: string; + surfaceId: string; + sourceComponentId: string; + timestamp: string; + context?: { [k: string]: unknown }; +} + +export interface ClientToServerMessage { + userAction?: UserAction; + clientUiCapabilities?: unknown; + error?: unknown; + request?: unknown; +} + +export type A2UIClientEventMessage = ClientToServerMessage; + +// Resolved types +export type ResolvedValue = string | number | boolean | null | AnyComponentNode | ResolvedMap | ResolvedArray; +export type ResolvedMap = { [key: string]: ResolvedValue }; +export type ResolvedArray = ResolvedValue[]; + +interface BaseComponentNode { + id: string; + weight?: number; + dataContextPath?: string; + slotName?: string; +} + +export type ResolvedText = Text; +export type ResolvedIcon = Icon; +export type ResolvedImage = Image; +export type ResolvedVideo = Video; +export type ResolvedAudioPlayer = AudioPlayer; +export type ResolvedDivider = Divider; +export type ResolvedCheckbox = Checkbox; +export type ResolvedTextField = TextField; +export type ResolvedDateTimeInput = DateTimeInput; +export type ResolvedMultipleChoice = MultipleChoice; +export type ResolvedSlider = Slider; + +export interface ResolvedRow { + children: AnyComponentNode[]; + distribution?: "start" | "center" | "end" | "spaceBetween" | "spaceAround" | "spaceEvenly"; + alignment?: "start" | "center" | "end" | "stretch"; +} + +export interface ResolvedColumn { + children: AnyComponentNode[]; + distribution?: "start" | "center" | "end" | "spaceBetween" | "spaceAround" | "spaceEvenly"; + alignment?: "start" | "center" | "end" | "stretch"; +} + +export interface ResolvedButton { + child: AnyComponentNode; + action: Action; +} + +export interface ResolvedList { + children: AnyComponentNode[]; + direction?: "vertical" | "horizontal"; + alignment?: "start" | "center" | "end" | "stretch"; +} + +export interface ResolvedCard { + child: AnyComponentNode; + children: AnyComponentNode[]; +} + +export interface ResolvedTabItem { + title: StringValue; + child: AnyComponentNode; +} + +export interface ResolvedTabs { + tabItems: ResolvedTabItem[]; +} + +export interface ResolvedModal { + entryPointChild: AnyComponentNode; + contentChild: AnyComponentNode; +} + +export interface CustomNodeProperties { + [k: string]: ResolvedValue; +} + +export interface TextNode extends BaseComponentNode { + type: "Text"; + properties: ResolvedText; +} + +export interface ImageNode extends BaseComponentNode { + type: "Image"; + properties: ResolvedImage; +} + +export interface IconNode extends BaseComponentNode { + type: "Icon"; + properties: ResolvedIcon; +} + +export interface VideoNode extends BaseComponentNode { + type: "Video"; + properties: ResolvedVideo; +} + +export interface AudioPlayerNode extends BaseComponentNode { + type: "AudioPlayer"; + properties: ResolvedAudioPlayer; +} + +export interface RowNode extends BaseComponentNode { + type: "Row"; + properties: ResolvedRow; +} + +export interface ColumnNode extends BaseComponentNode { + type: "Column"; + properties: ResolvedColumn; +} + +export interface ListNode extends BaseComponentNode { + type: "List"; + properties: ResolvedList; +} + +export interface CardNode extends BaseComponentNode { + type: "Card"; + properties: ResolvedCard; +} + +export interface TabsNode extends BaseComponentNode { + type: "Tabs"; + properties: ResolvedTabs; +} + +export interface DividerNode extends BaseComponentNode { + type: "Divider"; + properties: ResolvedDivider; +} + +export interface ModalNode extends BaseComponentNode { + type: "Modal"; + properties: ResolvedModal; +} + +export interface ButtonNode extends BaseComponentNode { + type: "Button"; + properties: ResolvedButton; +} + +export interface CheckboxNode extends BaseComponentNode { + type: "CheckBox"; + properties: ResolvedCheckbox; +} + +export interface TextFieldNode extends BaseComponentNode { + type: "TextField"; + properties: ResolvedTextField; +} + +export interface DateTimeInputNode extends BaseComponentNode { + type: "DateTimeInput"; + properties: ResolvedDateTimeInput; +} + +export interface MultipleChoiceNode extends BaseComponentNode { + type: "MultipleChoice"; + properties: ResolvedMultipleChoice; +} + +export interface SliderNode extends BaseComponentNode { + type: "Slider"; + properties: ResolvedSlider; +} + +export interface SpacerNode extends BaseComponentNode { + type: "Spacer"; + height?: number; + width?: number | string; +} + +export interface CustomNode extends BaseComponentNode { + type: string; + properties: CustomNodeProperties; +} + +export type AnyComponentNode = + | TextNode + | IconNode + | ImageNode + | VideoNode + | AudioPlayerNode + | RowNode + | ColumnNode + | ListNode + | CardNode + | TabsNode + | DividerNode + | ModalNode + | ButtonNode + | CheckboxNode + | TextFieldNode + | DateTimeInputNode + | MultipleChoiceNode + | SliderNode + | SpacerNode + | CustomNode; + +// Generic Node type for simplified usage +export type Node = AnyComponentNode | SimpleNode; + +// Simplified node type for demo/inline surfaces +export interface SimpleNode { + type: string; + id: string; + children?: SimpleNode[]; + text?: string; + textStyle?: 'title' | 'subtitle' | 'body' | 'caption' | 'code'; + title?: string; + subtitle?: string; + label?: string; + variant?: 'primary' | 'secondary' | 'tertiary'; + url?: string; + src?: string; + fit?: 'cover' | 'contain' | 'fill'; + placeholder?: string; + value?: string; + helperText?: string; + orientation?: 'horizontal' | 'vertical'; + height?: number; + width?: number | string; + horizontalAlignment?: 'start' | 'center' | 'end' | 'spaceBetween' | 'spaceAround'; + verticalAlignment?: 'top' | 'center' | 'bottom'; + action?: Action; + actions?: Action[]; + items?: SimpleNode[]; + leading?: SimpleNode; + trailing?: SimpleNode; + child?: SimpleNode; +} + +// A2UI Message types +export interface A2uiMessage { + root?: Node | SimpleNode; + surfaceId?: string; + data?: Record; +} + +export interface Surface { + rootComponentId: string | null; + componentTree: AnyComponentNode | null; + dataModel: DataMap; + components: Map; + styles: Record; +} + +export interface MessageProcessor { + getSurfaces(): ReadonlyMap; + clearSurfaces(): void; + processMessages(messages: ServerToClientMessage[]): void; + getData(node: AnyComponentNode, relativePath: string, surfaceId: string): DataValue | null; + setData(node: AnyComponentNode | null, relativePath: string, value: DataValue, surfaceId: string): void; + resolvePath(path: string, dataContextPath?: string): string; +} + +// Theme types (simplified) +export interface Theme { + components: { + AudioPlayer: Record; + Button: Record; + Card: Record; + Column: Record; + CheckBox: { container: Record; element: Record; label: Record; }; + DateTimeInput: { container: Record; element: Record; label: Record; }; + Divider: Record; + Image: { all: Record; icon: Record; avatar: Record; smallFeature: Record; mediumFeature: Record; largeFeature: Record; header: Record; }; + Icon: Record; + List: Record; + Modal: { backdrop: Record; element: Record; }; + MultipleChoice: { container: Record; element: Record; label: Record; }; + Row: Record; + Slider: { container: Record; element: Record; label: Record; }; + Tabs: { container: Record; controls: { all: Record; selected: Record; }; element: Record; }; + Text: { all: Record; h1: Record; h2: Record; h3: Record; h4: Record; h5: Record; caption: Record; body: Record; }; + TextField: { container: Record; element: Record; label: Record; }; + Video: Record; + }; + elements: { + a: Record; + audio: Record; + body: Record; + button: Record; + h1: Record; + h2: Record; + h3: Record; + h4: Record; + h5: Record; + iframe: Record; + input: Record; + p: Record; + pre: Record; + textarea: Record; + video: Record; + }; + markdown: { + p: string[]; + h1: string[]; + h2: string[]; + h3: string[]; + h4: string[]; + h5: string[]; + ul: string[]; + ol: string[]; + li: string[]; + a: string[]; + strong: string[]; + em: string[]; + }; + additionalStyles?: Record>; +} + +// Re-export Types namespace for compatibility +export namespace Types { + export type StringValue = import('./a2ui-lit-types').StringValue; + export type NumberValue = import('./a2ui-lit-types').NumberValue; + export type BooleanValue = import('./a2ui-lit-types').BooleanValue; + export type Action = import('./a2ui-lit-types').Action; + export type Text = import('./a2ui-lit-types').Text; + export type Image = import('./a2ui-lit-types').Image; + export type Icon = import('./a2ui-lit-types').Icon; + export type Video = import('./a2ui-lit-types').Video; + export type AudioPlayer = import('./a2ui-lit-types').AudioPlayer; + export type Divider = import('./a2ui-lit-types').Divider; + export type Button = import('./a2ui-lit-types').Button; + export type Checkbox = import('./a2ui-lit-types').Checkbox; + export type TextField = import('./a2ui-lit-types').TextField; + export type DateTimeInput = import('./a2ui-lit-types').DateTimeInput; + export type MultipleChoice = import('./a2ui-lit-types').MultipleChoice; + export type Slider = import('./a2ui-lit-types').Slider; + export type SurfaceID = import('./a2ui-lit-types').SurfaceID; + export type DataValue = import('./a2ui-lit-types').DataValue; + export type DataObject = import('./a2ui-lit-types').DataObject; + export type DataMap = import('./a2ui-lit-types').DataMap; + export type DataArray = import('./a2ui-lit-types').DataArray; + export type ServerToClientMessage = import('./a2ui-lit-types').ServerToClientMessage; + export type A2UIClientEventMessage = import('./a2ui-lit-types').A2UIClientEventMessage; + export type AnyComponentNode = import('./a2ui-lit-types').AnyComponentNode; + export type Node = import('./a2ui-lit-types').Node; + export type SimpleNode = import('./a2ui-lit-types').SimpleNode; + export type A2uiMessage = import('./a2ui-lit-types').A2uiMessage; + export type TextNode = import('./a2ui-lit-types').TextNode; + export type ImageNode = import('./a2ui-lit-types').ImageNode; + export type IconNode = import('./a2ui-lit-types').IconNode; + export type VideoNode = import('./a2ui-lit-types').VideoNode; + export type AudioPlayerNode = import('./a2ui-lit-types').AudioPlayerNode; + export type RowNode = import('./a2ui-lit-types').RowNode; + export type ColumnNode = import('./a2ui-lit-types').ColumnNode; + export type ListNode = import('./a2ui-lit-types').ListNode; + export type CardNode = import('./a2ui-lit-types').CardNode; + export type TabsNode = import('./a2ui-lit-types').TabsNode; + export type DividerNode = import('./a2ui-lit-types').DividerNode; + export type ModalNode = import('./a2ui-lit-types').ModalNode; + export type ButtonNode = import('./a2ui-lit-types').ButtonNode; + export type CheckboxNode = import('./a2ui-lit-types').CheckboxNode; + export type TextFieldNode = import('./a2ui-lit-types').TextFieldNode; + export type DateTimeInputNode = import('./a2ui-lit-types').DateTimeInputNode; + export type MultipleChoiceNode = import('./a2ui-lit-types').MultipleChoiceNode; + export type SliderNode = import('./a2ui-lit-types').SliderNode; + export type SpacerNode = import('./a2ui-lit-types').SpacerNode; + export type CustomNode = import('./a2ui-lit-types').CustomNode; + export type Surface = import('./a2ui-lit-types').Surface; + export type MessageProcessor = import('./a2ui-lit-types').MessageProcessor; + export type Theme = import('./a2ui-lit-types').Theme; + export type ResolvedText = import('./a2ui-lit-types').ResolvedText; + export type ResolvedIcon = import('./a2ui-lit-types').ResolvedIcon; + export type ResolvedImage = import('./a2ui-lit-types').ResolvedImage; + export type ResolvedVideo = import('./a2ui-lit-types').ResolvedVideo; + export type ResolvedAudioPlayer = import('./a2ui-lit-types').ResolvedAudioPlayer; + export type ResolvedDivider = import('./a2ui-lit-types').ResolvedDivider; + export type ResolvedCheckbox = import('./a2ui-lit-types').ResolvedCheckbox; + export type ResolvedTextField = import('./a2ui-lit-types').ResolvedTextField; + export type ResolvedDateTimeInput = import('./a2ui-lit-types').ResolvedDateTimeInput; + export type ResolvedMultipleChoice = import('./a2ui-lit-types').ResolvedMultipleChoice; + export type ResolvedSlider = import('./a2ui-lit-types').ResolvedSlider; + export type ResolvedButton = import('./a2ui-lit-types').ResolvedButton; + export type ResolvedRow = import('./a2ui-lit-types').ResolvedRow; + export type ResolvedColumn = import('./a2ui-lit-types').ResolvedColumn; + export type ResolvedList = import('./a2ui-lit-types').ResolvedList; + export type ResolvedCard = import('./a2ui-lit-types').ResolvedCard; + export type ResolvedTabs = import('./a2ui-lit-types').ResolvedTabs; + export type ResolvedModal = import('./a2ui-lit-types').ResolvedModal; +} diff --git a/samples/client/nativescript/src/app.css b/samples/client/nativescript/src/app.css index b5c61c95..5555973c 100644 --- a/samples/client/nativescript/src/app.css +++ b/samples/client/nativescript/src/app.css @@ -1,3 +1,173 @@ @tailwind base; @tailwind components; @tailwind utilities; + +/* ======================================== + A2UI NativeScript Theme - Dark Mode + ======================================== */ + +/* Base App Styles */ +Page { + background-color: #0f0f23; +} + +ActionBar { + background-color: #0f0f23; + color: #ffffff; +} + +/* Typography */ +.text-primary { + color: #ffffff; +} + +.text-secondary { + color: #9ca3af; +} + +.text-muted { + color: #6b7280; +} + +.text-accent { + color: #6366f1; +} + +/* Backgrounds */ +.bg-primary { + background-color: #0f0f23; +} + +.bg-secondary { + background-color: #1e1e3f; +} + +.bg-card { + background-color: #1a1a2e; +} + +.bg-accent { + background-color: #6366f1; +} + +.bg-gradient { + background: linear-gradient(180deg, #0a0a1f 0%, #12122e 50%, #1a1a3e 100%); +} + +/* Buttons */ +.btn { + font-size: 15; + font-weight: 500; + padding: 12 24; + border-radius: 12; + text-transform: none; +} + +.btn-primary { + background-color: #6366f1; + color: #ffffff; +} + +.btn-primary:active { + background-color: #4f46e5; +} + +.btn-secondary { + background-color: transparent; + color: #6366f1; + border-width: 1; + border-color: #6366f1; +} + +.btn-ghost { + background-color: transparent; + color: #9ca3af; +} + +/* Cards */ +.card { + background-color: #1e1e3f; + border-radius: 16; + border-width: 1; + border-color: #2a2a4a; +} + +.card-elevated { + background-color: #1e1e3f; + border-radius: 16; +} + +/* Inputs */ +.input { + font-size: 16; + color: #ffffff; + background-color: #1a1a2e; + border-radius: 12; + border-width: 1; + border-color: #2a2a4a; + padding: 12 16; +} + +.input:focus { + border-color: #6366f1; +} + +/* Spacing utilities */ +.m-0 { margin: 0; } +.m-1 { margin: 4; } +.m-2 { margin: 8; } +.m-3 { margin: 12; } +.m-4 { margin: 16; } +.m-5 { margin: 20; } + +.p-0 { padding: 0; } +.p-1 { padding: 4; } +.p-2 { padding: 8; } +.p-3 { padding: 12; } +.p-4 { padding: 16; } +.p-5 { padding: 20; } + +/* Border radius */ +.rounded-sm { border-radius: 4; } +.rounded { border-radius: 8; } +.rounded-md { border-radius: 12; } +.rounded-lg { border-radius: 16; } +.rounded-xl { border-radius: 24; } +.rounded-full { border-radius: 9999; } + +/* Font sizes */ +.text-xs { font-size: 10; } +.text-sm { font-size: 12; } +.text-base { font-size: 14; } +.text-lg { font-size: 16; } +.text-xl { font-size: 18; } +.text-2xl { font-size: 24; } +.text-3xl { font-size: 30; } + +/* Font weights */ +.font-normal { font-weight: 400; } +.font-medium { font-weight: 500; } +.font-semibold { font-weight: 600; } +.font-bold { font-weight: 700; } + +/* Shadows (iOS only) */ +.shadow-sm { + ios-shadow-color: #000000; + ios-shadow-opacity: 0.1; + ios-shadow-radius: 4; + ios-shadow-offset: 0, 2; +} + +.shadow { + ios-shadow-color: #000000; + ios-shadow-opacity: 0.15; + ios-shadow-radius: 8; + ios-shadow-offset: 0, 4; +} + +.shadow-lg { + ios-shadow-color: #000000; + ios-shadow-opacity: 0.2; + ios-shadow-radius: 16; + ios-shadow-offset: 0, 8; +} diff --git a/samples/client/nativescript/src/app/app.ts b/samples/client/nativescript/src/app/app.ts index 7e094d1a..32977863 100644 --- a/samples/client/nativescript/src/app/app.ts +++ b/samples/client/nativescript/src/app/app.ts @@ -1,23 +1,187 @@ -import { Component, NO_ERRORS_SCHEMA } from '@angular/core'; -import { PageRouterOutlet } from '@nativescript/angular'; -import { Renderer, Theme } from '@a2ui/nativescript'; -import { Types } from '@a2ui/lit/0.8'; +import { Component, NO_ERRORS_SCHEMA, OnInit, inject } from '@angular/core'; +import { NativeScriptCommonModule } from '@nativescript/angular'; +import { isIOS, Screen } from '@nativescript/core'; +import { Renderer } from '@a2ui/nativescript'; +import { Types } from '../a2ui-lit-types'; +import { ChatService } from './services/chat.service'; +import { ChatInputComponent } from './components/chat-input.component'; +import { ChatHistoryComponent } from './components/chat-history.component'; +import { CanvasComponent } from './components/canvas.component'; @Component({ selector: 'ns-app', - templateUrl: './app.html', - imports: [PageRouterOutlet, Renderer], + standalone: true, + imports: [ + NativeScriptCommonModule, + Renderer, + ChatInputComponent, + ChatHistoryComponent, + CanvasComponent, + ], schemas: [NO_ERRORS_SCHEMA], + template: ` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + `, + styles: [` + .app-container { + background: linear-gradient(180deg, #0a0a1f 0%, #12122e 50%, #1a1a3e 100%); + background-color: #0f0f23; + } + + .app-container.ios { + padding-top: 48; + } + + .app-header { + padding: 16; + border-bottom-width: 1; + border-bottom-color: #2a2a4a; + } + + .header-avatar { + width: 44; + height: 44; + background-color: #6366f1; + border-radius: 22; + vertical-align: center; + } + + .avatar-text { + font-size: 20; + text-align: center; + vertical-align: center; + height: 44; + } + + .header-content { + margin-left: 12; + vertical-align: center; + } + + .header-title { + font-size: 18; + font-weight: 600; + color: #ffffff; + } + + .header-status { + font-size: 12; + color: #9ca3af; + margin-top: 2; + } + + .header-status.connected { + color: #22c55e; + } + + .header-actions { + vertical-align: center; + } + + .header-action-btn { + font-size: 24; + color: #6b7280; + padding: 8; + } + + .loading-container { + padding: 8 16; + horizontal-align: center; + orientation: horizontal; + } + + .loading-text { + font-size: 13; + color: #9ca3af; + margin-left: 8; + vertical-align: center; + } + + .floating-canvas { + vertical-align: bottom; + margin-bottom: 8; + } + `] }) -export class App { - surfaceId = 'main' as Types.SurfaceID; - component: Types.AnyComponentNode = { - type: 'button', - id: 'btn1', - text: 'Hello from A2UI NativeScript!', - action: { - type: 'click', - handler: 'console.log("Clicked!")', - }, - } as any; // Cast to any for now as we might not have full types setup +export class App implements OnInit { + readonly chatService = inject(ChatService); + readonly isIOS = isIOS; + + ngOnInit(): void { + // Try to connect to the A2A server + this.chatService.connect().then(connected => { + if (!connected) { + console.log('Could not connect to A2A server, running in demo mode'); + } + }); + } + + onSendMessage(message: string): void { + this.chatService.sendMessage(message); + } + + onMenuTap(): void { + // Could show action dialog for settings, clear chat, etc. + console.log('Menu tapped'); + } } diff --git a/samples/client/nativescript/src/app/catalog.ts b/samples/client/nativescript/src/app/catalog.ts index 240804f2..4dd1d434 100644 --- a/samples/client/nativescript/src/app/catalog.ts +++ b/samples/client/nativescript/src/app/catalog.ts @@ -1,14 +1,81 @@ import { inputBinding } from '@angular/core'; import { Catalog, CatalogEntry } from '@a2ui/nativescript'; -import { Types } from '@a2ui/lit/0.8'; +import { Types } from '../a2ui-lit-types'; export const NativeScriptCatalog: Catalog = { - [Types.ComponentType.BUTTON]: { + // Core components + ['Button' as string]: { type: async () => (await import('./components/button.component')).ButtonComponent, bindings: (component) => [ - inputBinding('component', () => component), - inputBinding('weight', () => component.weight ?? 'initial'), + inputBinding('node', () => component), ], - }, - // Add other components here + } as CatalogEntry, + + ['Text' as string]: { + type: async () => (await import('./components/text.component')).TextComponent, + bindings: (component) => [ + inputBinding('node', () => component), + ], + } as CatalogEntry, + + // Layout components + ['Row' as string]: { + type: async () => (await import('./components/row.component')).RowComponent, + bindings: (component) => [ + inputBinding('node', () => component), + ], + } as CatalogEntry, + + ['Column' as string]: { + type: async () => (await import('./components/column.component')).ColumnComponent, + bindings: (component) => [ + inputBinding('node', () => component), + ], + } as CatalogEntry, + + // Container components + ['Card' as string]: { + type: async () => (await import('./components/card.component')).CardComponent, + bindings: (component) => [ + inputBinding('node', () => component), + ], + } as CatalogEntry, + + ['List' as string]: { + type: async () => (await import('./components/list.component')).ListComponent, + bindings: (component) => [ + inputBinding('node', () => component), + ], + } as CatalogEntry, + + // Media components + ['Image' as string]: { + type: async () => (await import('./components/image.component')).ImageComponent, + bindings: (component) => [ + inputBinding('node', () => component), + ], + } as CatalogEntry, + + // Form components + ['TextField' as string]: { + type: async () => (await import('./components/textfield.component')).TextFieldComponent, + bindings: (component) => [ + inputBinding('node', () => component), + ], + } as CatalogEntry, + + // Utility components + ['Spacer' as string]: { + type: async () => (await import('./components/spacer.component')).SpacerComponent, + bindings: (component) => [ + inputBinding('node', () => component), + ], + } as CatalogEntry, + + ['Divider' as string]: { + type: async () => (await import('./components/divider.component')).DividerComponent, + bindings: (component) => [ + inputBinding('node', () => component), + ], + } as CatalogEntry, }; diff --git a/samples/client/nativescript/src/app/components/button.component.ts b/samples/client/nativescript/src/app/components/button.component.ts index 6c99a63e..1a11247e 100644 --- a/samples/client/nativescript/src/app/components/button.component.ts +++ b/samples/client/nativescript/src/app/components/button.component.ts @@ -1,21 +1,73 @@ -import { Component, NO_ERRORS_SCHEMA } from '@angular/core'; -import { Types } from '@a2ui/lit/0.8'; +import { Component, NO_ERRORS_SCHEMA, ChangeDetectionStrategy, Input } from '@angular/core'; +import { Types, SimpleNode } from '../../a2ui-lit-types'; import { DynamicComponent } from '@a2ui/nativescript'; import { NativeScriptCommonModule } from '@nativescript/angular'; @Component({ - selector: 'ns-button', + selector: 'a2ui-button', + standalone: true, + changeDetection: ChangeDetectionStrategy.OnPush, template: ` - + `, + styles: [` + .a2ui-button { + font-size: 15; + font-weight: 500; + padding: 12 24; + border-radius: 12; + text-transform: none; + } + + .btn-primary { + background-color: #6366f1; + color: #ffffff; + } + + .btn-secondary { + background-color: transparent; + color: #6366f1; + border-width: 1; + border-color: #6366f1; + } + + .btn-tertiary { + background-color: transparent; + color: #6366f1; + } + `], imports: [NativeScriptCommonModule], schemas: [NO_ERRORS_SCHEMA] }) -export class ButtonComponent extends DynamicComponent { - onTap() { - console.log('Button tapped:', this.component().action); - if (this.component().action) { - this.sendAction(this.component().action!); +export class ButtonComponent extends DynamicComponent { + + get buttonText(): string { + const node = this.node as SimpleNode; + // Try to get text from child node + if (node?.child?.text) { + return node.child.text; + } + // Fallback to label or id + return node?.label || node?.id || 'Button'; + } + + get buttonClass(): string { + const node = this.node as SimpleNode; + const variant = node?.variant || 'primary'; + return `btn-${variant}`; + } + + onTap(): void { + const node = this.node as SimpleNode; + const action = node?.action || node?.actions?.[0]; + console.log('Button tapped:', action); + if (action) { + this.sendAction(action); } } } diff --git a/samples/client/nativescript/src/app/components/canvas.component.ts b/samples/client/nativescript/src/app/components/canvas.component.ts new file mode 100644 index 00000000..c2971288 --- /dev/null +++ b/samples/client/nativescript/src/app/components/canvas.component.ts @@ -0,0 +1,84 @@ +import { Component, Input, signal, inject, NO_ERRORS_SCHEMA } from '@angular/core'; +import { NativeScriptCommonModule } from '@nativescript/angular'; +import { Renderer } from '@a2ui/nativescript'; +import { Types } from '../../a2ui-lit-types'; +import { ChatService } from '../services/chat.service'; + +@Component({ + selector: 'a2ui-canvas', + standalone: true, + imports: [NativeScriptCommonModule], + schemas: [NO_ERRORS_SCHEMA], + template: ` + + + + + + + + + + + + + + + + + + `, + styles: [` + .canvas-container { + background-color: #0f0f23; + border-radius: 16; + margin: 8; + border-width: 1; + border-color: #2a2a4a; + } + + .canvas-header { + padding: 12 16; + border-bottom-width: 1; + border-bottom-color: #2a2a4a; + } + + .canvas-icon { + font-size: 16; + vertical-align: center; + } + + .canvas-title { + font-size: 14; + font-weight: 600; + color: #ffffff; + margin-left: 8; + vertical-align: center; + } + + .canvas-close { + font-size: 16; + color: #6b7280; + padding: 4 8; + } + + .canvas-content { + max-height: 300; + } + + .surface-wrapper { + padding: 16; + } + `] +}) +export class CanvasComponent { + private readonly chatService = inject(ChatService); + + readonly surface = this.chatService.currentSurface; + + onClose(): void { + // Could add a method to clear surface in chat service + } +} diff --git a/samples/client/nativescript/src/app/components/card.component.ts b/samples/client/nativescript/src/app/components/card.component.ts new file mode 100644 index 00000000..7d9e445a --- /dev/null +++ b/samples/client/nativescript/src/app/components/card.component.ts @@ -0,0 +1,141 @@ +import { Component, ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; +import { NativeScriptCommonModule } from '@nativescript/angular'; +import { DynamicComponent, Renderer } from '@a2ui/nativescript'; +import { Types, SimpleNode, Action } from '../../a2ui-lit-types'; + +@Component({ + selector: 'a2ui-card', + standalone: true, + imports: [NativeScriptCommonModule], + changeDetection: ChangeDetectionStrategy.OnPush, + template: ` + + + + + + + + + + + + + + + + + + + + + + + + + `, + styles: [` + .a2ui-card { + background-color: #1e1e3f; + border-radius: 12; + margin: 8; + border-width: 1; + border-color: #2a2a4a; + } + + .card-header { + padding: 16; + border-bottom-width: 1; + border-bottom-color: #2a2a4a; + } + + .card-title { + font-size: 18; + font-weight: 600; + color: #ffffff; + } + + .card-subtitle { + font-size: 14; + color: #9ca3af; + margin-top: 4; + } + + .card-content { + padding: 16; + } + + .card-actions { + padding: 8 16 16 16; + } + + .card-action-btn { + background-color: #6366f1; + color: #ffffff; + font-size: 14; + font-weight: 500; + border-radius: 8; + padding: 8 16; + margin-left: 8; + text-transform: none; + } + `], + schemas: [NO_ERRORS_SCHEMA], +}) +export class CardComponent extends DynamicComponent { + get cardTitle(): string { + const node = this.node as SimpleNode; + return node?.title || ''; + } + + get cardSubtitle(): string { + const node = this.node as SimpleNode; + return node?.subtitle || ''; + } + + get children(): SimpleNode[] { + const node = this.node as SimpleNode; + return node?.children || []; + } + + get actions(): Action[] { + const node = this.node as SimpleNode; + return node?.actions || []; + } + + onTap(): void { + const action = this.actions[0]; + if (action) { + this.handleAction(action); + } + } + + handleAction(action: Action): void { + this.sendAction(action); + } +} diff --git a/samples/client/nativescript/src/app/components/chat-history.component.ts b/samples/client/nativescript/src/app/components/chat-history.component.ts new file mode 100644 index 00000000..3120fa16 --- /dev/null +++ b/samples/client/nativescript/src/app/components/chat-history.component.ts @@ -0,0 +1,103 @@ +import { Component, Input, ViewChild, ElementRef, signal, effect, inject, NO_ERRORS_SCHEMA } from '@angular/core'; +import { NativeScriptCommonModule } from '@nativescript/angular'; +import { ScrollView } from '@nativescript/core'; +import { ChatService, UiMessage } from '../services/chat.service'; +import { MessageBubbleComponent } from './message-bubble.component'; + +@Component({ + selector: 'a2ui-chat-history', + standalone: true, + imports: [NativeScriptCommonModule, MessageBubbleComponent], + template: ` + + + + + + + + + + + + + + + + + + + + + `, + styles: [` + .chat-history { + background-color: transparent; + } + + .messages-container { + padding: 16 0; + } + + .empty-state { + padding: 60 40; + horizontal-align: center; + } + + .empty-icon { + font-size: 48; + text-align: center; + margin-bottom: 16; + } + + .empty-title { + font-size: 20; + font-weight: bold; + color: #ffffff; + text-align: center; + margin-bottom: 8; + } + + .empty-subtitle { + font-size: 14; + color: #9ca3af; + text-align: center; + } + `], + schemas: [NO_ERRORS_SCHEMA], +}) +export class ChatHistoryComponent { + @ViewChild('scrollView') scrollViewRef!: ElementRef; + + private readonly chatService = inject(ChatService); + + readonly messages = this.chatService.messages; + readonly hasMessages = this.chatService.hasMessages; + + constructor() { + // Auto-scroll to bottom when new messages arrive + effect(() => { + const msgs = this.messages(); + if (msgs.length > 0) { + setTimeout(() => this.scrollToBottom(), 100); + } + }); + } + + private scrollToBottom(): void { + const scrollView = this.scrollViewRef?.nativeElement; + if (scrollView) { + scrollView.scrollToVerticalOffset(scrollView.scrollableHeight, true); + } + } +} diff --git a/samples/client/nativescript/src/app/components/chat-input.component.ts b/samples/client/nativescript/src/app/components/chat-input.component.ts new file mode 100644 index 00000000..6e81099e --- /dev/null +++ b/samples/client/nativescript/src/app/components/chat-input.component.ts @@ -0,0 +1,104 @@ +import { Component, EventEmitter, Output, signal, inject, NO_ERRORS_SCHEMA } from '@angular/core'; +import { NativeScriptCommonModule } from '@nativescript/angular'; +import { isIOS } from '@nativescript/core'; + +@Component({ + selector: 'a2ui-chat-input', + standalone: true, + imports: [NativeScriptCommonModule], + template: ` + + + + + + + + + + + `, + styles: [` + .input-container { + background-color: #1a1a2e; + border-radius: 24; + margin: 8 16; + padding: 4 8 4 16; + } + + .input-container.ios { + margin-bottom: 24; + } + + .message-input { + font-size: 16; + color: #ffffff; + background-color: transparent; + border-width: 0; + padding: 12 0; + } + + .message-input:focus { + border-width: 0; + } + + .send-button { + background-color: #3a3a5c; + border-radius: 22; + margin: 2; + } + + .send-button.active { + background-color: #6366f1; + } + + .send-icon { + font-size: 20; + font-weight: bold; + color: #ffffff; + } + `], + schemas: [NO_ERRORS_SCHEMA], +}) +export class ChatInputComponent { + @Output() send = new EventEmitter(); + + readonly inputText = signal(''); + readonly isIOS = isIOS; + + onTextChange(event: any): void { + this.inputText.set(event.value || ''); + } + + onSend(): void { + const text = this.inputText().trim(); + if (text) { + this.send.emit(text); + this.inputText.set(''); + } + } +} diff --git a/samples/client/nativescript/src/app/components/column.component.ts b/samples/client/nativescript/src/app/components/column.component.ts new file mode 100644 index 00000000..05f2fcc6 --- /dev/null +++ b/samples/client/nativescript/src/app/components/column.component.ts @@ -0,0 +1,42 @@ +import { Component, ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; +import { NativeScriptCommonModule } from '@nativescript/angular'; +import { DynamicComponent, Renderer } from '@a2ui/nativescript'; +import { Types, SimpleNode } from '../../a2ui-lit-types'; + +@Component({ + selector: 'a2ui-column', + standalone: true, + imports: [NativeScriptCommonModule], + changeDetection: ChangeDetectionStrategy.OnPush, + template: ` + + + + + + `, + styles: [` + .a2ui-column { + /* default styles */ + } + `], + schemas: [NO_ERRORS_SCHEMA], +}) +export class ColumnComponent extends DynamicComponent { + get children(): SimpleNode[] { + const node = this.node as SimpleNode; + return node?.children || []; + } + + get horizontalAlign(): 'left' | 'center' | 'right' | 'stretch' { + const node = this.node as SimpleNode; + switch (node?.horizontalAlignment) { + case 'start': return 'left'; + case 'end': return 'right'; + case 'center': return 'center'; + default: return 'stretch'; + } + } +} diff --git a/samples/client/nativescript/src/app/components/divider.component.ts b/samples/client/nativescript/src/app/components/divider.component.ts new file mode 100644 index 00000000..407fb8f6 --- /dev/null +++ b/samples/client/nativescript/src/app/components/divider.component.ts @@ -0,0 +1,36 @@ +import { Component, ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; +import { NativeScriptCommonModule } from '@nativescript/angular'; +import { DynamicComponent } from '@a2ui/nativescript'; +import { Types, SimpleNode } from '../../a2ui-lit-types'; + +@Component({ + selector: 'a2ui-divider', + standalone: true, + imports: [NativeScriptCommonModule], + changeDetection: ChangeDetectionStrategy.OnPush, + template: ` + + + `, + styles: [` + .a2ui-divider { + background-color: #2a2a4a; + margin: 8 0; + } + + .a2ui-divider.vertical { + margin: 0 8; + } + `], + schemas: [NO_ERRORS_SCHEMA], +}) +export class DividerComponent extends DynamicComponent { + get orientation(): 'horizontal' | 'vertical' { + const node = this.node as SimpleNode; + return node?.orientation ?? 'horizontal'; + } +} diff --git a/samples/client/nativescript/src/app/components/image.component.ts b/samples/client/nativescript/src/app/components/image.component.ts new file mode 100644 index 00000000..2f7d215c --- /dev/null +++ b/samples/client/nativescript/src/app/components/image.component.ts @@ -0,0 +1,49 @@ +import { Component, ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; +import { NativeScriptCommonModule } from '@nativescript/angular'; +import { DynamicComponent } from '@a2ui/nativescript'; +import { Types, SimpleNode } from '../../a2ui-lit-types'; + +@Component({ + selector: 'a2ui-image', + standalone: true, + imports: [NativeScriptCommonModule], + changeDetection: ChangeDetectionStrategy.OnPush, + template: ` + + + `, + styles: [` + .a2ui-image { + border-radius: 8; + } + `], + schemas: [NO_ERRORS_SCHEMA], +}) +export class ImageComponent extends DynamicComponent { + get imageSrc(): string { + const node = this.node as SimpleNode; + return node?.url || node?.src || ''; + } + + get stretch(): 'none' | 'fill' | 'aspectFit' | 'aspectFill' { + const node = this.node as SimpleNode; + switch (node?.fit) { + case 'cover': return 'aspectFill'; + case 'contain': return 'aspectFit'; + case 'fill': return 'fill'; + default: return 'aspectFit'; + } + } + + onTap(): void { + const node = this.node as SimpleNode; + const action = node?.actions?.[0]; + if (action) { + this.sendAction(action); + } + } +} diff --git a/samples/client/nativescript/src/app/components/list.component.ts b/samples/client/nativescript/src/app/components/list.component.ts new file mode 100644 index 00000000..c3670739 --- /dev/null +++ b/samples/client/nativescript/src/app/components/list.component.ts @@ -0,0 +1,111 @@ +import { Component, ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; +import { NativeScriptCommonModule } from '@nativescript/angular'; +import { DynamicComponent, Renderer } from '@a2ui/nativescript'; +import { Types, SimpleNode } from '../../a2ui-lit-types'; + +@Component({ + selector: 'a2ui-list', + standalone: true, + imports: [NativeScriptCommonModule], + changeDetection: ChangeDetectionStrategy.OnPush, + template: ` + + + + + + + + + + + + + + + + + + + + + + + + `, + styles: [` + .a2ui-list { + background-color: transparent; + } + + .list-item { + padding: 12 16; + background-color: #1e1e3f; + margin: 4 0; + border-radius: 8; + } + + .list-item-leading { + margin-right: 12; + vertical-align: center; + } + + .list-item-content { + vertical-align: center; + } + + .list-item-title { + font-size: 16; + font-weight: 500; + color: #ffffff; + } + + .list-item-subtitle { + font-size: 13; + color: #9ca3af; + margin-top: 2; + } + + .list-item-trailing { + margin-left: 12; + vertical-align: center; + } + `], + schemas: [NO_ERRORS_SCHEMA], +}) +export class ListComponent extends DynamicComponent { + get items(): any[] { + const node = this.node as SimpleNode; + return node?.items || node?.children || []; + } + + onItemTap(event: any): void { + const item = this.items[event.index]; + const action = item?.actions?.[0]; + if (action) { + this.sendAction(action); + } + } +} diff --git a/samples/client/nativescript/src/app/components/message-bubble.component.ts b/samples/client/nativescript/src/app/components/message-bubble.component.ts new file mode 100644 index 00000000..503f9be5 --- /dev/null +++ b/samples/client/nativescript/src/app/components/message-bubble.component.ts @@ -0,0 +1,169 @@ +import { Component, Input, signal, computed, NO_ERRORS_SCHEMA } from '@angular/core'; +import { NativeScriptCommonModule } from '@nativescript/angular'; +import { UiMessage } from '../services/chat.service'; + +@Component({ + selector: 'a2ui-message-bubble', + standalone: true, + imports: [NativeScriptCommonModule], + template: ` + + + + + + + + + + + + + + + + + + + + + + + + + `, + styles: [` + .message-container { + margin: 8 16; + } + + .message-container.user { + horizontal-align: right; + } + + .message-container.agent { + horizontal-align: left; + } + + .avatar { + margin-bottom: 4; + } + + .avatar-icon { + font-size: 16; + background-color: #6366f1; + border-radius: 16; + text-align: center; + vertical-align: center; + } + + .avatar-name { + font-size: 12; + color: #9ca3af; + margin-left: 8; + vertical-align: center; + } + + .bubble { + padding: 12 16; + border-radius: 20; + max-width: 280; + } + + .user-bubble { + background: linear-gradient(135deg, #6366f1, #8b5cf6); + background-color: #6366f1; + border-bottom-right-radius: 4; + } + + .agent-bubble { + background-color: #1e1e3f; + border-bottom-left-radius: 4; + } + + .bubble.sending { + opacity: 0.7; + } + + .bubble.error { + background-color: #ef4444; + } + + .message-text { + font-size: 15; + color: #ffffff; + line-height: 6; + } + + .loading { + color: #6366f1; + } + + .timestamp { + font-size: 10; + color: #6b7280; + margin-top: 4; + } + + .user-timestamp { + text-align: right; + } + `], + schemas: [NO_ERRORS_SCHEMA], +}) +export class MessageBubbleComponent { + @Input() set messageData(value: UiMessage) { + this._message.set(value); + } + + private readonly _message = signal({ + id: '', + role: 'user', + content: '', + timestamp: new Date(), + status: 'sent', + }); + + readonly message = this._message.asReadonly(); + + readonly formattedTime = computed(() => { + const date = this._message().timestamp; + return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); + }); +} diff --git a/samples/client/nativescript/src/app/components/row.component.ts b/samples/client/nativescript/src/app/components/row.component.ts new file mode 100644 index 00000000..87d2ea20 --- /dev/null +++ b/samples/client/nativescript/src/app/components/row.component.ts @@ -0,0 +1,56 @@ +import { Component, ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; +import { NativeScriptCommonModule } from '@nativescript/angular'; +import { DynamicComponent, Renderer } from '@a2ui/nativescript'; +import { Types, SimpleNode } from '../../a2ui-lit-types'; + +@Component({ + selector: 'a2ui-row', + standalone: true, + imports: [NativeScriptCommonModule], + changeDetection: ChangeDetectionStrategy.OnPush, + template: ` + + + + + + `, + styles: [` + .a2ui-row { + flex-wrap: wrap; + } + `], + schemas: [NO_ERRORS_SCHEMA], +}) +export class RowComponent extends DynamicComponent { + get children(): SimpleNode[] { + const node = this.node as SimpleNode; + return node?.children || []; + } + + get alignItems(): string { + const node = this.node as SimpleNode; + switch (node?.verticalAlignment) { + case 'top': return 'flex-start'; + case 'bottom': return 'flex-end'; + case 'center': return 'center'; + default: return 'flex-start'; + } + } + + get justifyContent(): string { + const node = this.node as SimpleNode; + switch (node?.horizontalAlignment) { + case 'start': return 'flex-start'; + case 'end': return 'flex-end'; + case 'center': return 'center'; + case 'spaceBetween': return 'space-between'; + case 'spaceAround': return 'space-around'; + default: return 'flex-start'; + } + } +} diff --git a/samples/client/nativescript/src/app/components/spacer.component.ts b/samples/client/nativescript/src/app/components/spacer.component.ts new file mode 100644 index 00000000..6b4f4558 --- /dev/null +++ b/samples/client/nativescript/src/app/components/spacer.component.ts @@ -0,0 +1,35 @@ +import { Component, ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; +import { NativeScriptCommonModule } from '@nativescript/angular'; +import { DynamicComponent } from '@a2ui/nativescript'; +import { Types, SimpleNode } from '../../a2ui-lit-types'; + +@Component({ + selector: 'a2ui-spacer', + standalone: true, + imports: [NativeScriptCommonModule], + changeDetection: ChangeDetectionStrategy.OnPush, + template: ` + + + `, + styles: [` + .a2ui-spacer { + background-color: transparent; + } + `], + schemas: [NO_ERRORS_SCHEMA], +}) +export class SpacerComponent extends DynamicComponent { + get spacerHeight(): number { + const node = this.node as SimpleNode; + return node?.height ?? 16; + } + + get spacerWidth(): number | string { + const node = this.node as SimpleNode; + return node?.width ?? 'auto'; + } +} diff --git a/samples/client/nativescript/src/app/components/text.component.ts b/samples/client/nativescript/src/app/components/text.component.ts new file mode 100644 index 00000000..11a411df --- /dev/null +++ b/samples/client/nativescript/src/app/components/text.component.ts @@ -0,0 +1,69 @@ +import { Component, Input, ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; +import { NativeScriptCommonModule } from '@nativescript/angular'; +import { DynamicComponent } from '@a2ui/nativescript'; +import { Types, SimpleNode } from '../../a2ui-lit-types'; + +@Component({ + selector: 'a2ui-text', + standalone: true, + imports: [NativeScriptCommonModule], + schemas: [NO_ERRORS_SCHEMA], + changeDetection: ChangeDetectionStrategy.OnPush, + template: ` + + `, + styles: [` + .a2ui-text { + color: #ffffff; + font-size: 15; + } + + .text-title { + font-size: 24; + font-weight: bold; + margin-bottom: 8; + } + + .text-subtitle { + font-size: 18; + font-weight: 600; + color: #d1d5db; + margin-bottom: 4; + } + + .text-body { + font-size: 15; + line-height: 6; + } + + .text-caption { + font-size: 12; + color: #9ca3af; + } + + .text-code { + font-family: monospace; + font-size: 13; + background-color: #1e1e3f; + padding: 8; + border-radius: 4; + } + `] +}) +export class TextComponent extends DynamicComponent { + get textClass(): string { + const node = this.node as SimpleNode; + const style = node?.textStyle || 'body'; + return `text-${style}`; + } + + get textContent(): string { + const node = this.node as SimpleNode; + return node?.text || ''; + } +} diff --git a/samples/client/nativescript/src/app/components/textfield.component.ts b/samples/client/nativescript/src/app/components/textfield.component.ts new file mode 100644 index 00000000..db7fa8f8 --- /dev/null +++ b/samples/client/nativescript/src/app/components/textfield.component.ts @@ -0,0 +1,118 @@ +import { Component, ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; +import { NativeScriptCommonModule } from '@nativescript/angular'; +import { DynamicComponent } from '@a2ui/nativescript'; +import { Types, SimpleNode } from '../../a2ui-lit-types'; + +@Component({ + selector: 'a2ui-textfield', + standalone: true, + imports: [NativeScriptCommonModule], + changeDetection: ChangeDetectionStrategy.OnPush, + template: ` + + + + + + + + + `, + styles: [` + .a2ui-textfield-container { + margin: 8 0; + } + + .textfield-label { + font-size: 13; + font-weight: 500; + color: #9ca3af; + margin-bottom: 4; + } + + .a2ui-textfield { + font-size: 16; + color: #ffffff; + background-color: #1e1e3f; + border-radius: 8; + border-width: 1; + border-color: #2a2a4a; + padding: 12 16; + } + + .a2ui-textfield:focus { + border-color: #6366f1; + } + + .textfield-helper { + font-size: 12; + color: #6b7280; + margin-top: 4; + } + `], + schemas: [NO_ERRORS_SCHEMA], +}) +export class TextFieldComponent extends DynamicComponent { + get fieldLabel(): string { + const node = this.node as SimpleNode; + return node?.label || ''; + } + + get fieldPlaceholder(): string { + const node = this.node as SimpleNode; + return node?.placeholder || ''; + } + + get fieldValue(): string { + const node = this.node as SimpleNode; + return node?.value || ''; + } + + get fieldHelper(): string { + const node = this.node as SimpleNode; + return node?.helperText || ''; + } + + get isSecure(): boolean { + const node = this.node as any; + return node?.type === 'password'; + } + + get keyboardType(): 'email' | 'number' | 'phone' | 'url' | 'datetime' { + const node = this.node as any; + switch (node?.inputType) { + case 'email': return 'email'; + case 'number': return 'number'; + case 'tel': return 'phone'; + case 'url': return 'url'; + default: return 'email'; // default behavior + } + } + + onTextChange(event: any): void { + const value = event.value; + const node = this.node as SimpleNode; + // Could emit an action with the value + if (node?.id) { + this.sendAction({ + name: `${node.id}:change`, + id: `${node.id}:change`, + payload: { value }, + }); + } + } +} diff --git a/samples/client/nativescript/src/app/demo-surfaces.ts b/samples/client/nativescript/src/app/demo-surfaces.ts new file mode 100644 index 00000000..5a785579 --- /dev/null +++ b/samples/client/nativescript/src/app/demo-surfaces.ts @@ -0,0 +1,359 @@ +import { Types } from '../a2ui-lit-types'; + +/** + * Demo surfaces for showcasing A2UI capabilities. + * These are used when no backend server is connected. + */ + +export const DEMO_WELCOME_SURFACE: Types.A2uiMessage = { + root: { + type: 'Column', + id: 'welcome-root', + children: [ + { + type: 'Card', + id: 'welcome-card', + title: 'Welcome to A2UI', + subtitle: 'Agent-to-User Interface', + children: [ + { + type: 'Text', + id: 'welcome-text', + text: 'A2UI enables AI agents to generate rich, interactive user interfaces that work across any platform.', + textStyle: 'body', + }, + { + type: 'Spacer', + id: 'spacer-1', + height: 16, + }, + { + type: 'Row', + id: 'action-row', + children: [ + { + type: 'Button', + id: 'learn-more-btn', + label: 'Learn More', + variant: 'primary', + action: { name: 'learnMore' }, + }, + { + type: 'Button', + id: 'try-demo-btn', + label: 'Try Demo', + variant: 'secondary', + action: { name: 'tryDemo' }, + }, + ], + }, + ], + }, + ], + } as Types.Node, +}; + +export const DEMO_RESTAURANT_SURFACE: Types.A2uiMessage = { + root: { + type: 'Column', + id: 'restaurant-root', + children: [ + { + type: 'Text', + id: 'restaurant-title', + text: '🍕 Restaurant Finder', + textStyle: 'title', + }, + { + type: 'Spacer', + id: 'spacer-top', + height: 12, + }, + { + type: 'Card', + id: 'restaurant-1', + title: 'La Piazza Italiana', + subtitle: '⭐ 4.8 • Italian • $$', + children: [ + { + type: 'Text', + id: 'restaurant-1-desc', + text: 'Authentic Italian cuisine in a cozy atmosphere. Known for fresh pasta and wood-fired pizzas.', + textStyle: 'body', + }, + ], + actions: [ + { name: 'viewDetails', id: 'view-1', label: 'View' }, + { name: 'reserve', id: 'reserve-1', label: 'Reserve' }, + ], + }, + { + type: 'Card', + id: 'restaurant-2', + title: 'Sakura Garden', + subtitle: '⭐ 4.6 • Japanese • $$$', + children: [ + { + type: 'Text', + id: 'restaurant-2-desc', + text: 'Premium sushi and traditional Japanese dishes. Omakase experience available.', + textStyle: 'body', + }, + ], + actions: [ + { name: 'viewDetails', id: 'view-2', label: 'View' }, + { name: 'reserve', id: 'reserve-2', label: 'Reserve' }, + ], + }, + { + type: 'Card', + id: 'restaurant-3', + title: 'The Spice Route', + subtitle: '⭐ 4.7 • Indian • $$', + children: [ + { + type: 'Text', + id: 'restaurant-3-desc', + text: 'Rich flavors from across India. Vegetarian-friendly with vegan options.', + textStyle: 'body', + }, + ], + actions: [ + { name: 'viewDetails', id: 'view-3', label: 'View' }, + { name: 'reserve', id: 'reserve-3', label: 'Reserve' }, + ], + }, + ], + } as Types.Node, +}; + +export const DEMO_CONTACT_SURFACE: Types.A2uiMessage = { + root: { + type: 'Column', + id: 'contact-root', + children: [ + { + type: 'Text', + id: 'contact-title', + text: '📇 Contact Details', + textStyle: 'title', + }, + { + type: 'Spacer', + id: 'spacer-1', + height: 16, + }, + { + type: 'Card', + id: 'contact-card', + children: [ + { + type: 'Row', + id: 'contact-header', + children: [ + { + type: 'Text', + id: 'contact-avatar', + text: '👤', + textStyle: 'title', + }, + { + type: 'Column', + id: 'contact-info', + children: [ + { + type: 'Text', + id: 'contact-name', + text: 'John Smith', + textStyle: 'subtitle', + }, + { + type: 'Text', + id: 'contact-role', + text: 'Software Engineer at Google', + textStyle: 'body', + }, + ], + }, + ], + }, + { + type: 'Divider', + id: 'divider-1', + }, + { + type: 'Row', + id: 'contact-email-row', + children: [ + { + type: 'Text', + id: 'email-label', + text: '📧', + }, + { + type: 'Text', + id: 'email-value', + text: 'john.smith@example.com', + textStyle: 'body', + }, + ], + }, + { + type: 'Row', + id: 'contact-phone-row', + children: [ + { + type: 'Text', + id: 'phone-label', + text: '📱', + }, + { + type: 'Text', + id: 'phone-value', + text: '+1 (555) 123-4567', + textStyle: 'body', + }, + ], + }, + ], + actions: [ + { name: 'call', id: 'call-btn', label: 'Call' }, + { name: 'message', id: 'message-btn', label: 'Message' }, + ], + }, + ], + } as Types.Node, +}; + +export const DEMO_CHART_SURFACE: Types.A2uiMessage = { + root: { + type: 'Column', + id: 'chart-root', + children: [ + { + type: 'Text', + id: 'chart-title', + text: '📊 Analytics Dashboard', + textStyle: 'title', + }, + { + type: 'Spacer', + id: 'spacer-1', + height: 12, + }, + { + type: 'Row', + id: 'stats-row', + children: [ + { + type: 'Card', + id: 'stat-1', + title: '12.5K', + subtitle: 'Total Users', + children: [ + { + type: 'Text', + id: 'stat-1-change', + text: '↑ 12% from last month', + textStyle: 'caption', + }, + ], + }, + { + type: 'Card', + id: 'stat-2', + title: '3.2K', + subtitle: 'Active Today', + children: [ + { + type: 'Text', + id: 'stat-2-change', + text: '↑ 8% from yesterday', + textStyle: 'caption', + }, + ], + }, + ], + }, + { + type: 'Card', + id: 'chart-card', + title: 'Weekly Activity', + children: [ + { + type: 'Row', + id: 'chart-bars', + horizontalAlignment: 'spaceAround', + children: [ + { type: 'Text', id: 'bar-1', text: '▓▓▓', textStyle: 'code' }, + { type: 'Text', id: 'bar-2', text: '▓▓▓▓', textStyle: 'code' }, + { type: 'Text', id: 'bar-3', text: '▓▓', textStyle: 'code' }, + { type: 'Text', id: 'bar-4', text: '▓▓▓▓▓', textStyle: 'code' }, + { type: 'Text', id: 'bar-5', text: '▓▓▓', textStyle: 'code' }, + { type: 'Text', id: 'bar-6', text: '▓▓▓▓', textStyle: 'code' }, + { type: 'Text', id: 'bar-7', text: '▓▓', textStyle: 'code' }, + ], + }, + { + type: 'Row', + id: 'chart-labels', + horizontalAlignment: 'spaceAround', + children: [ + { type: 'Text', id: 'label-1', text: 'Mon', textStyle: 'caption' }, + { type: 'Text', id: 'label-2', text: 'Tue', textStyle: 'caption' }, + { type: 'Text', id: 'label-3', text: 'Wed', textStyle: 'caption' }, + { type: 'Text', id: 'label-4', text: 'Thu', textStyle: 'caption' }, + { type: 'Text', id: 'label-5', text: 'Fri', textStyle: 'caption' }, + { type: 'Text', id: 'label-6', text: 'Sat', textStyle: 'caption' }, + { type: 'Text', id: 'label-7', text: 'Sun', textStyle: 'caption' }, + ], + }, + ], + }, + ], + } as Types.Node, +}; + +// Demo responses for different queries +export function getDemoResponse(query: string): { text: string; surface?: Types.A2uiMessage } { + const q = query.toLowerCase(); + + if (q.includes('restaurant') || q.includes('food') || q.includes('eat') || q.includes('dinner')) { + return { + text: 'I found some great restaurants near you! Here are my top recommendations:', + surface: DEMO_RESTAURANT_SURFACE, + }; + } + + if (q.includes('contact') || q.includes('john') || q.includes('smith') || q.includes('person')) { + return { + text: 'Here\'s the contact information you requested:', + surface: DEMO_CONTACT_SURFACE, + }; + } + + if (q.includes('analytics') || q.includes('chart') || q.includes('stats') || q.includes('dashboard')) { + return { + text: 'Here\'s your analytics dashboard with the latest data:', + surface: DEMO_CHART_SURFACE, + }; + } + + if (q.includes('hello') || q.includes('hi') || q.includes('hey')) { + return { + text: 'Hello! 👋 I\'m your A2UI demo agent. Try asking me about restaurants, contacts, or analytics to see interactive UI surfaces!', + surface: DEMO_WELCOME_SURFACE, + }; + } + + if (q.includes('help') || q.includes('what can you do')) { + return { + text: 'I can demonstrate A2UI\'s capabilities! Try these:\n\n• "Find restaurants nearby"\n• "Show me John Smith\'s contact"\n• "Show analytics dashboard"\n\nEach will display an interactive UI surface!', + }; + } + + // Default response + return { + text: 'I received your message! In a production environment, I would connect to an A2A server powered by Gemini or another AI. For now, try:\n\n• "Find restaurants"\n• "Show contact"\n• "Analytics dashboard"', + }; +} diff --git a/samples/client/nativescript/src/app/services/a2a.service.ts b/samples/client/nativescript/src/app/services/a2a.service.ts new file mode 100644 index 00000000..8bb34fd3 --- /dev/null +++ b/samples/client/nativescript/src/app/services/a2a.service.ts @@ -0,0 +1,166 @@ +import { Injectable, signal, computed } from '@angular/core'; +import { Http, HttpResponse } from '@nativescript/core'; +import { Types } from '../../a2ui-lit-types'; + +export interface AgentCard { + name: string; + description?: string; + icon?: string; + capabilities?: string[]; + version?: string; + provider?: string; +} + +export interface MessagePart { + type: 'text' | 'file' | 'data'; + text?: string; + mimeType?: string; + data?: unknown; +} + +export interface A2aMessage { + role: 'user' | 'agent'; + parts: MessagePart[]; + timestamp?: number; + taskId?: string; +} + +export interface ChatMessage { + id: string; + role: 'user' | 'agent'; + content: string; + timestamp: Date; + surfaces?: Types.A2uiMessage[]; + status?: 'sending' | 'sent' | 'error'; +} + +@Injectable({ providedIn: 'root' }) +export class A2aService { + // Configure your A2A server endpoint here + private readonly serverUrl = 'http://localhost:10000'; + private readonly endpoint = '/a2a'; + + private readonly _connected = signal(false); + private readonly _agentCard = signal(null); + private readonly _loading = signal(false); + private abortController: AbortController | null = null; + + readonly connected = this._connected.asReadonly(); + readonly agentCard = this._agentCard.asReadonly(); + readonly loading = this._loading.asReadonly(); + + readonly agentName = computed(() => this._agentCard()?.name ?? 'A2UI Agent'); + readonly agentDescription = computed(() => this._agentCard()?.description ?? 'Powered by Google AI'); + + async connect(): Promise { + try { + const card = await this.getAgentCard(); + if (card) { + this._agentCard.set(card); + this._connected.set(true); + return true; + } + } catch (error) { + console.error('Failed to connect to A2A server:', error); + this._connected.set(false); + } + return false; + } + + async getAgentCard(): Promise { + try { + const response = await Http.request({ + url: `${this.serverUrl}/.well-known/agent.json`, + method: 'GET', + headers: { 'Content-Type': 'application/json' }, + timeout: 5000, + }); + + if (response.statusCode === 200) { + const content = response.content; + if (typeof content === 'string') { + return JSON.parse(content) as AgentCard; + } + // Handle HttpContent object + const contentObj = content as any; + if (contentObj && typeof contentObj.toJSON === 'function') { + return contentObj.toJSON() as AgentCard; + } + return contentObj as AgentCard; + } + } catch (error) { + console.log('Agent card not available, using defaults'); + } + return null; + } + + async sendMessage( + parts: MessagePart[], + onUpdate?: (data: any) => void + ): Promise { + this._loading.set(true); + + try { + const taskId = this.generateTaskId(); + const requestBody = { + jsonrpc: '2.0', + id: taskId, + method: 'tasks/send', + params: { + id: taskId, + message: { + role: 'user', + parts: parts.map(p => ({ + type: p.type, + text: p.text, + mimeType: p.mimeType, + data: p.data, + })), + }, + }, + }; + + const response = await Http.request({ + url: `${this.serverUrl}${this.endpoint}`, + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + }, + content: JSON.stringify(requestBody), + timeout: 60000, + }); + + if (response.statusCode === 200) { + const data = typeof response.content === 'string' + ? JSON.parse(response.content) + : response.content; + + if (onUpdate) { + onUpdate(data); + } + + return data; + } else { + throw new Error(`Server returned ${response.statusCode}`); + } + } catch (error) { + console.error('Error sending message:', error); + throw error; + } finally { + this._loading.set(false); + } + } + + cancelRequest(): void { + if (this.abortController) { + this.abortController.abort(); + this.abortController = null; + } + this._loading.set(false); + } + + private generateTaskId(): string { + return `task-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; + } +} diff --git a/samples/client/nativescript/src/app/services/chat.service.ts b/samples/client/nativescript/src/app/services/chat.service.ts new file mode 100644 index 00000000..623524cf --- /dev/null +++ b/samples/client/nativescript/src/app/services/chat.service.ts @@ -0,0 +1,193 @@ +import { Injectable, signal, computed, inject } from '@angular/core'; +import { A2aService, ChatMessage, MessagePart, AgentCard } from './a2a.service'; +import { Types } from '../../a2ui-lit-types'; +import { getDemoResponse } from '../demo-surfaces'; + +export type MessageStatus = 'idle' | 'sending' | 'streaming' | 'error'; + +export interface UiMessage { + id: string; + role: 'user' | 'agent'; + content: string; + timestamp: Date; + surfaces?: Types.A2uiMessage[]; + status: 'sending' | 'sent' | 'error'; + actions?: Types.Action[]; +} + +@Injectable({ providedIn: 'root' }) +export class ChatService { + private readonly a2aService = inject(A2aService); + private demoMode = true; // Start in demo mode + + private readonly _messages = signal([]); + private readonly _status = signal('idle'); + private readonly _currentSurface = signal(null); + + readonly messages = this._messages.asReadonly(); + readonly status = this._status.asReadonly(); + readonly currentSurface = this._currentSurface.asReadonly(); + readonly loading = this.a2aService.loading; + readonly agentCard = this.a2aService.agentCard; + readonly agentName = this.a2aService.agentName; + readonly connected = this.a2aService.connected; + + readonly hasMessages = computed(() => this._messages().length > 0); + readonly lastMessage = computed(() => { + const msgs = this._messages(); + return msgs.length > 0 ? msgs[msgs.length - 1] : null; + }); + + async connect(): Promise { + const connected = await this.a2aService.connect(); + this.demoMode = !connected; + return connected; + } + + async sendMessage(text: string): Promise { + if (!text.trim()) return; + + const userMessage: UiMessage = { + id: this.generateId(), + role: 'user', + content: text, + timestamp: new Date(), + status: 'sent', + }; + + this._messages.update(msgs => [...msgs, userMessage]); + this._status.set('sending'); + + // Create placeholder agent message + const agentMessageId = this.generateId(); + const agentMessage: UiMessage = { + id: agentMessageId, + role: 'agent', + content: '', + timestamp: new Date(), + status: 'sending', + }; + + this._messages.update(msgs => [...msgs, agentMessage]); + + // Use demo mode if no server connection + if (this.demoMode) { + // Simulate network delay for realism + await new Promise(resolve => setTimeout(resolve, 800)); + this.processDemoResponse(agentMessageId, text); + this._status.set('idle'); + return; + } + + try { + const response = await this.a2aService.sendMessage([{ type: 'text', text }]); + + this.processResponse(agentMessageId, response); + this._status.set('idle'); + } catch (error) { + // Fallback to demo mode on error + this.processDemoResponse(agentMessageId, text); + this._status.set('idle'); + } + } + + private processDemoResponse(messageId: string, query: string): void { + const demoResponse = getDemoResponse(query); + const surfaces: Types.A2uiMessage[] = []; + + if (demoResponse.surface) { + surfaces.push(demoResponse.surface); + this._currentSurface.set(demoResponse.surface); + } + + this._messages.update(msgs => + msgs.map(m => + m.id === messageId + ? { + ...m, + content: demoResponse.text, + status: 'sent' as const, + surfaces, + } + : m + ) + ); + } + + private processResponse(messageId: string, response: any): void { + let content = ''; + let surfaces: Types.A2uiMessage[] = []; + let actions: Types.Action[] = []; + + try { + // Handle A2A response format + const result = response?.result; + + if (result?.status?.message?.parts) { + for (const part of result.status.message.parts) { + if (part.type === 'text' && part.text) { + content += part.text; + } + + // Check for A2UI content + if (part.metadata?.['a2ui/surface']) { + const surface = part.metadata['a2ui/surface'] as Types.A2uiMessage; + surfaces.push(surface); + this._currentSurface.set(surface); + } + } + } + + // Also check for artifacts + if (result?.artifacts) { + for (const artifact of result.artifacts) { + if (artifact.parts) { + for (const part of artifact.parts) { + if (part.metadata?.['a2ui/surface']) { + const surface = part.metadata['a2ui/surface'] as Types.A2uiMessage; + surfaces.push(surface); + this._currentSurface.set(surface); + } + } + } + } + } + } catch (e) { + console.error('Error processing response:', e); + content = 'Received a response but could not parse it.'; + } + + this._messages.update(msgs => + msgs.map(m => + m.id === messageId + ? { + ...m, + content: content || 'Response received.', + status: 'sent' as const, + surfaces, + actions, + } + : m + ) + ); + } + + handleAction(action: Types.Action): void { + console.log('Action triggered:', action); + // Send action back to agent if needed + const actionId = action.id || action.name; + if (actionId) { + this.sendMessage(`[Action: ${actionId}]`); + } + } + + clearMessages(): void { + this._messages.set([]); + this._currentSurface.set(null); + this._status.set('idle'); + } + + private generateId(): string { + return `msg-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; + } +} diff --git a/samples/client/nativescript/src/app/theme.ts b/samples/client/nativescript/src/app/theme.ts new file mode 100644 index 00000000..dd37a179 --- /dev/null +++ b/samples/client/nativescript/src/app/theme.ts @@ -0,0 +1,119 @@ +/* + * 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 { Types } from '@a2ui/lit/0.8'; + +/** + * Default theme for NativeScript A2UI renderer. + * This is a minimal theme configuration - you can extend it as needed. + */ +export const defaultTheme: Types.Theme = { + components: { + AudioPlayer: {}, + Button: {}, + Card: {}, + CheckBox: { + container: {}, + element: {}, + label: {}, + }, + Column: {}, + DateTimeInput: { + container: {}, + element: {}, + label: {}, + }, + Divider: {}, + Icon: {}, + Image: { + all: {}, + avatar: {}, + header: {}, + icon: {}, + largeFeature: {}, + mediumFeature: {}, + smallFeature: {}, + }, + List: {}, + Modal: { + backdrop: {}, + element: {}, + }, + MultipleChoice: { + container: {}, + element: {}, + label: {}, + }, + Row: {}, + Slider: { + container: {}, + element: {}, + label: {}, + }, + Tabs: { + container: {}, + controls: { all: {}, selected: {} }, + element: {}, + }, + Text: { + all: {}, + h1: {}, + h2: {}, + h3: {}, + h4: {}, + h5: {}, + body: {}, + caption: {}, + }, + TextField: { + container: {}, + element: {}, + label: {}, + }, + Video: {}, + }, + elements: { + a: {}, + audio: {}, + body: {}, + button: {}, + h1: {}, + h2: {}, + h3: {}, + h4: {}, + h5: {}, + iframe: {}, + input: {}, + p: {}, + pre: {}, + textarea: {}, + video: {}, + }, + markdown: { + p: [], + h1: [], + h2: [], + h3: [], + h4: [], + h5: [], + ul: [], + ol: [], + li: [], + a: [], + strong: [], + em: [], + }, +}; diff --git a/samples/client/nativescript/src/main.ts b/samples/client/nativescript/src/main.ts index dd22aaef..e9066d74 100644 --- a/samples/client/nativescript/src/main.ts +++ b/samples/client/nativescript/src/main.ts @@ -6,19 +6,26 @@ import { } from '@nativescript/angular'; import { provideZonelessChangeDetection } from '@angular/core'; import { withInterceptorsFromDi } from '@angular/common/http'; -// import { routes } from './app/app.routes'; import { App } from './app/app'; -import { Catalog } from '@a2ui/nativescript'; +import { Catalog, Theme, MessageProcessor } from '@a2ui/nativescript'; import { NativeScriptCatalog } from './app/catalog'; +import { defaultTheme } from './app/theme'; +import { A2aService } from './app/services/a2a.service'; +import { ChatService } from './app/services/chat.service'; runNativeScriptAngularApp({ appModuleBootstrap: () => { return bootstrapApplication(App, { providers: [ provideNativeScriptHttpClient(withInterceptorsFromDi()), - // provideNativeScriptRouter(routes), provideZonelessChangeDetection(), + // A2UI Renderer providers { provide: Catalog, useValue: NativeScriptCatalog }, + { provide: Theme, useValue: defaultTheme }, + MessageProcessor, + // Chat services + A2aService, + ChatService, ], }); }, diff --git a/samples/client/nativescript/tsconfig.json b/samples/client/nativescript/tsconfig.json index 8798be96..c3a0f70c 100644 --- a/samples/client/nativescript/tsconfig.json +++ b/samples/client/nativescript/tsconfig.json @@ -14,11 +14,14 @@ "~/*": ["src/*"], "@/*": ["src/*"], "@a2ui/nativescript": ["../../../renderers/nativescript/src/public-api.ts"], - "@a2ui/lit": ["../../../renderers/lit/src/index.ts"], - "@a2ui/lit/*": ["../../../renderers/lit/src/*"] + "@a2ui/lit": ["src/a2ui-lit-types.ts"], + "@a2ui/lit/0.8": ["src/a2ui-lit-types.ts"], + "@angular/core": ["node_modules/@angular/core"], + "rxjs": ["node_modules/rxjs"], + "rxjs/*": ["node_modules/rxjs/*"] } }, - "include": ["src/tests/**/*.ts", "src/**/*.ios.ts", "src/**/*.android.ts"], + "include": ["src/**/*.ts", "../../../renderers/nativescript/src/**/*.ts"], "files": ["./src/main.ts", "./references.d.ts", "./src/polyfills.ts"], "exclude": ["node_modules", "platforms", "e2e"] } diff --git a/samples/client/nativescript/webpack.config.js b/samples/client/nativescript/webpack.config.js index 45573416..1238cacc 100644 --- a/samples/client/nativescript/webpack.config.js +++ b/samples/client/nativescript/webpack.config.js @@ -1,4 +1,5 @@ const webpack = require("@nativescript/webpack"); +const { resolve } = require("path"); module.exports = (env) => { webpack.init(env); @@ -6,5 +7,25 @@ module.exports = (env) => { // Learn how to customize: // https://docs.nativescript.org/webpack + webpack.chainWebpack((config) => { + const appNodeModules = resolve(__dirname, 'node_modules'); + const litTypesPath = resolve(__dirname, '../../../renderers/lit/src/0.8/types'); + + // Configure alias to resolve @a2ui packages from source + config.resolve.alias.set('@a2ui/nativescript', resolve(__dirname, '../../../renderers/nativescript/src/public-api.ts')); + + // Point to our custom NativeScript-compatible entry for lit types + config.resolve.alias.set('@a2ui/lit/0.8', resolve(__dirname, 'src/a2ui-lit-types.ts')); + config.resolve.alias.set('@a2ui/lit', resolve(__dirname, 'src/a2ui-lit-types.ts')); + + // Ensure all modules resolve from the app's node_modules + config.resolve.modules.prepend(appNodeModules); + + // Add extension alias for .js -> .ts resolution + config.resolve.extensionAlias = { + '.js': ['.ts', '.js'], + }; + }); + return webpack.resolveConfig(); }; From 4d48de0f11dbb0f876b7090334cf62445626f91d Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Thu, 1 Jan 2026 09:51:07 -0800 Subject: [PATCH 3/9] feat: server configuration and adjustments to components --- .../client/nativescript/src/a2ui-lit-types.ts | 1 + samples/client/nativescript/src/app/app.ts | 18 ++++- .../src/app/components/canvas.component.ts | 8 +- .../components/message-bubble.component.ts | 6 +- .../src/app/services/a2a.service.ts | 18 +++-- .../src/app/services/chat.service.ts | 81 +++++++++++++------ 6 files changed, 92 insertions(+), 40 deletions(-) diff --git a/samples/client/nativescript/src/a2ui-lit-types.ts b/samples/client/nativescript/src/a2ui-lit-types.ts index d2f57ded..4e34d9a6 100644 --- a/samples/client/nativescript/src/a2ui-lit-types.ts +++ b/samples/client/nativescript/src/a2ui-lit-types.ts @@ -429,6 +429,7 @@ export interface A2uiMessage { root?: Node | SimpleNode; surfaceId?: string; data?: Record; + dataModels?: DataMap; } export interface Surface { diff --git a/samples/client/nativescript/src/app/app.ts b/samples/client/nativescript/src/app/app.ts index 32977863..36a8056e 100644 --- a/samples/client/nativescript/src/app/app.ts +++ b/samples/client/nativescript/src/app/app.ts @@ -1,7 +1,6 @@ import { Component, NO_ERRORS_SCHEMA, OnInit, inject } from '@angular/core'; import { NativeScriptCommonModule } from '@nativescript/angular'; import { isIOS, Screen } from '@nativescript/core'; -import { Renderer } from '@a2ui/nativescript'; import { Types } from '../a2ui-lit-types'; import { ChatService } from './services/chat.service'; import { ChatInputComponent } from './components/chat-input.component'; @@ -13,7 +12,6 @@ import { CanvasComponent } from './components/canvas.component'; standalone: true, imports: [ NativeScriptCommonModule, - Renderer, ChatInputComponent, ChatHistoryComponent, CanvasComponent, @@ -41,7 +39,8 @@ import { CanvasComponent } from './components/canvas.component'; @@ -161,6 +160,10 @@ import { CanvasComponent } from './components/canvas.component'; vertical-align: bottom; margin-bottom: 8; } + + .header-status.demo-mode { + color: #f59e0b; + } `] }) export class App implements OnInit { @@ -176,6 +179,15 @@ export class App implements OnInit { }); } + getStatusText(): string { + if (this.chatService.connected()) { + return 'Connected'; + } else if (this.chatService.demoModeActive()) { + return 'Demo Mode'; + } + return 'Connecting...'; + } + onSendMessage(message: string): void { this.chatService.sendMessage(message); } diff --git a/samples/client/nativescript/src/app/components/canvas.component.ts b/samples/client/nativescript/src/app/components/canvas.component.ts index c2971288..b0c647f1 100644 --- a/samples/client/nativescript/src/app/components/canvas.component.ts +++ b/samples/client/nativescript/src/app/components/canvas.component.ts @@ -7,7 +7,7 @@ import { ChatService } from '../services/chat.service'; @Component({ selector: 'a2ui-canvas', standalone: true, - imports: [NativeScriptCommonModule], + imports: [NativeScriptCommonModule, Renderer], schemas: [NO_ERRORS_SCHEMA], template: ` @@ -20,10 +20,12 @@ import { ChatService } from '../services/chat.service'; - + + a2ui-renderer + [surfaceId]="surface()!.surfaceId!" + [component]="surface()!.root!"> diff --git a/samples/client/nativescript/src/app/components/message-bubble.component.ts b/samples/client/nativescript/src/app/components/message-bubble.component.ts index 503f9be5..88d7b8be 100644 --- a/samples/client/nativescript/src/app/components/message-bubble.component.ts +++ b/samples/client/nativescript/src/app/components/message-bubble.component.ts @@ -164,6 +164,10 @@ export class MessageBubbleComponent { readonly formattedTime = computed(() => { const date = this._message().timestamp; - return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); + const hours = date.getHours(); + const minutes = date.getMinutes().toString().padStart(2, '0'); + const ampm = hours >= 12 ? 'PM' : 'AM'; + const hour12 = hours % 12 || 12; + return `${hour12}:${minutes} ${ampm}`; }); } diff --git a/samples/client/nativescript/src/app/services/a2a.service.ts b/samples/client/nativescript/src/app/services/a2a.service.ts index 8bb34fd3..ec02c3c7 100644 --- a/samples/client/nativescript/src/app/services/a2a.service.ts +++ b/samples/client/nativescript/src/app/services/a2a.service.ts @@ -37,8 +37,9 @@ export interface ChatMessage { @Injectable({ providedIn: 'root' }) export class A2aService { // Configure your A2A server endpoint here - private readonly serverUrl = 'http://localhost:10000'; - private readonly endpoint = '/a2a'; + private readonly serverUrl = 'http://localhost:10002'; + // A2A SDK uses root endpoint for JSON-RPC + private readonly endpoint = '/'; private readonly _connected = signal(false); private readonly _agentCard = signal(null); @@ -70,7 +71,7 @@ export class A2aService { async getAgentCard(): Promise { try { const response = await Http.request({ - url: `${this.serverUrl}/.well-known/agent.json`, + url: `${this.serverUrl}/.well-known/agent-card.json`, method: 'GET', headers: { 'Content-Type': 'application/json' }, timeout: 5000, @@ -101,17 +102,18 @@ export class A2aService { this._loading.set(true); try { - const taskId = this.generateTaskId(); + const messageId = this.generateTaskId(); + const requestId = this.generateTaskId(); const requestBody = { jsonrpc: '2.0', - id: taskId, - method: 'tasks/send', + id: requestId, + method: 'message/send', params: { - id: taskId, message: { + messageId: messageId, role: 'user', parts: parts.map(p => ({ - type: p.type, + kind: p.type, // A2A uses 'kind' not 'type' text: p.text, mimeType: p.mimeType, data: p.data, diff --git a/samples/client/nativescript/src/app/services/chat.service.ts b/samples/client/nativescript/src/app/services/chat.service.ts index 623524cf..51fa10e5 100644 --- a/samples/client/nativescript/src/app/services/chat.service.ts +++ b/samples/client/nativescript/src/app/services/chat.service.ts @@ -31,6 +31,10 @@ export class ChatService { readonly agentCard = this.a2aService.agentCard; readonly agentName = this.a2aService.agentName; readonly connected = this.a2aService.connected; + + // Demo mode status + private readonly _demoModeActive = signal(false); + readonly demoModeActive = this._demoModeActive.asReadonly(); readonly hasMessages = computed(() => this._messages().length > 0); readonly lastMessage = computed(() => { @@ -41,6 +45,7 @@ export class ChatService { async connect(): Promise { const connected = await this.a2aService.connect(); this.demoMode = !connected; + this._demoModeActive.set(!connected); return connected; } @@ -120,38 +125,64 @@ export class ChatService { let actions: Types.Action[] = []; try { - // Handle A2A response format + // Handle A2A JSON-RPC response format const result = response?.result; - if (result?.status?.message?.parts) { - for (const part of result.status.message.parts) { - if (part.type === 'text' && part.text) { - content += part.text; - } - - // Check for A2UI content - if (part.metadata?.['a2ui/surface']) { - const surface = part.metadata['a2ui/surface'] as Types.A2uiMessage; - surfaces.push(surface); - this._currentSurface.set(surface); - } - } + // Extract parts from the response + let parts: any[] = []; + + if (result?.kind === 'task') { + // Task response format - get message parts and artifact parts + parts = [ + ...(result.status?.message?.parts ?? []), + ...(result.artifacts ?? []).flatMap((artifact: any) => artifact.parts ?? []), + ]; + } else if (result?.kind === 'message') { + // Message response format + parts = result.parts ?? []; + } else if (result?.status?.message?.parts) { + // Alternative format + parts = result.status.message.parts; } - - // Also check for artifacts - if (result?.artifacts) { - for (const artifact of result.artifacts) { - if (artifact.parts) { - for (const part of artifact.parts) { - if (part.metadata?.['a2ui/surface']) { - const surface = part.metadata['a2ui/surface'] as Types.A2uiMessage; - surfaces.push(surface); - this._currentSurface.set(surface); - } + + // Process parts + for (const part of parts) { + // Handle text parts + if (part.kind === 'text' && part.text) { + content += part.text; + } + + // Handle data parts with A2UI content + if (part.kind === 'data' && part.data && typeof part.data === 'object') { + const data = part.data; + + // Check for A2UI message types + if ('beginRendering' in data || 'surfaceUpdate' in data) { + const surfaceData = data.beginRendering || data.surfaceUpdate; + if (surfaceData) { + console.log('Found A2UI surface:', surfaceData.surfaceId); + const surface: Types.A2uiMessage = { + surfaceId: surfaceData.surfaceId, + root: surfaceData.root, + dataModels: surfaceData.dataModels, + }; + surfaces.push(surface); + this._currentSurface.set(surface); } } } + + // Legacy: check metadata for a2ui/surface + if (part.metadata?.['a2ui/surface']) { + const surface = part.metadata['a2ui/surface'] as Types.A2uiMessage; + surfaces.push(surface); + this._currentSurface.set(surface); + } } + + // Log for debugging + console.log('Processed response - content:', content, 'surfaces:', surfaces.length); + } catch (e) { console.error('Error processing response:', e); content = 'Received a response but could not parse it.'; From ee78dc0e27230a702be6549c9140a236466b4374 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Thu, 1 Jan 2026 17:29:30 -0800 Subject: [PATCH 4/9] feat: a2ui surfaces and demo mode --- samples/client/nativescript/DEMO_MODE.md | 268 ++++ samples/client/nativescript/package-lock.json | 7 + samples/client/nativescript/package.json | 1 + .../client/nativescript/src/a2ui-lit-types.ts | 3 + samples/client/nativescript/src/app/app.ts | 343 +++-- .../src/app/components/card.component.ts | 8 +- .../app/components/chat-input.component.ts | 144 +- .../src/app/components/column.component.ts | 8 +- .../src/app/components/list.component.ts | 111 +- .../src/app/components/row.component.ts | 8 +- .../nativescript/src/app/demo-surfaces.ts | 1159 +++++++++++++++-- .../src/app/services/a2a.service.ts | 15 + .../src/app/services/chat.service.ts | 148 ++- 13 files changed, 1769 insertions(+), 454 deletions(-) create mode 100644 samples/client/nativescript/DEMO_MODE.md diff --git a/samples/client/nativescript/DEMO_MODE.md b/samples/client/nativescript/DEMO_MODE.md new file mode 100644 index 00000000..21efcf07 --- /dev/null +++ b/samples/client/nativescript/DEMO_MODE.md @@ -0,0 +1,268 @@ +# A2UI NativeScript Demo Mode + +This document explains how the demo mode works in the NativeScript A2UI sample client and the keywords you can use to trigger different UI surfaces. + +## Overview + +Demo Mode allows you to test and explore A2UI's rich UI rendering capabilities without needing a live backend server. When the app cannot connect to an A2A server (or when you manually switch to demo mode), it will respond to your messages with pre-built A2UI surfaces that showcase all available components. + +## Enabling/Disabling Demo Mode + +### Automatic Mode +- The app **starts in Demo Mode by default** +- If the A2A server is available, you can toggle between Demo and Live modes + +### Manual Toggle +1. Tap the **⋯** menu button in the header +2. Select one of: + - **"🔴 Switch to Live Mode"** - Connect to the A2A server (if available) + - **"🟢 Switch to Demo Mode"** - Use local demo surfaces + - **"Show All Demo Surfaces"** - Quickly trigger the showcase + +### Status Indicator +The header shows the current mode: +- 🟠 **"Demo Mode"** - Using local demo surfaces, server unavailable +- 🟠 **"Demo Mode (Server Available)"** - Using demos, but server is reachable +- 🟢 **"Connected to Server"** - Using live A2A backend + +--- + +## Keyword Triggers + +### ⚠️ Important: Keywords Work Within Sentences + +Keywords can appear **anywhere in your message** - you don't need to type just the keyword alone. The matching is case-insensitive and uses substring matching. + +**Examples that will trigger the restaurant surface:** +- ✅ `restaurants` +- ✅ `Show me some restaurants` +- ✅ `I want to find a good restaurant nearby` +- ✅ `What's for dinner?` +- ✅ `Where should we eat?` + +--- + +## Available Demo Surfaces + +### 🍕 Restaurant Finder +**Triggers:** `restaurant`, `food`, `eat`, `dinner`, `lunch` + +Displays a list of restaurant cards with: +- Title, rating, cuisine type, price range +- Description text +- Tag pills (Vegetarian, Full Bar, Location) +- Action buttons (Details, Reserve, Directions) + +**Example messages:** +- "Show me restaurants" +- "What's good for dinner?" +- "I'm hungry, where can I eat?" + +--- + +### 📇 Contact Card +**Triggers:** `contact`, `person`, `profile`, `john`, `sarah` + +Displays a contact profile with: +- Avatar and name +- Job title and company +- Email, phone, LinkedIn +- Dividers between sections +- Action buttons (Call, Email, Message) + +**Example messages:** +- "Show me Sarah's contact" +- "Look up this person" +- "Display a profile card" + +--- + +### 📊 Analytics Dashboard +**Triggers:** `analytics`, `chart`, `stats`, `dashboard`, `metrics` + +Displays an analytics dashboard with: +- Stat cards (Total Users, Active Today, Revenue, Uptime) +- Percentage changes with arrows +- Weekly activity bar chart + +**Example messages:** +- "Show the dashboard" +- "What are the stats?" +- "Display analytics metrics" + +--- + +### 📝 Sign Up Form +**Triggers:** `form`, `input`, `signup`, `sign up`, `register` + +Displays a form with: +- Text fields (Name, Email, Password) +- Checkbox preferences +- Divider separating sections +- Submit and Cancel buttons + +**Example messages:** +- "Show me a form" +- "I want to sign up" +- "Display input fields" + +--- + +### 📋 Task List +**Triggers:** `list`, `task`, `todo`, `items`, `scroll` + +Displays a scrollable task list with: +- Completed and pending tasks +- Check marks and metadata +- Action buttons on pending items +- Add New Task button + +**Example messages:** +- "Show my tasks" +- "Display a todo list" +- "What items do I have?" + +--- + +### 🖼️ Image Gallery +**Triggers:** `image`, `photo`, `gallery`, `picture` + +Displays an image gallery with: +- Featured large image with cover fit +- Thumbnail grid row +- Image captions +- Upload and Share buttons + +**Example messages:** +- "Show me a gallery" +- "Display some photos" +- "Show images" + +--- + +### 🔘 Button Variants +**Triggers:** `button`, `action`, `click` + +Displays all button styles: +- Primary buttons (Submit, Continue, Save) +- Secondary buttons (Cancel, Back, Skip) +- Buttons with emoji icons + +**Example messages:** +- "Show me buttons" +- "What actions can I take?" +- "Display clickable elements" + +--- + +### 🎨 Full Component Showcase +**Triggers:** `all`, `showcase`, `components`, `demo`, `everything` + +Displays a comprehensive demo of all A2UI components: +- Text styles (title, subtitle, body, caption, code) +- Layout components (Row, Column, Divider) +- Interactive components (Buttons, TextField) +- Card with action buttons +- Spacer component demo + +**Example messages:** +- "Show me everything" +- "Display all components" +- "Showcase demo" + +--- + +### 👋 Welcome Screen +**Triggers:** `hello`, `hi`, `hey`, `welcome`, `start` + +Displays the welcome card with: +- Introduction to A2UI +- List of available commands +- "Try Showcase" button + +**Example messages:** +- "Hello!" +- "Hey there" +- "Welcome" + +--- + +### ❓ Help +**Triggers:** `help`, `what can`, `commands`, `options` + +Returns a text message listing all available commands (no surface). + +**Example messages:** +- "Help" +- "What can you do?" +- "Show me the commands" + +--- + +## Keyword Reference Table + +| Surface | Keywords | Example Message | +|---------|----------|-----------------| +| Restaurant | `restaurant`, `food`, `eat`, `dinner`, `lunch` | "Find restaurants nearby" | +| Contact | `contact`, `person`, `profile`, `john`, `sarah` | "Show Sarah's profile" | +| Dashboard | `analytics`, `chart`, `stats`, `dashboard`, `metrics` | "Open the dashboard" | +| Form | `form`, `input`, `signup`, `sign up`, `register` | "I want to register" | +| List | `list`, `task`, `todo`, `items`, `scroll` | "Show my todo list" | +| Gallery | `image`, `photo`, `gallery`, `picture` | "Display photos" | +| Buttons | `button`, `action`, `click` | "Show button variants" | +| Showcase | `all`, `showcase`, `components`, `demo`, `everything` | "Show all components" | +| Welcome | `hello`, `hi`, `hey`, `welcome`, `start` | "Hi there!" | +| Help | `help`, `what can`, `commands`, `options` | "Help me" | + +--- + +## Default Response + +If your message doesn't match any keywords, you'll see: +- A default text response suggesting commands to try +- The Welcome surface with a list of available demos + +--- + +## Technical Details + +The demo mode is implemented in: +- **`demo-surfaces.ts`** - Contains all A2UI surface definitions and the `getDemoResponse()` router +- **`chat.service.ts`** - Handles mode switching and routes messages to demo or live mode + +The keyword matching uses JavaScript's `String.includes()` method with lowercase conversion, making it: +- **Case-insensitive**: "RESTAURANTS" works the same as "restaurants" +- **Substring-based**: Keywords anywhere in the message will trigger +- **First-match wins**: Keywords are checked in order; the first match determines the response + +--- + +## Adding New Demo Surfaces + +To add a new demo surface: + +1. Define the surface constant in `demo-surfaces.ts`: +```typescript +export const DEMO_MY_SURFACE: Types.A2uiMessage = { + surfaceId: 'demo-my-surface', + root: { + type: 'Column', + id: 'my-root', + children: [ + // Add your components here + ], + } as Types.Node, +}; +``` + +2. Add keyword matching in `getDemoResponse()`: +```typescript +if (q.includes('mykeyword') || q.includes('otherkeyword')) { + return { + text: 'Here is my custom surface:', + surface: DEMO_MY_SURFACE, + }; +} +``` + +3. Optionally add to `getAllDemoSurfaces()` for testing. diff --git a/samples/client/nativescript/package-lock.json b/samples/client/nativescript/package-lock.json index 438c1a21..624bff8d 100644 --- a/samples/client/nativescript/package-lock.json +++ b/samples/client/nativescript/package-lock.json @@ -20,6 +20,7 @@ "@google/genai": "^1.22.0", "@nativescript/angular": "21.0.0-rc.2", "@nativescript/core": "^9.0.0", + "@nativescript/iqkeyboardmanager": "^2.1.2", "rxjs": "~7.8.0", "zone.js": "~0.16.0" }, @@ -4885,6 +4886,12 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/@nativescript/iqkeyboardmanager": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@nativescript/iqkeyboardmanager/-/iqkeyboardmanager-2.1.2.tgz", + "integrity": "sha512-0ByRlNj+/LsAQepSj9rBs5uKXgr0PkrherHbI9AxjgnvpnYMxKTZGQ37F9rVGwMbpink+iGkv6aK9pJrddcDWA==", + "license": "Apache-2.0" + }, "node_modules/@nativescript/tailwind": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@nativescript/tailwind/-/tailwind-2.1.1.tgz", diff --git a/samples/client/nativescript/package.json b/samples/client/nativescript/package.json index 5efc09d2..f5977f6a 100644 --- a/samples/client/nativescript/package.json +++ b/samples/client/nativescript/package.json @@ -16,6 +16,7 @@ "@google/genai": "^1.22.0", "@nativescript/angular": "21.0.0-rc.2", "@nativescript/core": "^9.0.0", + "@nativescript/iqkeyboardmanager": "^2.1.2", "rxjs": "~7.8.0", "zone.js": "~0.16.0" }, diff --git a/samples/client/nativescript/src/a2ui-lit-types.ts b/samples/client/nativescript/src/a2ui-lit-types.ts index 4e34d9a6..2792bc6c 100644 --- a/samples/client/nativescript/src/a2ui-lit-types.ts +++ b/samples/client/nativescript/src/a2ui-lit-types.ts @@ -408,10 +408,13 @@ export interface SimpleNode { url?: string; src?: string; fit?: 'cover' | 'contain' | 'fill'; + usageHint?: string; placeholder?: string; value?: string; helperText?: string; + secure?: boolean; orientation?: 'horizontal' | 'vertical'; + direction?: 'horizontal' | 'vertical'; height?: number; width?: number | string; horizontalAlignment?: 'start' | 'center' | 'end' | 'spaceBetween' | 'spaceAround'; diff --git a/samples/client/nativescript/src/app/app.ts b/samples/client/nativescript/src/app/app.ts index 36a8056e..0c2b3de6 100644 --- a/samples/client/nativescript/src/app/app.ts +++ b/samples/client/nativescript/src/app/app.ts @@ -1,14 +1,14 @@ -import { Component, NO_ERRORS_SCHEMA, OnInit, inject } from '@angular/core'; -import { NativeScriptCommonModule } from '@nativescript/angular'; -import { isIOS, Screen } from '@nativescript/core'; -import { Types } from '../a2ui-lit-types'; -import { ChatService } from './services/chat.service'; -import { ChatInputComponent } from './components/chat-input.component'; -import { ChatHistoryComponent } from './components/chat-history.component'; -import { CanvasComponent } from './components/canvas.component'; +import { Component, NO_ERRORS_SCHEMA, OnInit, inject } from "@angular/core"; +import { NativeScriptCommonModule } from "@nativescript/angular"; +import { isIOS, Screen, Dialogs } from "@nativescript/core"; +import { Types } from "../a2ui-lit-types"; +import { ChatService } from "./services/chat.service"; +import { ChatInputComponent } from "./components/chat-input.component"; +import { ChatHistoryComponent } from "./components/chat-history.component"; +import { CanvasComponent } from "./components/canvas.component"; @Component({ - selector: 'ns-app', + selector: "ns-app", standalone: true, imports: [ NativeScriptCommonModule, @@ -18,153 +18,161 @@ import { CanvasComponent } from './components/canvas.component'; ], schemas: [NO_ERRORS_SCHEMA], template: ` - - + [class.ios]="isIOS" + > - - + rows="auto" + columns="auto, *, auto" + > - + - - + - - - + - - + + + + - - - + @if (chatService.currentSurface()) { + + } + - - + *ngIf="chatService.loading()" + > + - + - + - `, - styles: [` - .app-container { - background: linear-gradient(180deg, #0a0a1f 0%, #12122e 50%, #1a1a3e 100%); - background-color: #0f0f23; - } - - .app-container.ios { - padding-top: 48; - } - - .app-header { - padding: 16; - border-bottom-width: 1; - border-bottom-color: #2a2a4a; - } - - .header-avatar { - width: 44; - height: 44; - background-color: #6366f1; - border-radius: 22; - vertical-align: center; - } - - .avatar-text { - font-size: 20; - text-align: center; - vertical-align: center; - height: 44; - } - - .header-content { - margin-left: 12; - vertical-align: center; - } - - .header-title { - font-size: 18; - font-weight: 600; - color: #ffffff; - } - - .header-status { - font-size: 12; - color: #9ca3af; - margin-top: 2; - } - - .header-status.connected { - color: #22c55e; - } - - .header-actions { - vertical-align: center; - } - - .header-action-btn { - font-size: 24; - color: #6b7280; - padding: 8; - } - - .loading-container { - padding: 8 16; - horizontal-align: center; - orientation: horizontal; - } - - .loading-text { - font-size: 13; - color: #9ca3af; - margin-left: 8; - vertical-align: center; - } - - .floating-canvas { - vertical-align: bottom; - margin-bottom: 8; - } - - .header-status.demo-mode { - color: #f59e0b; - } - `] + styles: [ + ` + .app-container { + background: linear-gradient( + 180deg, + #0a0a1f 0%, + #12122e 50%, + #1a1a3e 100% + ); + background-color: #0f0f23; + } + + .app-container.ios { + padding-top: 5; + } + + .app-header { + padding: 16; + border-bottom-width: 1; + border-bottom-color: #2a2a4a; + } + + .header-avatar { + width: 44; + height: 44; + background-color: #6366f1; + border-radius: 22; + vertical-align: center; + } + + .avatar-text { + font-size: 20; + text-align: center; + vertical-align: center; + height: 44; + } + + .header-content { + margin-left: 12; + vertical-align: center; + } + + .header-title { + font-size: 18; + font-weight: 600; + color: #ffffff; + } + + .header-status { + font-size: 12; + color: #9ca3af; + margin-top: 2; + } + + .header-status.connected { + color: #22c55e; + } + + .header-status.demo-mode { + color: #f59e0b; + } + + .header-actions { + vertical-align: center; + } + + .header-action-btn { + font-size: 24; + color: #a5b4fc; + padding: 8; + background-color: #1e1b4b; + border-radius: 8; + } + + .loading-container { + padding: 8 16; + horizontal-align: center; + orientation: horizontal; + } + + .loading-text { + font-size: 13; + color: #9ca3af; + margin-left: 8; + vertical-align: center; + } + + .floating-canvas { + vertical-align: bottom; + margin-bottom: 8; + } + `, + ], }) export class App implements OnInit { readonly chatService = inject(ChatService); @@ -172,28 +180,87 @@ export class App implements OnInit { ngOnInit(): void { // Try to connect to the A2A server - this.chatService.connect().then(connected => { + this.chatService.connect().then((connected) => { if (!connected) { - console.log('Could not connect to A2A server, running in demo mode'); + console.log("Could not connect to A2A server, running in demo mode"); } }); } getStatusText(): string { - if (this.chatService.connected()) { - return 'Connected'; - } else if (this.chatService.demoModeActive()) { - return 'Demo Mode'; + if (this.chatService.demoModeActive()) { + if (this.chatService.isServerAvailable()) { + return "Demo Mode (Server Available)"; + } + return "Demo Mode"; + } else if (this.chatService.connected()) { + return "Connected to Server"; } - return 'Connecting...'; + return "Connecting..."; } onSendMessage(message: string): void { this.chatService.sendMessage(message); } - onMenuTap(): void { - // Could show action dialog for settings, clear chat, etc. - console.log('Menu tapped'); + async onMenuTap(): Promise { + const isDemo = this.chatService.demoModeActive(); + const serverAvailable = this.chatService.isServerAvailable(); + + const actions = [ + "Clear Chat", + isDemo ? "🔴 Switch to Live Mode" : "🟢 Switch to Demo Mode", + "Show All Demo Surfaces", + "Cancel", + ]; + + // Only show live mode option if server is available + if (!serverAvailable && isDemo) { + actions[1] = "⚠️ Live Mode (Server Unavailable)"; + } + + const result = await Dialogs.action({ + title: "A2UI Demo Options", + message: `Current Mode: ${isDemo ? "Demo" : "Live"}\nServer: ${ + serverAvailable ? "Available" : "Unavailable" + }`, + actions: actions, + cancelButtonText: "Cancel", + }); + + switch (result) { + case "Clear Chat": + this.chatService.clearMessages(); + break; + + case "🔴 Switch to Live Mode": + if (serverAvailable) { + this.chatService.setDemoMode(false); + await Dialogs.alert({ + title: "Live Mode Enabled", + message: "Messages will now be sent to the A2A server.", + okButtonText: "OK", + }); + } + break; + + case "🟢 Switch to Demo Mode": + this.chatService.setDemoMode(true); + break; + + case "⚠️ Live Mode (Server Unavailable)": + await Dialogs.alert({ + title: "Server Unavailable", + message: + "The A2A server is not reachable. Make sure it's running on localhost:10002 and restart the app.", + okButtonText: "OK", + }); + break; + + case "Show All Demo Surfaces": + // Send a showcase message to display all components + this.chatService.sendMessage("showcase"); + break; + } } } diff --git a/samples/client/nativescript/src/app/components/card.component.ts b/samples/client/nativescript/src/app/components/card.component.ts index 7d9e445a..a42dc7ee 100644 --- a/samples/client/nativescript/src/app/components/card.component.ts +++ b/samples/client/nativescript/src/app/components/card.component.ts @@ -6,7 +6,7 @@ import { Types, SimpleNode, Action } from '../../a2ui-lit-types'; @Component({ selector: 'a2ui-card', standalone: true, - imports: [NativeScriptCommonModule], + imports: [NativeScriptCommonModule, Renderer], changeDetection: ChangeDetectionStrategy.OnPush, template: ` @@ -39,7 +39,11 @@ import { Types, SimpleNode, Action } from '../../a2ui-lit-types'; - + + diff --git a/samples/client/nativescript/src/app/components/chat-input.component.ts b/samples/client/nativescript/src/app/components/chat-input.component.ts index 6e81099e..f9dfdd07 100644 --- a/samples/client/nativescript/src/app/components/chat-input.component.ts +++ b/samples/client/nativescript/src/app/components/chat-input.component.ts @@ -1,19 +1,26 @@ -import { Component, EventEmitter, Output, signal, inject, NO_ERRORS_SCHEMA } from '@angular/core'; -import { NativeScriptCommonModule } from '@nativescript/angular'; -import { isIOS } from '@nativescript/core'; +import { + Component, + EventEmitter, + Output, + signal, + inject, + NO_ERRORS_SCHEMA, +} from "@angular/core"; +import { NativeScriptCommonModule } from "@nativescript/angular"; +import { isIOS } from "@nativescript/core"; @Component({ - selector: 'a2ui-chat-input', + selector: "a2ui-chat-input", standalone: true, imports: [NativeScriptCommonModule], template: ` - - - + + autocapitalizationType="sentences" + > - - - - `, - styles: [` - .input-container { - background-color: #1a1a2e; - border-radius: 24; - margin: 8 16; - padding: 4 8 4 16; - } - - .input-container.ios { - margin-bottom: 24; - } - - .message-input { - font-size: 16; - color: #ffffff; - background-color: transparent; - border-width: 0; - padding: 12 0; - } - - .message-input:focus { - border-width: 0; - } - - .send-button { - background-color: #3a3a5c; - border-radius: 22; - margin: 2; - } - - .send-button.active { - background-color: #6366f1; - } - - .send-icon { - font-size: 20; - font-weight: bold; - color: #ffffff; - } - `], + styles: [ + ` + .input-container { + background-color: black; + border-radius: 28; + border-width: 1; + border-color: #2a2a4a; + margin: 8; + padding: 4 6 4 16; + } + + .input-container.ios { + margin-bottom: 24; + } + + .message-input { + font-size: 16; + color: #ffffff; + background-color: transparent; + border-width: 0; + padding: 12 0; + placeholder-color: #999; + } + + .message-input:focus { + border-width: 0; + } + + .send-button { + background-color: #3a3a5c; + border-radius: 22; + margin: 2 0 2 2; + } + + .send-button.active { + background-color: #6366f1; + } + + .send-icon { + font-size: 20; + font-weight: bold; + color: #ffffff; + } + `, + ], schemas: [NO_ERRORS_SCHEMA], }) export class ChatInputComponent { @Output() send = new EventEmitter(); - - readonly inputText = signal(''); + + readonly inputText = signal(""); readonly isIOS = isIOS; onTextChange(event: any): void { - this.inputText.set(event.value || ''); + this.inputText.set(event.value || ""); } onSend(): void { const text = this.inputText().trim(); if (text) { this.send.emit(text); - this.inputText.set(''); + this.inputText.set(""); } } } diff --git a/samples/client/nativescript/src/app/components/column.component.ts b/samples/client/nativescript/src/app/components/column.component.ts index 05f2fcc6..f5f03a22 100644 --- a/samples/client/nativescript/src/app/components/column.component.ts +++ b/samples/client/nativescript/src/app/components/column.component.ts @@ -6,14 +6,18 @@ import { Types, SimpleNode } from '../../a2ui-lit-types'; @Component({ selector: 'a2ui-column', standalone: true, - imports: [NativeScriptCommonModule], + imports: [NativeScriptCommonModule, Renderer], changeDetection: ChangeDetectionStrategy.OnPush, template: ` - + + `, diff --git a/samples/client/nativescript/src/app/components/list.component.ts b/samples/client/nativescript/src/app/components/list.component.ts index c3670739..afd3ef6f 100644 --- a/samples/client/nativescript/src/app/components/list.component.ts +++ b/samples/client/nativescript/src/app/components/list.component.ts @@ -6,106 +6,47 @@ import { Types, SimpleNode } from '../../a2ui-lit-types'; @Component({ selector: 'a2ui-list', standalone: true, - imports: [NativeScriptCommonModule], + imports: [NativeScriptCommonModule, Renderer], changeDetection: ChangeDetectionStrategy.OnPush, template: ` - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + `, styles: [` .a2ui-list { background-color: transparent; } - .list-item { - padding: 12 16; - background-color: #1e1e3f; - margin: 4 0; - border-radius: 8; - } - - .list-item-leading { - margin-right: 12; - vertical-align: center; - } - - .list-item-content { - vertical-align: center; - } - - .list-item-title { - font-size: 16; - font-weight: 500; - color: #ffffff; - } - - .list-item-subtitle { - font-size: 13; - color: #9ca3af; - margin-top: 2; - } - - .list-item-trailing { - margin-left: 12; - vertical-align: center; + .list-container { + padding: 4; } `], schemas: [NO_ERRORS_SCHEMA], }) export class ListComponent extends DynamicComponent { - get items(): any[] { + get children(): SimpleNode[] { const node = this.node as SimpleNode; - return node?.items || node?.children || []; + return node?.children || node?.items || []; } - onItemTap(event: any): void { - const item = this.items[event.index]; - const action = item?.actions?.[0]; - if (action) { - this.sendAction(action); - } + get scrollOrientation(): 'vertical' | 'horizontal' { + const node = this.node as SimpleNode; + return node?.direction === 'horizontal' ? 'horizontal' : 'vertical'; + } + + get stackOrientation(): 'vertical' | 'horizontal' { + const node = this.node as SimpleNode; + return node?.direction === 'horizontal' ? 'horizontal' : 'vertical'; } } diff --git a/samples/client/nativescript/src/app/components/row.component.ts b/samples/client/nativescript/src/app/components/row.component.ts index 87d2ea20..8283db7d 100644 --- a/samples/client/nativescript/src/app/components/row.component.ts +++ b/samples/client/nativescript/src/app/components/row.component.ts @@ -6,7 +6,7 @@ import { Types, SimpleNode } from '../../a2ui-lit-types'; @Component({ selector: 'a2ui-row', standalone: true, - imports: [NativeScriptCommonModule], + imports: [NativeScriptCommonModule, Renderer], changeDetection: ChangeDetectionStrategy.OnPush, template: ` - + + `, diff --git a/samples/client/nativescript/src/app/demo-surfaces.ts b/samples/client/nativescript/src/app/demo-surfaces.ts index 5a785579..9d5dfab4 100644 --- a/samples/client/nativescript/src/app/demo-surfaces.ts +++ b/samples/client/nativescript/src/app/demo-surfaces.ts @@ -1,11 +1,27 @@ import { Types } from '../a2ui-lit-types'; /** - * Demo surfaces for showcasing A2UI capabilities. - * These are used when no backend server is connected. + * Comprehensive demo surfaces for showcasing ALL A2UI capabilities. + * These are used when running in demo mode (no backend server connected). + * + * Trigger phrases: + * - "hello", "welcome" → Welcome surface + * - "restaurant", "food", "eat" → Restaurant cards with actions + * - "contact", "person" → Contact card with Row/Column layout + * - "analytics", "chart", "dashboard" → Stats dashboard + * - "form", "input", "signup" → Form with TextField, CheckBox + * - "list", "items", "scroll" → List component demo + * - "image", "photo", "gallery" → Image gallery + * - "tabs", "sections" → Tabs component + * - "buttons", "actions" → All button variants + * - "all", "showcase", "components" → Full component showcase */ +// ============================================================ +// WELCOME SURFACE +// ============================================================ export const DEMO_WELCOME_SURFACE: Types.A2uiMessage = { + surfaceId: 'demo-welcome', root: { type: 'Column', id: 'welcome-root', @@ -13,13 +29,13 @@ export const DEMO_WELCOME_SURFACE: Types.A2uiMessage = { { type: 'Card', id: 'welcome-card', - title: 'Welcome to A2UI', - subtitle: 'Agent-to-User Interface', + title: 'Welcome to A2UI Demo', + subtitle: 'Interactive Agent-to-User Interface', children: [ { type: 'Text', id: 'welcome-text', - text: 'A2UI enables AI agents to generate rich, interactive user interfaces that work across any platform.', + text: 'This demo showcases A2UI\'s capabilities on NativeScript. Try these commands to see different UI surfaces:', textStyle: 'body', }, { @@ -27,23 +43,35 @@ export const DEMO_WELCOME_SURFACE: Types.A2uiMessage = { id: 'spacer-1', height: 16, }, + { + type: 'Column', + id: 'command-list', + children: [ + { type: 'Text', id: 'cmd-1', text: '• "restaurants" - Card list with actions', textStyle: 'body' }, + { type: 'Text', id: 'cmd-2', text: '• "contact" - Contact card layout', textStyle: 'body' }, + { type: 'Text', id: 'cmd-3', text: '• "dashboard" - Analytics cards', textStyle: 'body' }, + { type: 'Text', id: 'cmd-4', text: '• "form" - Input fields & checkboxes', textStyle: 'body' }, + { type: 'Text', id: 'cmd-5', text: '• "list" - Scrollable list demo', textStyle: 'body' }, + { type: 'Text', id: 'cmd-6', text: '• "gallery" - Image showcase', textStyle: 'body' }, + { type: 'Text', id: 'cmd-7', text: '• "buttons" - All button variants', textStyle: 'body' }, + { type: 'Text', id: 'cmd-8', text: '• "showcase" - Full component demo', textStyle: 'body' }, + ], + }, + { + type: 'Spacer', + id: 'spacer-2', + height: 16, + }, { type: 'Row', id: 'action-row', children: [ - { - type: 'Button', - id: 'learn-more-btn', - label: 'Learn More', - variant: 'primary', - action: { name: 'learnMore' }, - }, { type: 'Button', id: 'try-demo-btn', - label: 'Try Demo', - variant: 'secondary', - action: { name: 'tryDemo' }, + label: 'Try Showcase', + variant: 'primary', + action: { name: 'showcase' }, }, ], }, @@ -53,7 +81,11 @@ export const DEMO_WELCOME_SURFACE: Types.A2uiMessage = { } as Types.Node, }; +// ============================================================ +// RESTAURANT FINDER SURFACE +// ============================================================ export const DEMO_RESTAURANT_SURFACE: Types.A2uiMessage = { + surfaceId: 'demo-restaurants', root: { type: 'Column', id: 'restaurant-root', @@ -61,7 +93,7 @@ export const DEMO_RESTAURANT_SURFACE: Types.A2uiMessage = { { type: 'Text', id: 'restaurant-title', - text: '🍕 Restaurant Finder', + text: '🍕 Top Restaurants Near You', textStyle: 'title', }, { @@ -73,35 +105,64 @@ export const DEMO_RESTAURANT_SURFACE: Types.A2uiMessage = { type: 'Card', id: 'restaurant-1', title: 'La Piazza Italiana', - subtitle: '⭐ 4.8 • Italian • $$', + subtitle: '⭐ 4.8 • Italian • $$ • 0.3 mi', children: [ { type: 'Text', id: 'restaurant-1-desc', - text: 'Authentic Italian cuisine in a cozy atmosphere. Known for fresh pasta and wood-fired pizzas.', + text: 'Authentic Italian cuisine with fresh pasta and wood-fired pizzas in a cozy atmosphere.', textStyle: 'body', }, + { + type: 'Spacer', + id: 'spacer-r1', + height: 8, + }, + { + type: 'Row', + id: 'restaurant-1-tags', + children: [ + { type: 'Text', id: 'tag-1a', text: '🌿 Vegetarian', textStyle: 'caption' }, + { type: 'Text', id: 'tag-1b', text: '🍷 Full Bar', textStyle: 'caption' }, + { type: 'Text', id: 'tag-1c', text: '📍 North Beach', textStyle: 'caption' }, + ], + }, ], actions: [ - { name: 'viewDetails', id: 'view-1', label: 'View' }, + { name: 'viewDetails', id: 'view-1', label: 'Details' }, { name: 'reserve', id: 'reserve-1', label: 'Reserve' }, + { name: 'directions', id: 'dir-1', label: 'Directions' }, ], }, { type: 'Card', id: 'restaurant-2', title: 'Sakura Garden', - subtitle: '⭐ 4.6 • Japanese • $$$', + subtitle: '⭐ 4.6 • Japanese • $$$ • 0.5 mi', children: [ { type: 'Text', id: 'restaurant-2-desc', - text: 'Premium sushi and traditional Japanese dishes. Omakase experience available.', + text: 'Premium sushi and traditional Japanese dishes. Omakase experience available nightly.', textStyle: 'body', }, + { + type: 'Spacer', + id: 'spacer-r2', + height: 8, + }, + { + type: 'Row', + id: 'restaurant-2-tags', + children: [ + { type: 'Text', id: 'tag-2a', text: '🍣 Omakase', textStyle: 'caption' }, + { type: 'Text', id: 'tag-2b', text: '🍶 Sake Bar', textStyle: 'caption' }, + { type: 'Text', id: 'tag-2c', text: '📍 Japantown', textStyle: 'caption' }, + ], + }, ], actions: [ - { name: 'viewDetails', id: 'view-2', label: 'View' }, + { name: 'viewDetails', id: 'view-2', label: 'Details' }, { name: 'reserve', id: 'reserve-2', label: 'Reserve' }, ], }, @@ -109,17 +170,31 @@ export const DEMO_RESTAURANT_SURFACE: Types.A2uiMessage = { type: 'Card', id: 'restaurant-3', title: 'The Spice Route', - subtitle: '⭐ 4.7 • Indian • $$', + subtitle: '⭐ 4.7 • Indian • $$ • 0.8 mi', children: [ { type: 'Text', id: 'restaurant-3-desc', - text: 'Rich flavors from across India. Vegetarian-friendly with vegan options.', + text: 'Rich flavors from across India. Extensive vegetarian menu with vegan options available.', textStyle: 'body', }, + { + type: 'Spacer', + id: 'spacer-r3', + height: 8, + }, + { + type: 'Row', + id: 'restaurant-3-tags', + children: [ + { type: 'Text', id: 'tag-3a', text: '🌱 Vegan Options', textStyle: 'caption' }, + { type: 'Text', id: 'tag-3b', text: '🌶️ Spicy', textStyle: 'caption' }, + { type: 'Text', id: 'tag-3c', text: '📍 Mission', textStyle: 'caption' }, + ], + }, ], actions: [ - { name: 'viewDetails', id: 'view-3', label: 'View' }, + { name: 'viewDetails', id: 'view-3', label: 'Details' }, { name: 'reserve', id: 'reserve-3', label: 'Reserve' }, ], }, @@ -127,22 +202,15 @@ export const DEMO_RESTAURANT_SURFACE: Types.A2uiMessage = { } as Types.Node, }; +// ============================================================ +// CONTACT DETAILS SURFACE +// ============================================================ export const DEMO_CONTACT_SURFACE: Types.A2uiMessage = { + surfaceId: 'demo-contact', root: { type: 'Column', id: 'contact-root', children: [ - { - type: 'Text', - id: 'contact-title', - text: '📇 Contact Details', - textStyle: 'title', - }, - { - type: 'Spacer', - id: 'spacer-1', - height: 16, - }, { type: 'Card', id: 'contact-card', @@ -152,10 +220,16 @@ export const DEMO_CONTACT_SURFACE: Types.A2uiMessage = { id: 'contact-header', children: [ { - type: 'Text', - id: 'contact-avatar', - text: '👤', - textStyle: 'title', + type: 'Column', + id: 'avatar-col', + children: [ + { + type: 'Text', + id: 'contact-avatar', + text: '👤', + textStyle: 'title', + }, + ], }, { type: 'Column', @@ -164,15 +238,21 @@ export const DEMO_CONTACT_SURFACE: Types.A2uiMessage = { { type: 'Text', id: 'contact-name', - text: 'John Smith', + text: 'Sarah Johnson', textStyle: 'subtitle', }, { type: 'Text', id: 'contact-role', - text: 'Software Engineer at Google', + text: 'Senior Product Manager at Google', textStyle: 'body', }, + { + type: 'Text', + id: 'contact-location', + text: '📍 San Francisco, CA', + textStyle: 'caption', + }, ], }, ], @@ -181,51 +261,119 @@ export const DEMO_CONTACT_SURFACE: Types.A2uiMessage = { type: 'Divider', id: 'divider-1', }, + { + type: 'Spacer', + id: 'spacer-contact-1', + height: 8, + }, { type: 'Row', id: 'contact-email-row', children: [ { type: 'Text', - id: 'email-label', + id: 'email-icon', text: '📧', }, { type: 'Text', id: 'email-value', - text: 'john.smith@example.com', + text: 'sarah.johnson@google.com', textStyle: 'body', }, ], }, + { + type: 'Spacer', + id: 'spacer-contact-2', + height: 4, + }, { type: 'Row', id: 'contact-phone-row', children: [ { type: 'Text', - id: 'phone-label', + id: 'phone-icon', text: '📱', }, { type: 'Text', id: 'phone-value', - text: '+1 (555) 123-4567', + text: '+1 (415) 555-0123', textStyle: 'body', }, ], }, - ], - actions: [ - { name: 'call', id: 'call-btn', label: 'Call' }, - { name: 'message', id: 'message-btn', label: 'Message' }, + { + type: 'Spacer', + id: 'spacer-contact-3', + height: 4, + }, + { + type: 'Row', + id: 'contact-linkedin-row', + children: [ + { + type: 'Text', + id: 'linkedin-icon', + text: '💼', + }, + { + type: 'Text', + id: 'linkedin-value', + text: 'linkedin.com/in/sarahjohnson', + textStyle: 'body', + }, + ], + }, + { + type: 'Divider', + id: 'divider-2', + }, + { + type: 'Spacer', + id: 'spacer-contact-4', + height: 8, + }, + { + type: 'Row', + id: 'contact-actions', + children: [ + { + type: 'Button', + id: 'call-btn', + label: '📞 Call', + variant: 'primary', + action: { name: 'call' }, + }, + { + type: 'Button', + id: 'email-btn', + label: '✉️ Email', + variant: 'secondary', + action: { name: 'email' }, + }, + { + type: 'Button', + id: 'msg-btn', + label: '💬 Message', + variant: 'secondary', + action: { name: 'message' }, + }, + ], + }, ], }, ], } as Types.Node, }; +// ============================================================ +// ANALYTICS DASHBOARD SURFACE +// ============================================================ export const DEMO_CHART_SURFACE: Types.A2uiMessage = { + surfaceId: 'demo-analytics', root: { type: 'Column', id: 'chart-root', @@ -243,18 +391,18 @@ export const DEMO_CHART_SURFACE: Types.A2uiMessage = { }, { type: 'Row', - id: 'stats-row', + id: 'stats-row-1', children: [ { type: 'Card', id: 'stat-1', - title: '12.5K', + title: '12,549', subtitle: 'Total Users', children: [ { type: 'Text', id: 'stat-1-change', - text: '↑ 12% from last month', + text: '↑ 12.5% from last month', textStyle: 'caption', }, ], @@ -262,50 +410,232 @@ export const DEMO_CHART_SURFACE: Types.A2uiMessage = { { type: 'Card', id: 'stat-2', - title: '3.2K', + title: '3,247', subtitle: 'Active Today', children: [ { type: 'Text', id: 'stat-2-change', - text: '↑ 8% from yesterday', + text: '↑ 8.3% from yesterday', + textStyle: 'caption', + }, + ], + }, + ], + }, + { + type: 'Spacer', + id: 'spacer-stats', + height: 8, + }, + { + type: 'Row', + id: 'stats-row-2', + children: [ + { + type: 'Card', + id: 'stat-3', + title: '$48.2K', + subtitle: 'Revenue', + children: [ + { + type: 'Text', + id: 'stat-3-change', + text: '↑ 23.1% this quarter', + textStyle: 'caption', + }, + ], + }, + { + type: 'Card', + id: 'stat-4', + title: '98.5%', + subtitle: 'Uptime', + children: [ + { + type: 'Text', + id: 'stat-4-change', + text: '✓ Exceeds SLA target', textStyle: 'caption', }, ], }, ], }, + { + type: 'Spacer', + id: 'spacer-2', + height: 12, + }, { type: 'Card', id: 'chart-card', title: 'Weekly Activity', + subtitle: 'User sessions per day', children: [ { type: 'Row', id: 'chart-bars', horizontalAlignment: 'spaceAround', children: [ - { type: 'Text', id: 'bar-1', text: '▓▓▓', textStyle: 'code' }, - { type: 'Text', id: 'bar-2', text: '▓▓▓▓', textStyle: 'code' }, - { type: 'Text', id: 'bar-3', text: '▓▓', textStyle: 'code' }, - { type: 'Text', id: 'bar-4', text: '▓▓▓▓▓', textStyle: 'code' }, - { type: 'Text', id: 'bar-5', text: '▓▓▓', textStyle: 'code' }, - { type: 'Text', id: 'bar-6', text: '▓▓▓▓', textStyle: 'code' }, - { type: 'Text', id: 'bar-7', text: '▓▓', textStyle: 'code' }, + { type: 'Column', id: 'bar-col-1', children: [ + { type: 'Text', id: 'bar-1', text: '▓\n▓\n▓', textStyle: 'code' }, + { type: 'Text', id: 'label-1', text: 'Mon', textStyle: 'caption' }, + ]}, + { type: 'Column', id: 'bar-col-2', children: [ + { type: 'Text', id: 'bar-2', text: '▓\n▓\n▓\n▓', textStyle: 'code' }, + { type: 'Text', id: 'label-2', text: 'Tue', textStyle: 'caption' }, + ]}, + { type: 'Column', id: 'bar-col-3', children: [ + { type: 'Text', id: 'bar-3', text: '▓\n▓', textStyle: 'code' }, + { type: 'Text', id: 'label-3', text: 'Wed', textStyle: 'caption' }, + ]}, + { type: 'Column', id: 'bar-col-4', children: [ + { type: 'Text', id: 'bar-4', text: '▓\n▓\n▓\n▓\n▓', textStyle: 'code' }, + { type: 'Text', id: 'label-4', text: 'Thu', textStyle: 'caption' }, + ]}, + { type: 'Column', id: 'bar-col-5', children: [ + { type: 'Text', id: 'bar-5', text: '▓\n▓\n▓', textStyle: 'code' }, + { type: 'Text', id: 'label-5', text: 'Fri', textStyle: 'caption' }, + ]}, + { type: 'Column', id: 'bar-col-6', children: [ + { type: 'Text', id: 'bar-6', text: '▓\n▓\n▓\n▓', textStyle: 'code' }, + { type: 'Text', id: 'label-6', text: 'Sat', textStyle: 'caption' }, + ]}, + { type: 'Column', id: 'bar-col-7', children: [ + { type: 'Text', id: 'bar-7', text: '▓\n▓', textStyle: 'code' }, + { type: 'Text', id: 'label-7', text: 'Sun', textStyle: 'caption' }, + ]}, + ], + }, + ], + }, + ], + } as Types.Node, +}; + +// ============================================================ +// FORM INPUT SURFACE +// ============================================================ +export const DEMO_FORM_SURFACE: Types.A2uiMessage = { + surfaceId: 'demo-form', + root: { + type: 'Column', + id: 'form-root', + children: [ + { + type: 'Text', + id: 'form-title', + text: '📝 Sign Up Form', + textStyle: 'title', + }, + { + type: 'Spacer', + id: 'spacer-form-1', + height: 16, + }, + { + type: 'Card', + id: 'form-card', + children: [ + { + type: 'TextField', + id: 'name-field', + label: 'Full Name', + placeholder: 'Enter your name', + }, + { + type: 'Spacer', + id: 'spacer-f1', + height: 12, + }, + { + type: 'TextField', + id: 'email-field', + label: 'Email Address', + placeholder: 'you@example.com', + }, + { + type: 'Spacer', + id: 'spacer-f2', + height: 12, + }, + { + type: 'TextField', + id: 'password-field', + label: 'Password', + placeholder: '••••••••', + secure: true, + }, + { + type: 'Spacer', + id: 'spacer-f3', + height: 16, + }, + { + type: 'Divider', + id: 'form-divider', + }, + { + type: 'Spacer', + id: 'spacer-f4', + height: 16, + }, + { + type: 'Text', + id: 'prefs-title', + text: 'Preferences', + textStyle: 'subtitle', + }, + { + type: 'Spacer', + id: 'spacer-f5', + height: 8, + }, + { + type: 'Row', + id: 'checkbox-row-1', + children: [ + { type: 'Text', id: 'check-1', text: '☑️ Receive email updates', textStyle: 'body' }, ], }, { type: 'Row', - id: 'chart-labels', - horizontalAlignment: 'spaceAround', + id: 'checkbox-row-2', + children: [ + { type: 'Text', id: 'check-2', text: '☐ Enable notifications', textStyle: 'body' }, + ], + }, + { + type: 'Row', + id: 'checkbox-row-3', + children: [ + { type: 'Text', id: 'check-3', text: '☑️ Accept terms & conditions', textStyle: 'body' }, + ], + }, + { + type: 'Spacer', + id: 'spacer-f6', + height: 16, + }, + { + type: 'Row', + id: 'form-actions', children: [ - { type: 'Text', id: 'label-1', text: 'Mon', textStyle: 'caption' }, - { type: 'Text', id: 'label-2', text: 'Tue', textStyle: 'caption' }, - { type: 'Text', id: 'label-3', text: 'Wed', textStyle: 'caption' }, - { type: 'Text', id: 'label-4', text: 'Thu', textStyle: 'caption' }, - { type: 'Text', id: 'label-5', text: 'Fri', textStyle: 'caption' }, - { type: 'Text', id: 'label-6', text: 'Sat', textStyle: 'caption' }, - { type: 'Text', id: 'label-7', text: 'Sun', textStyle: 'caption' }, + { + type: 'Button', + id: 'submit-btn', + label: 'Create Account', + variant: 'primary', + action: { name: 'submit' }, + }, + { + type: 'Button', + id: 'cancel-btn', + label: 'Cancel', + variant: 'secondary', + action: { name: 'cancel' }, + }, ], }, ], @@ -314,46 +644,649 @@ export const DEMO_CHART_SURFACE: Types.A2uiMessage = { } as Types.Node, }; -// Demo responses for different queries -export function getDemoResponse(query: string): { text: string; surface?: Types.A2uiMessage } { - const q = query.toLowerCase(); - - if (q.includes('restaurant') || q.includes('food') || q.includes('eat') || q.includes('dinner')) { - return { - text: 'I found some great restaurants near you! Here are my top recommendations:', - surface: DEMO_RESTAURANT_SURFACE, - }; - } - - if (q.includes('contact') || q.includes('john') || q.includes('smith') || q.includes('person')) { - return { - text: 'Here\'s the contact information you requested:', - surface: DEMO_CONTACT_SURFACE, - }; - } - - if (q.includes('analytics') || q.includes('chart') || q.includes('stats') || q.includes('dashboard')) { - return { - text: 'Here\'s your analytics dashboard with the latest data:', - surface: DEMO_CHART_SURFACE, - }; - } - - if (q.includes('hello') || q.includes('hi') || q.includes('hey')) { - return { - text: 'Hello! 👋 I\'m your A2UI demo agent. Try asking me about restaurants, contacts, or analytics to see interactive UI surfaces!', - surface: DEMO_WELCOME_SURFACE, - }; - } - - if (q.includes('help') || q.includes('what can you do')) { - return { - text: 'I can demonstrate A2UI\'s capabilities! Try these:\n\n• "Find restaurants nearby"\n• "Show me John Smith\'s contact"\n• "Show analytics dashboard"\n\nEach will display an interactive UI surface!', - }; - } - - // Default response - return { - text: 'I received your message! In a production environment, I would connect to an A2A server powered by Gemini or another AI. For now, try:\n\n• "Find restaurants"\n• "Show contact"\n• "Analytics dashboard"', - }; +// ============================================================ +// LIST COMPONENT SURFACE +// ============================================================ +export const DEMO_LIST_SURFACE: Types.A2uiMessage = { + surfaceId: 'demo-list', + root: { + type: 'Column', + id: 'list-root', + children: [ + { + type: 'Text', + id: 'list-title', + text: '📋 Task List', + textStyle: 'title', + }, + { + type: 'Spacer', + id: 'spacer-list-1', + height: 12, + }, + { + type: 'List', + id: 'task-list', + direction: 'vertical', + children: [ + { + type: 'Card', + id: 'task-1', + children: [ + { + type: 'Row', + id: 'task-1-row', + children: [ + { type: 'Text', id: 'task-1-check', text: '✅', textStyle: 'body' }, + { type: 'Column', id: 'task-1-content', children: [ + { type: 'Text', id: 'task-1-title', text: 'Complete project proposal', textStyle: 'subtitle' }, + { type: 'Text', id: 'task-1-meta', text: 'Completed yesterday', textStyle: 'caption' }, + ]}, + ], + }, + ], + }, + { + type: 'Card', + id: 'task-2', + children: [ + { + type: 'Row', + id: 'task-2-row', + children: [ + { type: 'Text', id: 'task-2-check', text: '✅', textStyle: 'body' }, + { type: 'Column', id: 'task-2-content', children: [ + { type: 'Text', id: 'task-2-title', text: 'Review design mockups', textStyle: 'subtitle' }, + { type: 'Text', id: 'task-2-meta', text: 'Completed today', textStyle: 'caption' }, + ]}, + ], + }, + ], + }, + { + type: 'Card', + id: 'task-3', + children: [ + { + type: 'Row', + id: 'task-3-row', + children: [ + { type: 'Text', id: 'task-3-check', text: '⬜', textStyle: 'body' }, + { type: 'Column', id: 'task-3-content', children: [ + { type: 'Text', id: 'task-3-title', text: 'Schedule team meeting', textStyle: 'subtitle' }, + { type: 'Text', id: 'task-3-meta', text: 'Due tomorrow', textStyle: 'caption' }, + ]}, + ], + }, + ], + actions: [ + { name: 'complete', id: 'complete-3', label: 'Done' }, + { name: 'reschedule', id: 'reschedule-3', label: 'Reschedule' }, + ], + }, + { + type: 'Card', + id: 'task-4', + children: [ + { + type: 'Row', + id: 'task-4-row', + children: [ + { type: 'Text', id: 'task-4-check', text: '⬜', textStyle: 'body' }, + { type: 'Column', id: 'task-4-content', children: [ + { type: 'Text', id: 'task-4-title', text: 'Prepare quarterly report', textStyle: 'subtitle' }, + { type: 'Text', id: 'task-4-meta', text: 'Due in 3 days', textStyle: 'caption' }, + ]}, + ], + }, + ], + actions: [ + { name: 'complete', id: 'complete-4', label: 'Done' }, + ], + }, + { + type: 'Card', + id: 'task-5', + children: [ + { + type: 'Row', + id: 'task-5-row', + children: [ + { type: 'Text', id: 'task-5-check', text: '⬜', textStyle: 'body' }, + { type: 'Column', id: 'task-5-content', children: [ + { type: 'Text', id: 'task-5-title', text: 'Update documentation', textStyle: 'subtitle' }, + { type: 'Text', id: 'task-5-meta', text: 'Due next week', textStyle: 'caption' }, + ]}, + ], + }, + ], + }, + ], + }, + { + type: 'Spacer', + id: 'spacer-list-2', + height: 12, + }, + { + type: 'Button', + id: 'add-task-btn', + label: '+ Add New Task', + variant: 'primary', + action: { name: 'addTask' }, + }, + ], + } as Types.Node, +}; + +// ============================================================ +// IMAGE GALLERY SURFACE +// ============================================================ +export const DEMO_IMAGE_SURFACE: Types.A2uiMessage = { + surfaceId: 'demo-gallery', + root: { + type: 'Column', + id: 'gallery-root', + children: [ + { + type: 'Text', + id: 'gallery-title', + text: '🖼️ Image Gallery', + textStyle: 'title', + }, + { + type: 'Text', + id: 'gallery-subtitle', + text: 'A2UI supports images with various sizing hints', + textStyle: 'caption', + }, + { + type: 'Spacer', + id: 'spacer-gallery-1', + height: 12, + }, + { + type: 'Card', + id: 'featured-image-card', + title: 'Featured Photo', + children: [ + { + type: 'Image', + id: 'featured-image', + url: 'https://picsum.photos/400/200', + fit: 'cover', + usageHint: 'largeFeature', + }, + { + type: 'Spacer', + id: 'spacer-g1', + height: 8, + }, + { + type: 'Text', + id: 'featured-caption', + text: 'Beautiful landscape photography with cover fit', + textStyle: 'caption', + }, + ], + }, + { + type: 'Spacer', + id: 'spacer-gallery-2', + height: 12, + }, + { + type: 'Row', + id: 'thumbnail-row', + children: [ + { + type: 'Card', + id: 'thumb-1', + children: [ + { + type: 'Image', + id: 'thumb-img-1', + url: 'https://picsum.photos/100/100?random=1', + usageHint: 'smallFeature', + }, + ], + }, + { + type: 'Card', + id: 'thumb-2', + children: [ + { + type: 'Image', + id: 'thumb-img-2', + url: 'https://picsum.photos/100/100?random=2', + usageHint: 'smallFeature', + }, + ], + }, + { + type: 'Card', + id: 'thumb-3', + children: [ + { + type: 'Image', + id: 'thumb-img-3', + url: 'https://picsum.photos/100/100?random=3', + usageHint: 'smallFeature', + }, + ], + }, + ], + }, + { + type: 'Spacer', + id: 'spacer-gallery-3', + height: 12, + }, + { + type: 'Row', + id: 'gallery-actions', + children: [ + { + type: 'Button', + id: 'upload-btn', + label: '📤 Upload', + variant: 'primary', + action: { name: 'upload' }, + }, + { + type: 'Button', + id: 'share-btn', + label: '🔗 Share', + variant: 'secondary', + action: { name: 'share' }, + }, + ], + }, + ], + } as Types.Node, +}; + +// ============================================================ +// BUTTON VARIANTS SURFACE +// ============================================================ +export const DEMO_BUTTONS_SURFACE: Types.A2uiMessage = { + surfaceId: 'demo-buttons', + root: { + type: 'Column', + id: 'buttons-root', + children: [ + { + type: 'Text', + id: 'buttons-title', + text: '🔘 Button Variants', + textStyle: 'title', + }, + { + type: 'Spacer', + id: 'spacer-b1', + height: 16, + }, + { + type: 'Card', + id: 'primary-section', + title: 'Primary Buttons', + subtitle: 'For main call-to-action', + children: [ + { + type: 'Row', + id: 'primary-row', + children: [ + { type: 'Button', id: 'btn-p1', label: 'Submit', variant: 'primary', action: { name: 'submit' } }, + { type: 'Button', id: 'btn-p2', label: 'Continue', variant: 'primary', action: { name: 'continue' } }, + { type: 'Button', id: 'btn-p3', label: 'Save', variant: 'primary', action: { name: 'save' } }, + ], + }, + ], + }, + { + type: 'Spacer', + id: 'spacer-b2', + height: 12, + }, + { + type: 'Card', + id: 'secondary-section', + title: 'Secondary Buttons', + subtitle: 'For alternative actions', + children: [ + { + type: 'Row', + id: 'secondary-row', + children: [ + { type: 'Button', id: 'btn-s1', label: 'Cancel', variant: 'secondary', action: { name: 'cancel' } }, + { type: 'Button', id: 'btn-s2', label: 'Back', variant: 'secondary', action: { name: 'back' } }, + { type: 'Button', id: 'btn-s3', label: 'Skip', variant: 'secondary', action: { name: 'skip' } }, + ], + }, + ], + }, + { + type: 'Spacer', + id: 'spacer-b3', + height: 12, + }, + { + type: 'Card', + id: 'icon-section', + title: 'Buttons with Icons', + subtitle: 'Using emoji as icon indicators', + children: [ + { + type: 'Row', + id: 'icon-row', + children: [ + { type: 'Button', id: 'btn-i1', label: '❤️ Like', variant: 'secondary', action: { name: 'like' } }, + { type: 'Button', id: 'btn-i2', label: '📤 Share', variant: 'secondary', action: { name: 'share' } }, + { type: 'Button', id: 'btn-i3', label: '💾 Save', variant: 'primary', action: { name: 'save' } }, + ], + }, + ], + }, + ], + } as Types.Node, +}; + +// ============================================================ +// FULL COMPONENT SHOWCASE SURFACE +// ============================================================ +export const DEMO_SHOWCASE_SURFACE: Types.A2uiMessage = { + surfaceId: 'demo-showcase', + root: { + type: 'Column', + id: 'showcase-root', + children: [ + { + type: 'Text', + id: 'showcase-title', + text: '🎨 A2UI Component Showcase', + textStyle: 'title', + }, + { + type: 'Text', + id: 'showcase-subtitle', + text: 'All available NativeScript A2UI components', + textStyle: 'caption', + }, + { + type: 'Spacer', + id: 'spacer-s1', + height: 16, + }, + // Text Styles + { + type: 'Card', + id: 'text-section', + title: '📝 Text Styles', + children: [ + { type: 'Text', id: 'text-title', text: 'Title Style', textStyle: 'title' }, + { type: 'Text', id: 'text-subtitle', text: 'Subtitle Style', textStyle: 'subtitle' }, + { type: 'Text', id: 'text-body', text: 'Body text style for regular content and paragraphs.', textStyle: 'body' }, + { type: 'Text', id: 'text-caption', text: 'Caption style for metadata and small text', textStyle: 'caption' }, + { type: 'Text', id: 'text-code', text: 'const code = "monospace";', textStyle: 'code' }, + ], + }, + { + type: 'Spacer', + id: 'spacer-s2', + height: 12, + }, + // Layout Components + { + type: 'Card', + id: 'layout-section', + title: '📐 Layout Components', + children: [ + { type: 'Text', id: 'layout-desc', text: 'Row (horizontal) and Column (vertical) layouts:', textStyle: 'caption' }, + { + type: 'Spacer', + id: 'spacer-layout-1', + height: 8, + }, + { + type: 'Row', + id: 'demo-row', + children: [ + { type: 'Card', id: 'row-item-1', title: 'Row 1', children: [] }, + { type: 'Card', id: 'row-item-2', title: 'Row 2', children: [] }, + { type: 'Card', id: 'row-item-3', title: 'Row 3', children: [] }, + ], + }, + { + type: 'Spacer', + id: 'spacer-layout-2', + height: 8, + }, + { + type: 'Divider', + id: 'layout-divider', + }, + { + type: 'Spacer', + id: 'spacer-layout-3', + height: 8, + }, + { type: 'Text', id: 'divider-note', text: '↑ Divider component above', textStyle: 'caption' }, + ], + }, + { + type: 'Spacer', + id: 'spacer-s3', + height: 12, + }, + // Interactive Components + { + type: 'Card', + id: 'interactive-section', + title: '👆 Interactive Components', + children: [ + { type: 'Text', id: 'btn-desc', text: 'Button variants:', textStyle: 'caption' }, + { + type: 'Spacer', + id: 'spacer-int-1', + height: 8, + }, + { + type: 'Row', + id: 'btn-demo-row', + children: [ + { type: 'Button', id: 'demo-primary', label: 'Primary', variant: 'primary', action: { name: 'demo' } }, + { type: 'Button', id: 'demo-secondary', label: 'Secondary', variant: 'secondary', action: { name: 'demo' } }, + ], + }, + { + type: 'Spacer', + id: 'spacer-int-2', + height: 12, + }, + { type: 'Text', id: 'input-desc', text: 'Input field:', textStyle: 'caption' }, + { + type: 'Spacer', + id: 'spacer-int-3', + height: 8, + }, + { + type: 'TextField', + id: 'demo-input', + label: 'Sample Input', + placeholder: 'Type something...', + }, + ], + }, + { + type: 'Spacer', + id: 'spacer-s4', + height: 12, + }, + // Card with Actions + { + type: 'Card', + id: 'action-card-section', + title: '🎯 Card with Actions', + subtitle: 'Cards can have footer action buttons', + children: [ + { + type: 'Text', + id: 'action-card-text', + text: 'This card demonstrates the actions property which renders as footer buttons.', + textStyle: 'body', + }, + ], + actions: [ + { name: 'action1', id: 'action-1', label: 'Action 1' }, + { name: 'action2', id: 'action-2', label: 'Action 2' }, + { name: 'action3', id: 'action-3', label: 'More...' }, + ], + }, + { + type: 'Spacer', + id: 'spacer-s5', + height: 12, + }, + // Spacer demo + { + type: 'Card', + id: 'spacer-section', + title: '📏 Spacer Component', + children: [ + { type: 'Text', id: 'spacer-text-1', text: 'No spacer below', textStyle: 'body' }, + { type: 'Text', id: 'spacer-text-2', text: 'Text right after', textStyle: 'body' }, + { type: 'Spacer', id: 'demo-spacer', height: 24 }, + { type: 'Text', id: 'spacer-text-3', text: '24px spacer above', textStyle: 'body' }, + ], + }, + ], + } as Types.Node, +}; + +// ============================================================ +// DEMO RESPONSE ROUTER +// ============================================================ +export function getDemoResponse(query: string): { text: string; surface?: Types.A2uiMessage } { + const q = query.toLowerCase().trim(); + + // Restaurant/Food queries + if (q.includes('restaurant') || q.includes('food') || q.includes('eat') || q.includes('dinner') || q.includes('lunch')) { + return { + text: '🍕 I found some great restaurants near you! Here are my top recommendations:', + surface: DEMO_RESTAURANT_SURFACE, + }; + } + + // Contact queries + if (q.includes('contact') || q.includes('person') || q.includes('profile') || q.includes('john') || q.includes('sarah')) { + return { + text: '📇 Here\'s the contact information you requested:', + surface: DEMO_CONTACT_SURFACE, + }; + } + + // Analytics/Dashboard queries + if (q.includes('analytics') || q.includes('chart') || q.includes('stats') || q.includes('dashboard') || q.includes('metrics')) { + return { + text: '📊 Here\'s your analytics dashboard with the latest data:', + surface: DEMO_CHART_SURFACE, + }; + } + + // Form/Input queries + if (q.includes('form') || q.includes('input') || q.includes('signup') || q.includes('sign up') || q.includes('register')) { + return { + text: '📝 Here\'s a sign-up form demonstrating input components:', + surface: DEMO_FORM_SURFACE, + }; + } + + // List queries + if (q.includes('list') || q.includes('task') || q.includes('todo') || q.includes('items') || q.includes('scroll')) { + return { + text: '📋 Here\'s a task list demonstrating the List component:', + surface: DEMO_LIST_SURFACE, + }; + } + + // Image/Gallery queries + if (q.includes('image') || q.includes('photo') || q.includes('gallery') || q.includes('picture')) { + return { + text: '🖼️ Here\'s an image gallery demonstrating the Image component:', + surface: DEMO_IMAGE_SURFACE, + }; + } + + // Button queries + if (q.includes('button') || q.includes('action') || q.includes('click')) { + return { + text: '🔘 Here are all the button variants available in A2UI:', + surface: DEMO_BUTTONS_SURFACE, + }; + } + + // Showcase/All components + if (q.includes('all') || q.includes('showcase') || q.includes('components') || q.includes('demo') || q.includes('everything')) { + return { + text: '🎨 Here\'s a comprehensive showcase of all A2UI components:', + surface: DEMO_SHOWCASE_SURFACE, + }; + } + + // Hello/Welcome + if (q.includes('hello') || q.includes('hi') || q.includes('hey') || q.includes('welcome') || q.includes('start')) { + return { + text: 'Hello! 👋 I\'m the A2UI demo agent. Let me show you what I can do!', + surface: DEMO_WELCOME_SURFACE, + }; + } + + // Help + if (q.includes('help') || q.includes('what can') || q.includes('commands') || q.includes('options')) { + return { + text: `I can demonstrate A2UI's rich interface capabilities! Try these commands: + +🍕 **"restaurants"** - Browse restaurant cards with actions +📇 **"contact"** - View a contact profile layout +📊 **"dashboard"** - See an analytics dashboard +📝 **"form"** - Interactive form with inputs +📋 **"list"** - Scrollable task list +🖼️ **"gallery"** - Image gallery showcase +🔘 **"buttons"** - All button variants +🎨 **"showcase"** - Full component demo + +Each command displays an interactive UI surface!`, + }; + } + + // Default response with welcome surface + return { + text: `I'm running in demo mode. Try one of these commands to see A2UI surfaces: + +• **"restaurants"** - Card list with actions +• **"contact"** - Contact profile +• **"dashboard"** - Analytics stats +• **"form"** - Input fields demo +• **"showcase"** - All components + +Or say **"help"** for the full list!`, + surface: DEMO_WELCOME_SURFACE, + }; +} + +/** + * Get all available demo surfaces for testing + */ +export function getAllDemoSurfaces(): Types.A2uiMessage[] { + return [ + DEMO_WELCOME_SURFACE, + DEMO_RESTAURANT_SURFACE, + DEMO_CONTACT_SURFACE, + DEMO_CHART_SURFACE, + DEMO_FORM_SURFACE, + DEMO_LIST_SURFACE, + DEMO_IMAGE_SURFACE, + DEMO_BUTTONS_SURFACE, + DEMO_SHOWCASE_SURFACE, + ]; } diff --git a/samples/client/nativescript/src/app/services/a2a.service.ts b/samples/client/nativescript/src/app/services/a2a.service.ts index ec02c3c7..0adce06a 100644 --- a/samples/client/nativescript/src/app/services/a2a.service.ts +++ b/samples/client/nativescript/src/app/services/a2a.service.ts @@ -95,6 +95,11 @@ export class A2aService { return null; } + // Supported A2UI catalog URIs - tells the agent we support A2UI rendering + private readonly supportedCatalogIds = [ + 'https://raw.githubusercontent.com/google/A2UI/refs/heads/main/specification/0.8/json/standard_catalog_definition.json' + ]; + async sendMessage( parts: MessagePart[], onUpdate?: (data: any) => void @@ -119,15 +124,25 @@ export class A2aService { data: p.data, })), }, + // Tell the agent we support A2UI - this activates the A2UI extension + metadata: { + a2uiClientCapabilities: { + supportedCatalogIds: this.supportedCatalogIds + } + } }, }; + console.log('Sending A2A request with A2UI capabilities'); + const response = await Http.request({ url: `${this.serverUrl}${this.endpoint}`, method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', + // This header tells the A2A server to activate the A2UI extension + 'X-A2A-Extensions': 'https://a2ui.org/a2a-extension/a2ui/v0.8', }, content: JSON.stringify(requestBody), timeout: 60000, diff --git a/samples/client/nativescript/src/app/services/chat.service.ts b/samples/client/nativescript/src/app/services/chat.service.ts index 51fa10e5..538da913 100644 --- a/samples/client/nativescript/src/app/services/chat.service.ts +++ b/samples/client/nativescript/src/app/services/chat.service.ts @@ -19,6 +19,7 @@ export interface UiMessage { export class ChatService { private readonly a2aService = inject(A2aService); private demoMode = true; // Start in demo mode + private serverAvailable = false; // Track if server was reachable private readonly _messages = signal([]); private readonly _status = signal('idle'); @@ -32,10 +33,43 @@ export class ChatService { readonly agentName = this.a2aService.agentName; readonly connected = this.a2aService.connected; - // Demo mode status - private readonly _demoModeActive = signal(false); + // Demo mode status - can be toggled even when server is available + private readonly _demoModeActive = signal(true); // Start in demo mode by default readonly demoModeActive = this._demoModeActive.asReadonly(); + /** + * Toggle between demo mode and live mode. + * Returns the new demo mode state. + */ + toggleDemoMode(): boolean { + // Only allow toggling if server was reachable at some point + if (!this.serverAvailable) { + console.log('Cannot toggle to live mode - server not available'); + return true; // Stay in demo mode + } + + this.demoMode = !this.demoMode; + this._demoModeActive.set(this.demoMode); + console.log(`Demo mode: ${this.demoMode ? 'ON' : 'OFF'}`); + return this.demoMode; + } + + /** + * Force demo mode on/off + */ + setDemoMode(enabled: boolean): void { + this.demoMode = enabled; + this._demoModeActive.set(enabled); + console.log(`Demo mode set to: ${enabled ? 'ON' : 'OFF'}`); + } + + /** + * Check if server is available for live mode + */ + isServerAvailable(): boolean { + return this.serverAvailable; + } + readonly hasMessages = computed(() => this._messages().length > 0); readonly lastMessage = computed(() => { const msgs = this._messages(); @@ -44,8 +78,13 @@ export class ChatService { async connect(): Promise { const connected = await this.a2aService.connect(); - this.demoMode = !connected; - this._demoModeActive.set(!connected); + this.serverAvailable = connected; + + // Stay in demo mode by default, but user can toggle if server is available + if (connected) { + console.log('Server connected! You can toggle to live mode via the menu.'); + } + return connected; } @@ -124,59 +163,74 @@ export class ChatService { let surfaces: Types.A2uiMessage[] = []; let actions: Types.Action[] = []; + // Debug: log the response structure + console.log('Processing A2A response:', JSON.stringify(response).substring(0, 500)); + try { // Handle A2A JSON-RPC response format const result = response?.result; - // Extract parts from the response - let parts: any[] = []; - - if (result?.kind === 'task') { - // Task response format - get message parts and artifact parts - parts = [ - ...(result.status?.message?.parts ?? []), - ...(result.artifacts ?? []).flatMap((artifact: any) => artifact.parts ?? []), - ]; - } else if (result?.kind === 'message') { - // Message response format - parts = result.parts ?? []; - } else if (result?.status?.message?.parts) { - // Alternative format - parts = result.status.message.parts; - } - - // Process parts - for (const part of parts) { - // Handle text parts - if (part.kind === 'text' && part.text) { - content += part.text; + if (!result) { + console.log('No result in response'); + content = 'No response from agent.'; + } else { + console.log('Response result kind:', result?.kind); + + // Extract parts from the response + let parts: any[] = []; + + if (result?.kind === 'task') { + // Task response format - get message parts and artifact parts + console.log('Task state:', result?.status?.state); + parts = [ + ...(result.status?.message?.parts ?? []), + ...(result.artifacts ?? []).flatMap((artifact: any) => artifact.parts ?? []), + ]; + } else if (result?.kind === 'message') { + // Message response format + parts = result.parts ?? []; + } else if (result?.status?.message?.parts) { + // Alternative format + parts = result.status.message.parts; } - // Handle data parts with A2UI content - if (part.kind === 'data' && part.data && typeof part.data === 'object') { - const data = part.data; + console.log('Extracted', parts.length, 'parts'); + + // Process parts + for (const part of parts) { + console.log('Part:', part.kind, part.text?.substring(0, 50)); - // Check for A2UI message types - if ('beginRendering' in data || 'surfaceUpdate' in data) { - const surfaceData = data.beginRendering || data.surfaceUpdate; - if (surfaceData) { - console.log('Found A2UI surface:', surfaceData.surfaceId); - const surface: Types.A2uiMessage = { - surfaceId: surfaceData.surfaceId, - root: surfaceData.root, - dataModels: surfaceData.dataModels, - }; - surfaces.push(surface); - this._currentSurface.set(surface); + // Handle text parts + if (part.kind === 'text' && part.text) { + content += part.text; + } + + // Handle data parts with A2UI content + if (part.kind === 'data' && part.data && typeof part.data === 'object') { + const data = part.data; + + // Check for A2UI message types + if ('beginRendering' in data || 'surfaceUpdate' in data) { + const surfaceData = data.beginRendering || data.surfaceUpdate; + if (surfaceData) { + console.log('Found A2UI surface:', surfaceData.surfaceId); + const surface: Types.A2uiMessage = { + surfaceId: surfaceData.surfaceId, + root: surfaceData.root, + dataModels: surfaceData.dataModels, + }; + surfaces.push(surface); + this._currentSurface.set(surface); + } } } - } - // Legacy: check metadata for a2ui/surface - if (part.metadata?.['a2ui/surface']) { - const surface = part.metadata['a2ui/surface'] as Types.A2uiMessage; - surfaces.push(surface); - this._currentSurface.set(surface); + // Legacy: check metadata for a2ui/surface + if (part.metadata?.['a2ui/surface']) { + const surface = part.metadata['a2ui/surface'] as Types.A2uiMessage; + surfaces.push(surface); + this._currentSurface.set(surface); + } } } From 6bbd526e8bc4c29f6997d06ee9daa93e53dd65f1 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Fri, 2 Jan 2026 13:37:46 -0800 Subject: [PATCH 5/9] feat: native menu surface option --- samples/client/nativescript/DEMO_MODE.md | 18 ++ samples/client/nativescript/src/app/app.ts | 107 +++++---- .../client/nativescript/src/app/catalog.ts | 8 + .../src/app/components/menu/index.ts | 35 +++ .../src/app/components/menu/menu.android.ts | 112 +++++++++ .../src/app/components/menu/menu.common.ts | 67 ++++++ .../src/app/components/menu/menu.component.ts | 176 +++++++++++++++ .../src/app/components/menu/menu.ios.ts | 213 ++++++++++++++++++ .../nativescript/src/app/demo-surfaces.ts | 141 +++++++++++- 9 files changed, 831 insertions(+), 46 deletions(-) create mode 100644 samples/client/nativescript/src/app/components/menu/index.ts create mode 100644 samples/client/nativescript/src/app/components/menu/menu.android.ts create mode 100644 samples/client/nativescript/src/app/components/menu/menu.common.ts create mode 100644 samples/client/nativescript/src/app/components/menu/menu.component.ts create mode 100644 samples/client/nativescript/src/app/components/menu/menu.ios.ts diff --git a/samples/client/nativescript/DEMO_MODE.md b/samples/client/nativescript/DEMO_MODE.md index 21efcf07..abe9e8da 100644 --- a/samples/client/nativescript/DEMO_MODE.md +++ b/samples/client/nativescript/DEMO_MODE.md @@ -155,6 +155,23 @@ Displays all button styles: --- +### 📱 Native Platform Menus +**Triggers:** `menu`, `popup`, `dropdown` + +Displays native platform menus: +- Uses iOS UIAlertController with action sheet style +- Uses Android PopupMenu for native dropdown +- Demonstrates menu items with icons +- Shows destructive item styling +- Action items send events to agent + +**Example messages:** +- "Show me a menu" +- "Display a dropdown" +- "Popup menu demo" + +--- + ### 🎨 Full Component Showcase **Triggers:** `all`, `showcase`, `components`, `demo`, `everything` @@ -210,6 +227,7 @@ Returns a text message listing all available commands (no surface). | List | `list`, `task`, `todo`, `items`, `scroll` | "Show my todo list" | | Gallery | `image`, `photo`, `gallery`, `picture` | "Display photos" | | Buttons | `button`, `action`, `click` | "Show button variants" | +| Menu | `menu`, `popup`, `dropdown` | "Show a dropdown menu" | | Showcase | `all`, `showcase`, `components`, `demo`, `everything` | "Show all components" | | Welcome | `hello`, `hi`, `hey`, `welcome`, `start` | "Hi there!" | | Help | `help`, `what can`, `commands`, `options` | "Help me" | diff --git a/samples/client/nativescript/src/app/app.ts b/samples/client/nativescript/src/app/app.ts index 0c2b3de6..4df19df0 100644 --- a/samples/client/nativescript/src/app/app.ts +++ b/samples/client/nativescript/src/app/app.ts @@ -1,11 +1,12 @@ -import { Component, NO_ERRORS_SCHEMA, OnInit, inject } from "@angular/core"; +import { Component, NO_ERRORS_SCHEMA, OnInit, inject, ViewChild, ElementRef } from "@angular/core"; import { NativeScriptCommonModule } from "@nativescript/angular"; -import { isIOS, Screen, Dialogs } from "@nativescript/core"; +import { isIOS, Screen, Dialogs, View } from "@nativescript/core"; import { Types } from "../a2ui-lit-types"; import { ChatService } from "./services/chat.service"; import { ChatInputComponent } from "./components/chat-input.component"; import { ChatHistoryComponent } from "./components/chat-history.component"; import { CanvasComponent } from "./components/canvas.component"; +import { showMenu, MenuConfig } from "./components/menu"; @Component({ selector: "ns-app", @@ -46,7 +47,7 @@ import { CanvasComponent } from "./components/canvas.component"; - @@ -178,6 +179,9 @@ export class App implements OnInit { readonly chatService = inject(ChatService); readonly isIOS = isIOS; + @ViewChild('menuButton', { read: ElementRef, static: false }) + menuButtonRef!: ElementRef; + ngOnInit(): void { // Try to connect to the A2A server this.chatService.connect().then((connected) => { @@ -207,57 +211,70 @@ export class App implements OnInit { const isDemo = this.chatService.demoModeActive(); const serverAvailable = this.chatService.isServerAvailable(); - const actions = [ - "Clear Chat", - isDemo ? "🔴 Switch to Live Mode" : "🟢 Switch to Demo Mode", - "Show All Demo Surfaces", - "Cancel", - ]; - - // Only show live mode option if server is available - if (!serverAvailable && isDemo) { - actions[1] = "⚠️ Live Mode (Server Unavailable)"; + // Build menu items + const menuConfig: MenuConfig = { + title: "A2UI Demo Options", + items: [ + { + id: "clear-chat", + title: "Clear Chat", + icon: isIOS ? "trash" : "ic_delete" + }, + { + id: "toggle-mode", + title: isDemo ? "Switch to Live Mode" : "Switch to Demo Mode", + icon: isIOS ? (isDemo ? "antenna.radiowaves.left.and.right" : "play.circle") : "ic_sync", + disabled: isDemo && !serverAvailable + }, + { + id: "showcase", + title: "Show All Demo Surfaces", + icon: isIOS ? "square.stack.3d.up" : "ic_view_module" + }, + ], + }; + + // Get the anchor view for the menu + const anchorView: View = this.menuButtonRef?.nativeElement; + + if (!anchorView) { + console.warn('Menu button not available'); + return; } - const result = await Dialogs.action({ - title: "A2UI Demo Options", - message: `Current Mode: ${isDemo ? "Demo" : "Live"}\nServer: ${ - serverAvailable ? "Available" : "Unavailable" - }`, - actions: actions, - cancelButtonText: "Cancel", - }); + // Show native menu + const result = await showMenu(anchorView, menuConfig); - switch (result) { - case "Clear Chat": + if (!result) return; + + switch (result.itemId) { + case "clear-chat": this.chatService.clearMessages(); break; - case "🔴 Switch to Live Mode": - if (serverAvailable) { - this.chatService.setDemoMode(false); - await Dialogs.alert({ - title: "Live Mode Enabled", - message: "Messages will now be sent to the A2A server.", - okButtonText: "OK", - }); + case "toggle-mode": + if (isDemo) { + if (serverAvailable) { + this.chatService.setDemoMode(false); + await Dialogs.alert({ + title: "Live Mode Enabled", + message: "Messages will now be sent to the A2A server.", + okButtonText: "OK", + }); + } else { + await Dialogs.alert({ + title: "Server Unavailable", + message: + "The A2A server is not reachable. Make sure it's running on localhost:10002 and restart the app.", + okButtonText: "OK", + }); + } + } else { + this.chatService.setDemoMode(true); } break; - case "🟢 Switch to Demo Mode": - this.chatService.setDemoMode(true); - break; - - case "⚠️ Live Mode (Server Unavailable)": - await Dialogs.alert({ - title: "Server Unavailable", - message: - "The A2A server is not reachable. Make sure it's running on localhost:10002 and restart the app.", - okButtonText: "OK", - }); - break; - - case "Show All Demo Surfaces": + case "showcase": // Send a showcase message to display all components this.chatService.sendMessage("showcase"); break; diff --git a/samples/client/nativescript/src/app/catalog.ts b/samples/client/nativescript/src/app/catalog.ts index 4dd1d434..9efc20b0 100644 --- a/samples/client/nativescript/src/app/catalog.ts +++ b/samples/client/nativescript/src/app/catalog.ts @@ -78,4 +78,12 @@ export const NativeScriptCatalog: Catalog = { inputBinding('node', () => component), ], } as CatalogEntry, + + // Interactive components + ['Menu' as string]: { + type: async () => (await import('./components/menu/menu.component')).MenuComponent, + bindings: (component) => [ + inputBinding('node', () => component), + ], + } as CatalogEntry, }; diff --git a/samples/client/nativescript/src/app/components/menu/index.ts b/samples/client/nativescript/src/app/components/menu/index.ts new file mode 100644 index 00000000..42ce17f0 --- /dev/null +++ b/samples/client/nativescript/src/app/components/menu/index.ts @@ -0,0 +1,35 @@ +/** + * Native Menu Module + * + * This module provides native platform menus for iOS and Android. + * - iOS: Uses UIAlertController in action sheet style with popover support + * - Android: Uses android.widget.PopupMenu for native popup menus + * + * The correct platform-specific implementation is automatically selected + * at build time based on the platform (menu.ios.ts or menu.android.ts). + * + * Usage: + * ```typescript + * import { showMenu, MenuConfig } from './menu/menu'; + * + * const config: MenuConfig = { + * title: 'Options', + * items: [ + * { id: 'edit', title: 'Edit', icon: 'pencil' }, + * { id: 'share', title: 'Share', icon: 'square.and.arrow.up' }, + * { id: 'delete', title: 'Delete', destructive: true }, + * ] + * }; + * + * const result = await showMenu(buttonView, config); + * if (result) { + * console.log('Selected:', result.itemId); + * } + * ``` + */ + +export { showMenu, MenuItem, MenuConfig, MenuResult } from './menu.common'; + +// Note: The actual platform-specific exports are handled by NativeScript's +// build system which will include either menu.ios.ts or menu.android.ts +// based on the target platform. diff --git a/samples/client/nativescript/src/app/components/menu/menu.android.ts b/samples/client/nativescript/src/app/components/menu/menu.android.ts new file mode 100644 index 00000000..d7a4a667 --- /dev/null +++ b/samples/client/nativescript/src/app/components/menu/menu.android.ts @@ -0,0 +1,112 @@ +import { View, Application } from '@nativescript/core'; +import { MenuItem, MenuConfig, MenuResult, ensureMainThread } from './menu.common'; + +export { MenuItem, MenuConfig, MenuResult }; + +/** + * Shows a native Android popup menu anchored to a view. + * Uses android.widget.PopupMenu for native Android look and feel. + */ +export function showMenu( + anchorView: View, + config: MenuConfig +): Promise { + return new Promise((resolve) => { + ensureMainThread(() => { + const nativeView = anchorView.nativeView as android.view.View; + + if (!nativeView) { + console.error('No native view available for menu'); + resolve(null); + return; + } + + // Get the context + const context = nativeView.getContext(); + if (!context) { + console.error('No context available for popup menu'); + resolve(null); + return; + } + + // Create PopupMenu + const popupMenu = new android.widget.PopupMenu(context, nativeView); + const menu = popupMenu.getMenu(); + + // Add menu items + config.items.forEach((item, index) => { + const menuItem = menu.add( + android.view.Menu.NONE, + index, + index, + item.title + ); + + // Set icon if provided + if (item.icon) { + try { + // Try to load icon from resources + const resources = context.getResources(); + const packageName = context.getPackageName(); + const iconId = resources.getIdentifier( + item.icon, + 'drawable', + packageName + ); + if (iconId > 0) { + const drawable = context.getDrawable(iconId); + menuItem.setIcon(drawable); + } + } catch (e) { + console.warn(`Could not load icon: ${item.icon}`); + } + } + + // Set enabled state + menuItem.setEnabled(!item.disabled); + }); + + // Force icons to show (requires reflection on Android) + try { + const menuHelper = new (org).appcompat.widget.MenuPopupHelper( + context, + (popupMenu).getMenu() + ); + menuHelper.setForceShowIcon(true); + // Note: Using this approach requires careful setup + } catch (e) { + // Icons may not show, but menu will still work + } + + // Set up click listener + popupMenu.setOnMenuItemClickListener( + new android.widget.PopupMenu.OnMenuItemClickListener({ + onMenuItemClick: (menuItem: android.view.MenuItem): boolean => { + const itemIndex = menuItem.getItemId(); + const selectedItem = config.items[itemIndex]; + if (selectedItem) { + resolve({ + itemId: selectedItem.id, + title: selectedItem.title, + }); + } + return true; + }, + }) + ); + + // Set up dismiss listener + popupMenu.setOnDismissListener( + new android.widget.PopupMenu.OnDismissListener({ + onDismiss: (popupMenu: android.widget.PopupMenu): void => { + // Resolve with null if dismissed without selection + // Note: This fires after onMenuItemClick, so we need to handle carefully + }, + }) + ); + + // Show the popup menu + popupMenu.show(); + }); + }); +} diff --git a/samples/client/nativescript/src/app/components/menu/menu.common.ts b/samples/client/nativescript/src/app/components/menu/menu.common.ts new file mode 100644 index 00000000..eaaad74a --- /dev/null +++ b/samples/client/nativescript/src/app/components/menu/menu.common.ts @@ -0,0 +1,67 @@ +import { Utils, View, Dialogs } from '@nativescript/core'; + +/** + * Menu item configuration + */ +export interface MenuItem { + id: string; + title: string; + icon?: string; + destructive?: boolean; + disabled?: boolean; +} + +/** + * Menu configuration + */ +export interface MenuConfig { + title?: string; + items: MenuItem[]; +} + +/** + * Menu result returned when an item is selected + */ +export interface MenuResult { + itemId: string; + title: string; +} + +/** + * Helper to ensure we're on the main thread for UI operations + */ +export function ensureMainThread(callback: () => void): void { + if (Utils.isMainThread()) { + callback(); + } else { + Utils.executeOnMainThread(callback); + } +} + +/** + * Fallback showMenu implementation using Dialogs.action + * This is used when platform-specific implementations aren't available + */ +export async function showMenu( + anchorView: View, + config: MenuConfig +): Promise { + const actions = config.items + .filter(item => !item.disabled) + .map(item => item.title); + + const result = await Dialogs.action({ + title: config.title || 'Menu', + actions: actions, + cancelButtonText: 'Cancel', + }); + + if (result && result !== 'Cancel') { + const selectedItem = config.items.find(item => item.title === result); + if (selectedItem) { + return { itemId: selectedItem.id, title: selectedItem.title }; + } + } + + return null; +} diff --git a/samples/client/nativescript/src/app/components/menu/menu.component.ts b/samples/client/nativescript/src/app/components/menu/menu.component.ts new file mode 100644 index 00000000..499490c2 --- /dev/null +++ b/samples/client/nativescript/src/app/components/menu/menu.component.ts @@ -0,0 +1,176 @@ +import { Component, NO_ERRORS_SCHEMA, ChangeDetectionStrategy, ElementRef, ViewChild, signal } from '@angular/core'; +import { Types } from '../../../a2ui-lit-types'; +import { DynamicComponent } from '@a2ui/nativescript'; +import { NativeScriptCommonModule } from '@nativescript/angular'; +import { View } from '@nativescript/core'; +import { showMenu, MenuConfig, MenuItem } from './menu.common'; + +/** + * A2UI Menu Component + * + * Displays a button that when tapped shows a native platform menu. + * - iOS: Uses UIAlertController as action sheet with popover presentation + * - Android: Uses PopupMenu for native dropdown appearance + * + * Example A2UI node structure: + * { + * "type": "Menu", + * "id": "options-menu", + * "label": "Options", + * "icon": "more_vert", + * "items": [ + * { "id": "edit", "title": "Edit", "icon": "pencil" }, + * { "id": "share", "title": "Share" }, + * { "id": "delete", "title": "Delete", "destructive": true } + * ] + * } + */ +@Component({ + selector: 'a2ui-menu', + standalone: true, + changeDetection: ChangeDetectionStrategy.OnPush, + template: ` + + `, + styles: [` + .a2ui-menu-button { + font-size: 20; + background-color: transparent; + color: #6366f1; + padding: 8; + margin: 0; + min-width: 44; + min-height: 44; + } + `], + imports: [NativeScriptCommonModule], + schemas: [NO_ERRORS_SCHEMA] +}) +export class MenuComponent extends DynamicComponent { + @ViewChild('menuButton', { read: ElementRef, static: false }) + menuButtonRef!: ElementRef; + + private isMenuOpen = signal(false); + + /** + * Menu node interface with extended properties + */ + private get menuNode(): MenuNode { + return this.node as MenuNode; + } + + /** + * Get the button text/icon + */ + get buttonText(): string { + const node = this.menuNode; + // Support common menu icons + if (node?.icon === 'more_vert' || node?.icon === 'more') { + return '⋮'; // Vertical ellipsis + } + if (node?.icon === 'more_horiz') { + return '⋯'; // Horizontal ellipsis + } + if (node?.icon === 'menu') { + return '☰'; // Hamburger menu + } + return node?.label || node?.icon || '⋮'; + } + + /** + * Get menu configuration from node + */ + get menuConfig(): MenuConfig { + const node = this.menuNode; + + const items: MenuItem[] = (node?.items || []).map(item => ({ + id: item.id, + title: item.title, + icon: item.icon, + destructive: item.destructive, + disabled: item.disabled, + })); + + return { + title: node?.title, + items, + }; + } + + /** + * Handle menu button tap + */ + async onMenuTap(): Promise { + if (this.isMenuOpen()) return; + + this.isMenuOpen.set(true); + + try { + // Get the native view from the button + const buttonView: View = this.menuButtonRef?.nativeElement; + + if (!buttonView) { + console.warn('Menu button view not available'); + return; + } + + const config = this.menuConfig; + + if (config.items.length === 0) { + console.warn('Menu has no items'); + return; + } + + // Show the native menu + const result = await showMenu(buttonView, config); + + if (result) { + // Find the selected item and trigger its action + const node = this.menuNode; + const selectedItem = node?.items?.find(item => item.id === result.itemId); + + if (selectedItem?.action) { + this.sendAction(selectedItem.action); + } else { + // Create a default action with the item id + this.sendAction({ + name: result.itemId, + id: result.itemId, + label: result.title, + payload: { itemId: result.itemId, title: result.title } + }); + } + } + } catch (error) { + console.error('Error showing menu:', error); + } finally { + this.isMenuOpen.set(false); + } + } +} + +/** + * Extended interface for Menu node with menu-specific properties + */ +interface MenuNode { + type: string; + id?: string; + label?: string; + icon?: string; + title?: string; + items?: MenuItemNode[]; +} + +interface MenuItemNode { + id: string; + title: string; + icon?: string; + destructive?: boolean; + disabled?: boolean; + action?: Types.Action; +} diff --git a/samples/client/nativescript/src/app/components/menu/menu.ios.ts b/samples/client/nativescript/src/app/components/menu/menu.ios.ts new file mode 100644 index 00000000..4bb6cba9 --- /dev/null +++ b/samples/client/nativescript/src/app/components/menu/menu.ios.ts @@ -0,0 +1,213 @@ +import { View } from "@nativescript/core"; +import { + MenuItem, + MenuConfig, + MenuResult, + ensureMainThread, +} from "./menu.common"; + +export { MenuItem, MenuConfig, MenuResult }; + +/** + * Shows a native iOS context menu anchored to a view. + * Uses UIMenu and UIContextMenuInteraction for iOS 14+. + * Falls back to UIAlertController action sheet for older iOS. + */ +export function showMenu( + anchorView: View, + config: MenuConfig +): Promise { + return new Promise((resolve) => { + ensureMainThread(() => { + const nativeView = anchorView.nativeView as UIView; + + if (!nativeView) { + console.error("No native view available for menu"); + resolve(null); + return; + } + + // Check iOS version - UIMenu requires iOS 14+ + const iosVersion = parseFloat(UIDevice.currentDevice.systemVersion); + + if (iosVersion >= 14) { + // Use modern UIMenu approach via UIContextMenuInteraction + showUIMenuPopover(nativeView, config, resolve); + } else { + // Fallback to UIAlertController action sheet + showActionSheet(nativeView, config, resolve); + } + }); + }); +} + +/** + * Shows menu using UIAlertController as popover (works on all iOS versions) + */ +function showActionSheet( + anchorView: UIView, + config: MenuConfig, + resolve: (result: MenuResult | null) => void +): void { + const alertController = + UIAlertController.alertControllerWithTitleMessagePreferredStyle( + config.title || null, + null, + UIAlertControllerStyle.ActionSheet + ); + + // Add menu items + for (const item of config.items) { + const style = item.destructive + ? UIAlertActionStyle.Destructive + : UIAlertActionStyle.Default; + + const action = UIAlertAction.actionWithTitleStyleHandler( + item.title, + style, + () => { + resolve({ itemId: item.id, title: item.title }); + } + ); + + if (item.disabled) { + action.enabled = false; + } + + alertController.addAction(action); + } + + // Add cancel action + const cancelAction = UIAlertAction.actionWithTitleStyleHandler( + "Cancel", + UIAlertActionStyle.Cancel, + () => { + resolve(null); + } + ); + alertController.addAction(cancelAction); + + // Configure for iPad (popover presentation) + const popover = alertController.popoverPresentationController; + if (popover) { + popover.sourceView = anchorView; + popover.sourceRect = anchorView.bounds; + popover.permittedArrowDirections = UIPopoverArrowDirection.Any; + } + + // Present the alert controller + const viewController = getTopViewController(); + if (viewController) { + viewController.presentViewControllerAnimatedCompletion( + alertController, + true, + null + ); + } else { + resolve(null); + } +} + +/** + * Shows menu using UIMenu as popover (iOS 14+) + */ +function showUIMenuPopover( + anchorView: UIView, + config: MenuConfig, + resolve: (result: MenuResult | null) => void +): void { + // Create UIActions for each menu item + const actions: UIAction[] = []; + + for (const item of config.items) { + let attributes = UIMenuElementAttributes.KeepsMenuPresented; + if (item.destructive) { + attributes = UIMenuElementAttributes.Destructive; + } + if (item.disabled) { + attributes = UIMenuElementAttributes.Disabled; + } + + // Create UIImage if icon is provided + let image: UIImage | null = null; + if (item.icon) { + image = UIImage.systemImageNamed(item.icon); + } + + const action = UIAction.actionWithTitleImageIdentifierHandler( + item.title, + image, + item.id, + () => { + resolve({ itemId: item.id, title: item.title }); + } + ); + action.attributes = attributes; + actions.push(action); + } + + // Create UIMenu + const menu = UIMenu.menuWithTitleImageIdentifierOptionsChildren( + config.title || "", + null, + "", + UIMenuOptions.DisplayInline, + actions + ); + + // For iOS 14+, we can use the pull-down button approach + // Create a temporary button to show the menu + const button = UIButton.buttonWithType(UIButtonType.System); + button.frame = anchorView.bounds; + button.showsMenuAsPrimaryAction = true; + button.menu = menu; + + // Add button as subview temporarily + anchorView.addSubview(button); + + // Simulate a tap to show the menu + button.sendActionsForControlEvents(UIControlEvents.TouchUpInside); + + // Remove the button after a short delay + setTimeout(() => { + button.removeFromSuperview(); + }, 100); + + // Since UIMenu doesn't have a built-in "canceled" callback, + // we rely on the action handlers above. + // For this simple approach, use action sheet as more reliable + showActionSheet(anchorView, config, resolve); +} + +/** + * Gets the topmost view controller for presenting alerts + */ +function getTopViewController(): UIViewController | null { + let viewController: UIViewController | null = null; + + // Get the key window's root view controller + const scenes = UIApplication.sharedApplication.connectedScenes; + const sceneArray = scenes.allObjects; + + for (let i = 0; i < sceneArray.count; i++) { + const scene = sceneArray.objectAtIndex(i); + if (scene instanceof UIWindowScene) { + const windows = (scene as UIWindowScene).windows; + for (let j = 0; j < windows.count; j++) { + const window = windows.objectAtIndex(j); + if (window.isKeyWindow) { + viewController = window.rootViewController; + break; + } + } + } + if (viewController) break; + } + + // Traverse to the topmost presented view controller + while (viewController?.presentedViewController) { + viewController = viewController.presentedViewController; + } + + return viewController; +} diff --git a/samples/client/nativescript/src/app/demo-surfaces.ts b/samples/client/nativescript/src/app/demo-surfaces.ts index 9d5dfab4..455e7007 100644 --- a/samples/client/nativescript/src/app/demo-surfaces.ts +++ b/samples/client/nativescript/src/app/demo-surfaces.ts @@ -54,7 +54,8 @@ export const DEMO_WELCOME_SURFACE: Types.A2uiMessage = { { type: 'Text', id: 'cmd-5', text: '• "list" - Scrollable list demo', textStyle: 'body' }, { type: 'Text', id: 'cmd-6', text: '• "gallery" - Image showcase', textStyle: 'body' }, { type: 'Text', id: 'cmd-7', text: '• "buttons" - All button variants', textStyle: 'body' }, - { type: 'Text', id: 'cmd-8', text: '• "showcase" - Full component demo', textStyle: 'body' }, + { type: 'Text', id: 'cmd-8', text: '• "menu" - Native platform menus', textStyle: 'body' }, + { type: 'Text', id: 'cmd-9', text: '• "showcase" - Full component demo', textStyle: 'body' }, ], }, { @@ -1163,6 +1164,134 @@ export const DEMO_SHOWCASE_SURFACE: Types.A2uiMessage = { } as Types.Node, }; +// ============================================================ +// MENU DEMO SURFACE +// ============================================================ +export const DEMO_MENU_SURFACE: Types.A2uiMessage = { + surfaceId: 'demo-menu', + root: { + type: 'Column', + id: 'menu-root', + children: [ + { + type: 'Text', + id: 'menu-title', + text: '📱 Native Platform Menus', + textStyle: 'title', + }, + { + type: 'Spacer', + id: 'menu-spacer-1', + height: 16, + }, + { + type: 'Card', + id: 'menu-card-1', + title: 'Menu Component', + subtitle: 'Uses native platform menus (iOS UIMenu, Android PopupMenu)', + children: [ + { + type: 'Text', + id: 'menu-desc', + text: 'The Menu component displays native platform menus when tapped. On iOS it uses UIAlertController with action sheet style, on Android it uses PopupMenu.', + textStyle: 'body', + }, + { + type: 'Spacer', + id: 'menu-spacer-2', + height: 16, + }, + { + type: 'Row', + id: 'menu-examples-row', + children: [ + { + type: 'Menu', + id: 'options-menu', + label: '⋮', + title: 'Options', + items: [ + { id: 'edit', title: 'Edit', icon: 'pencil' }, + { id: 'share', title: 'Share', icon: 'square.and.arrow.up' }, + { id: 'duplicate', title: 'Duplicate', icon: 'doc.on.doc' }, + { id: 'delete', title: 'Delete', destructive: true, icon: 'trash' }, + ], + }, + { + type: 'Spacer', + id: 'menu-btn-spacer', + width: 16, + }, + { + type: 'Menu', + id: 'actions-menu', + label: 'Actions', + title: 'Quick Actions', + items: [ + { id: 'new-doc', title: 'New Document', icon: 'doc.badge.plus' }, + { id: 'new-folder', title: 'New Folder', icon: 'folder.badge.plus' }, + { id: 'import', title: 'Import File', icon: 'square.and.arrow.down' }, + ], + }, + { + type: 'Spacer', + id: 'menu-btn-spacer-2', + width: 16, + }, + { + type: 'Menu', + id: 'sort-menu', + label: 'Sort ▾', + title: 'Sort By', + items: [ + { id: 'sort-name', title: 'Name' }, + { id: 'sort-date', title: 'Date Modified' }, + { id: 'sort-size', title: 'Size' }, + { id: 'sort-type', title: 'Type' }, + ], + }, + ], + }, + ], + }, + { + type: 'Spacer', + id: 'menu-spacer-3', + height: 16, + }, + { + type: 'Card', + id: 'menu-card-2', + title: 'Usage in A2UI', + children: [ + { + type: 'Text', + id: 'menu-usage', + text: 'Menu items can trigger actions just like buttons. Each item can have an optional icon, and can be marked as destructive (shown in red) or disabled.', + textStyle: 'body', + }, + { + type: 'Spacer', + id: 'menu-spacer-4', + height: 12, + }, + { + type: 'Column', + id: 'menu-features', + children: [ + { type: 'Text', id: 'mf-1', text: '• Native look and feel on each platform', textStyle: 'body' }, + { type: 'Text', id: 'mf-2', text: '• Supports icons (SF Symbols on iOS)', textStyle: 'body' }, + { type: 'Text', id: 'mf-3', text: '• Destructive items shown in red', textStyle: 'body' }, + { type: 'Text', id: 'mf-4', text: '• Can disable individual items', textStyle: 'body' }, + { type: 'Text', id: 'mf-5', text: '• Actions sent back to agent', textStyle: 'body' }, + ], + }, + ], + }, + ], + } as Types.Node, +}; + // ============================================================ // DEMO RESPONSE ROUTER // ============================================================ @@ -1225,6 +1354,14 @@ export function getDemoResponse(query: string): { text: string; surface?: Types. }; } + // Menu queries + if (q.includes('menu') || q.includes('popup') || q.includes('dropdown')) { + return { + text: '📱 Here\'s a demo of native platform menus:', + surface: DEMO_MENU_SURFACE, + }; + } + // Showcase/All components if (q.includes('all') || q.includes('showcase') || q.includes('components') || q.includes('demo') || q.includes('everything')) { return { @@ -1253,6 +1390,7 @@ export function getDemoResponse(query: string): { text: string; surface?: Types. 📋 **"list"** - Scrollable task list 🖼️ **"gallery"** - Image gallery showcase 🔘 **"buttons"** - All button variants +📱 **"menu"** - Native platform menus 🎨 **"showcase"** - Full component demo Each command displays an interactive UI surface!`, @@ -1287,6 +1425,7 @@ export function getAllDemoSurfaces(): Types.A2uiMessage[] { DEMO_LIST_SURFACE, DEMO_IMAGE_SURFACE, DEMO_BUTTONS_SURFACE, + DEMO_MENU_SURFACE, DEMO_SHOWCASE_SURFACE, ]; } From df96364ac93044291296000de67456d72883eef4 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Fri, 2 Jan 2026 16:49:40 -0800 Subject: [PATCH 6/9] feat: a2ui surface polishing --- .../nativescript/App_Resources/iOS/Info.plist | 92 ++-- samples/client/nativescript/package-lock.json | 282 ++++++++++++ samples/client/nativescript/package.json | 2 + samples/client/nativescript/references.d.ts | 1 + samples/client/nativescript/src/app.css | 120 ++++-- .../client/nativescript/src/app/app-root.css | 93 ++++ samples/client/nativescript/src/app/app.html | 52 ++- samples/client/nativescript/src/app/app.ts | 405 +++++++++--------- .../src/app/components/button.component.ts | 96 +++-- .../src/app/components/canvas.component.css | 40 ++ .../src/app/components/canvas.component.ts | 95 ++-- .../src/app/components/card.component.ts | 1 - .../app/components/chat-history.component.ts | 162 +++---- .../app/components/chat-input.component.ts | 15 +- .../src/app/components/column.component.ts | 1 - .../src/app/components/divider.component.ts | 5 +- .../src/app/components/image.component.ts | 1 - .../src/app/components/list.component.ts | 1 - .../src/app/components/menu/index.ts | 41 +- .../src/app/components/menu/menu.android.ts | 71 ++- .../src/app/components/menu/menu.component.ts | 245 ++++++++--- .../src/app/components/menu/menu.ios.ts | 263 ++++++++---- .../components/message-bubble.component.ts | 2 +- .../src/app/components/row.component.ts | 1 - .../src/app/components/spacer.component.ts | 1 - .../src/app/components/text.component.ts | 3 +- .../src/app/components/textfield.component.ts | 4 +- .../nativescript/src/app/demo-surfaces.ts | 47 +- .../src/app/services/a2a.service.ts | 21 +- .../src/app/services/chat.service.ts | 314 ++++++++++++-- samples/client/nativescript/src/globals.ts | 65 +++ samples/client/nativescript/src/main.ts | 23 +- 32 files changed, 1793 insertions(+), 772 deletions(-) create mode 100644 samples/client/nativescript/src/app/app-root.css create mode 100644 samples/client/nativescript/src/app/components/canvas.component.css create mode 100644 samples/client/nativescript/src/globals.ts diff --git a/samples/client/nativescript/App_Resources/iOS/Info.plist b/samples/client/nativescript/App_Resources/iOS/Info.plist index ea3e3ea2..466f771a 100644 --- a/samples/client/nativescript/App_Resources/iOS/Info.plist +++ b/samples/client/nativescript/App_Resources/iOS/Info.plist @@ -1,47 +1,53 @@ - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - ${PRODUCT_NAME} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIRequiresFullScreen - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIRequiresFullScreen + + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIUserInterfaceStyle + Dark + UIStatusBarStyle + UIStatusBarStyleLightContent + UIViewControllerBasedStatusBarAppearance + + diff --git a/samples/client/nativescript/package-lock.json b/samples/client/nativescript/package-lock.json index 624bff8d..d5b2d717 100644 --- a/samples/client/nativescript/package-lock.json +++ b/samples/client/nativescript/package-lock.json @@ -30,11 +30,13 @@ "@angular/cli": "^21.0.0", "@angular/compiler": "^21.0.0", "@angular/compiler-cli": "^21.0.0", + "@nativescript/android": "9.0.1", "@nativescript/ios": "9.0.2", "@nativescript/tailwind": "^2.1.0", "@nativescript/types": "~9.0.0", "@nativescript/webpack": "~5.0.28", "@ngtools/webpack": "^21.0.0", + "patch-package": "^8.0.1", "tailwindcss": "~3.4.0", "typescript": "~5.9.2" } @@ -4828,6 +4830,12 @@ "@tybys/wasm-util": "^0.10.1" } }, + "node_modules/@nativescript/android": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@nativescript/android/-/android-9.0.1.tgz", + "integrity": "sha512-dPlw6iLXpAmEJqqEfhShP9cC5KC/jexXLBgBMcnLFSdDvp8W9odgRvHRBe02ZL6BlEnEgqsrM1Am6xV8QO5w2Q==", + "dev": true + }, "node_modules/@nativescript/angular": { "version": "21.0.0-rc.2", "resolved": "https://registry.npmjs.org/@nativescript/angular/-/angular-21.0.0-rc.2.tgz", @@ -7890,6 +7898,25 @@ "node": "^20.17.0 || >=22.9.0" } }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -8023,6 +8050,22 @@ "node": ">=6.0" } }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/cli-cursor": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", @@ -8783,6 +8826,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/define-lazy-prop": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", @@ -9699,6 +9760,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "micromatch": "^4.0.2" + } + }, "node_modules/flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", @@ -10203,6 +10274,19 @@ "node": ">=8" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -11039,6 +11123,33 @@ "devOptional": true, "license": "MIT" }, + "node_modules/json-stable-stringify": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz", + "integrity": "sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "isarray": "^2.0.5", + "jsonify": "^0.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/json-stable-stringify/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -11072,6 +11183,16 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "dev": true, + "license": "Public Domain", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -11123,6 +11244,16 @@ "node": ">=0.10.0" } }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, "node_modules/launch-editor": { "version": "2.12.0", "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz", @@ -11785,6 +11916,16 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -12464,6 +12605,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -12878,6 +13029,82 @@ "node": ">= 0.8" } }, + "node_modules/patch-package": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.1.tgz", + "integrity": "sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "ci-info": "^3.7.0", + "cross-spawn": "^7.0.3", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^10.0.0", + "json-stable-stringify": "^1.0.2", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "semver": "^7.5.3", + "slash": "^2.0.0", + "tmp": "^0.2.4", + "yaml": "^2.2.2" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "node": ">=14", + "npm": ">5" + } + }, + "node_modules/patch-package/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/patch-package/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/patch-package/node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -14551,6 +14778,24 @@ "node": ">= 0.8.0" } }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -14726,6 +14971,16 @@ "node": ">= 10" } }, + "node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/slice-ansi": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", @@ -15466,6 +15721,16 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -17125,6 +17390,23 @@ "dev": true, "license": "ISC" }, + "node_modules/yaml": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, "node_modules/yargs": { "version": "18.0.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", diff --git a/samples/client/nativescript/package.json b/samples/client/nativescript/package.json index f5977f6a..26f6f000 100644 --- a/samples/client/nativescript/package.json +++ b/samples/client/nativescript/package.json @@ -26,11 +26,13 @@ "@angular/cli": "^21.0.0", "@angular/compiler": "^21.0.0", "@angular/compiler-cli": "^21.0.0", + "@nativescript/android": "9.0.1", "@nativescript/ios": "9.0.2", "@nativescript/tailwind": "^2.1.0", "@nativescript/types": "~9.0.0", "@nativescript/webpack": "~5.0.28", "@ngtools/webpack": "^21.0.0", + "patch-package": "^8.0.1", "tailwindcss": "~3.4.0", "typescript": "~5.9.2" }, diff --git a/samples/client/nativescript/references.d.ts b/samples/client/nativescript/references.d.ts index d7433268..d1f83199 100644 --- a/samples/client/nativescript/references.d.ts +++ b/samples/client/nativescript/references.d.ts @@ -1 +1,2 @@ /// +/// diff --git a/samples/client/nativescript/src/app.css b/samples/client/nativescript/src/app.css index 5555973c..6503bf07 100644 --- a/samples/client/nativescript/src/app.css +++ b/samples/client/nativescript/src/app.css @@ -8,7 +8,7 @@ /* Base App Styles */ Page { - background-color: #0f0f23; + background: linear-gradient(180deg, #0a0a1f 0%, #12122e 50%, #1a1a3e 100%); } ActionBar { @@ -113,42 +113,100 @@ ActionBar { } /* Spacing utilities */ -.m-0 { margin: 0; } -.m-1 { margin: 4; } -.m-2 { margin: 8; } -.m-3 { margin: 12; } -.m-4 { margin: 16; } -.m-5 { margin: 20; } - -.p-0 { padding: 0; } -.p-1 { padding: 4; } -.p-2 { padding: 8; } -.p-3 { padding: 12; } -.p-4 { padding: 16; } -.p-5 { padding: 20; } +.m-0 { + margin: 0; +} +.m-1 { + margin: 4; +} +.m-2 { + margin: 8; +} +.m-3 { + margin: 12; +} +.m-4 { + margin: 16; +} +.m-5 { + margin: 20; +} + +.p-0 { + padding: 0; +} +.p-1 { + padding: 4; +} +.p-2 { + padding: 8; +} +.p-3 { + padding: 12; +} +.p-4 { + padding: 16; +} +.p-5 { + padding: 20; +} /* Border radius */ -.rounded-sm { border-radius: 4; } -.rounded { border-radius: 8; } -.rounded-md { border-radius: 12; } -.rounded-lg { border-radius: 16; } -.rounded-xl { border-radius: 24; } -.rounded-full { border-radius: 9999; } +.rounded-sm { + border-radius: 4; +} +.rounded { + border-radius: 8; +} +.rounded-md { + border-radius: 12; +} +.rounded-lg { + border-radius: 16; +} +.rounded-xl { + border-radius: 24; +} +.rounded-full { + border-radius: 9999; +} /* Font sizes */ -.text-xs { font-size: 10; } -.text-sm { font-size: 12; } -.text-base { font-size: 14; } -.text-lg { font-size: 16; } -.text-xl { font-size: 18; } -.text-2xl { font-size: 24; } -.text-3xl { font-size: 30; } +.text-xs { + font-size: 10; +} +.text-sm { + font-size: 12; +} +.text-base { + font-size: 14; +} +.text-lg { + font-size: 16; +} +.text-xl { + font-size: 18; +} +.text-2xl { + font-size: 24; +} +.text-3xl { + font-size: 30; +} /* Font weights */ -.font-normal { font-weight: 400; } -.font-medium { font-weight: 500; } -.font-semibold { font-weight: 600; } -.font-bold { font-weight: 700; } +.font-normal { + font-weight: 400; +} +.font-medium { + font-weight: 500; +} +.font-semibold { + font-weight: 600; +} +.font-bold { + font-weight: 700; +} /* Shadows (iOS only) */ .shadow-sm { diff --git a/samples/client/nativescript/src/app/app-root.css b/samples/client/nativescript/src/app/app-root.css new file mode 100644 index 00000000..e892c1de --- /dev/null +++ b/samples/client/nativescript/src/app/app-root.css @@ -0,0 +1,93 @@ +.app-root { + background: linear-gradient(180deg, #0a0a1f 0%, #12122e 50%, #1a1a3e 100%); +} +.app-container { + background-color: transparent; +} +.app-container.ios { + padding-top: 5; +} + +.app-header { + padding: 16; + border-bottom-width: 1; + border-bottom-color: #2a2a4a; +} + +.header-avatar { + width: 44; + height: 44; + background-color: #6366f1; + border-radius: 22; + vertical-align: center; +} + +.avatar-text { + font-size: 20; + text-align: center; + vertical-align: center; + height: 44; + color: white; +} + +.header-content { + margin-left: 12; + vertical-align: center; +} + +.header-title { + font-size: 18; + font-weight: 600; + color: #ffffff; +} + +.header-status { + font-size: 12; + color: #9ca3af; + margin-top: 2; +} + +.header-status.connected { + color: #22c55e; +} + +.header-status.demo-mode { + color: #f59e0b; +} + +.header-actions { + vertical-align: center; +} + +.header-menu-container { + width: 44; + height: 44; + background-color: #1e1b4b; + border-radius: 25; +} + +.header-action-btn { + font-size: 24; + color: #a5b4fc; + padding: 8; + text-align: center; + vertical-align: center; +} + +.loading-container { + padding: 8 16; + horizontal-align: center; + orientation: horizontal; +} + +.loading-text { + font-size: 13; + color: #9ca3af; + margin-left: 8; + vertical-align: center; +} + +.floating-canvas { + vertical-align: bottom; + margin-bottom: 8; +} diff --git a/samples/client/nativescript/src/app/app.html b/samples/client/nativescript/src/app/app.html index 6527bcf8..8768367e 100644 --- a/samples/client/nativescript/src/app/app.html +++ b/samples/client/nativescript/src/app/app.html @@ -1,6 +1,48 @@ - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @if (chatService.currentSurface()) { + + } + + + + diff --git a/samples/client/nativescript/src/app/app.ts b/samples/client/nativescript/src/app/app.ts index 4df19df0..b45ab96c 100644 --- a/samples/client/nativescript/src/app/app.ts +++ b/samples/client/nativescript/src/app/app.ts @@ -1,6 +1,15 @@ -import { Component, NO_ERRORS_SCHEMA, OnInit, inject, ViewChild, ElementRef } from "@angular/core"; +import { + Component, + NO_ERRORS_SCHEMA, + OnInit, + OnDestroy, + inject, + ViewChild, + ElementRef, + AfterViewInit, +} from "@angular/core"; import { NativeScriptCommonModule } from "@nativescript/angular"; -import { isIOS, Screen, Dialogs, View } from "@nativescript/core"; +import { isIOS, Screen, Dialogs, View, ScrollView } from "@nativescript/core"; import { Types } from "../a2ui-lit-types"; import { ChatService } from "./services/chat.service"; import { ChatInputComponent } from "./components/chat-input.component"; @@ -10,7 +19,6 @@ import { showMenu, MenuConfig } from "./components/menu"; @Component({ selector: "ns-app", - standalone: true, imports: [ NativeScriptCommonModule, ChatInputComponent, @@ -18,177 +26,182 @@ import { showMenu, MenuConfig } from "./components/menu"; CanvasComponent, ], schemas: [NO_ERRORS_SCHEMA], - template: ` - - - - - - - - - - - - - - - - - - - - - - - - @if (chatService.currentSurface()) { - - } - - - - - - - - - - - - `, - styles: [ - ` - .app-container { - background: linear-gradient( - 180deg, - #0a0a1f 0%, - #12122e 50%, - #1a1a3e 100% - ); - background-color: #0f0f23; - } - - .app-container.ios { - padding-top: 5; - } - - .app-header { - padding: 16; - border-bottom-width: 1; - border-bottom-color: #2a2a4a; - } - - .header-avatar { - width: 44; - height: 44; - background-color: #6366f1; - border-radius: 22; - vertical-align: center; - } + templateUrl: "./app.html", + styleUrls: ["./app-root.css"], +}) +export class App implements OnInit, AfterViewInit, OnDestroy { + readonly chatService = inject(ChatService); + readonly isIOS = isIOS; - .avatar-text { - font-size: 20; - text-align: center; - vertical-align: center; - height: 44; - } + @ViewChild("menuButtonContainer", { read: ElementRef, static: false }) + menuButtonContainerRef!: ElementRef; - .header-content { - margin-left: 12; - vertical-align: center; - } + private iosMenuButton: any = null; + private menuSetupComplete = false; - .header-title { - font-size: 18; - font-weight: 600; - color: #ffffff; - } - - .header-status { - font-size: 12; - color: #9ca3af; - margin-top: 2; - } + constructor() { + if (__APPLE__) { + const keyboardManager = IQKeyboardManager.sharedManager(); + keyboardManager.enable = true; + keyboardManager.enableAutoToolbar = false; + keyboardManager.shouldResignOnTouchOutside = true; + keyboardManager.keyboardDistanceFromTextField = 0; + } + } - .header-status.connected { - color: #22c55e; + ngOnInit(): void { + // Try to connect to the A2A server + this.chatService.connect().then((connected) => { + if (!connected) { + console.log("Could not connect to A2A server, running in demo mode"); } + }); + } - .header-status.demo-mode { - color: #f59e0b; - } + ngAfterViewInit(): void { + if (isIOS) { + setTimeout(() => this.setupIOSHeaderMenu(), 100); + } + } - .header-actions { - vertical-align: center; - } + ngOnDestroy(): void { + if (this.iosMenuButton) { + this.iosMenuButton.removeFromSuperview(); + this.iosMenuButton = null; + } + } - .header-action-btn { - font-size: 24; - color: #a5b4fc; - padding: 8; - background-color: #1e1b4b; - border-radius: 8; - } + onMenuContainerLoaded(): void { + if (isIOS && !this.menuSetupComplete) { + setTimeout(() => this.setupIOSHeaderMenu(), 50); + } + } - .loading-container { - padding: 8 16; - horizontal-align: center; - orientation: horizontal; - } + /** + * Setup native iOS dropdown menu for the header + */ + private setupIOSHeaderMenu(): void { + if (!isIOS || this.menuSetupComplete) return; + + const container: View = this.menuButtonContainerRef?.nativeElement; + if (!container?.nativeView) return; + + const nativeView = container.nativeView as any; + + try { + // Build menu actions + const actions = NSMutableArray.alloc().init(); + + // Clear Chat action + const clearAction = UIAction.actionWithTitleImageIdentifierHandler( + "Clear Chat", + UIImage.systemImageNamed("trash"), + "clear-chat", + () => this.handleHeaderMenuAction("clear-chat") + ); + actions.addObject(clearAction); + + // Toggle Mode action + const isDemo = this.chatService.demoModeActive(); + const toggleAction = UIAction.actionWithTitleImageIdentifierHandler( + isDemo ? "Switch to Live Mode" : "Switch to Demo Mode", + UIImage.systemImageNamed( + isDemo ? "antenna.radiowaves.left.and.right" : "play.circle" + ), + "toggle-mode", + () => this.handleHeaderMenuAction("toggle-mode") + ); + actions.addObject(toggleAction); + + // Show All Demo Surfaces action + const showcaseAction = UIAction.actionWithTitleImageIdentifierHandler( + "Show All Demo Surfaces", + UIImage.systemImageNamed("square.stack.3d.up"), + "showcase", + () => this.handleHeaderMenuAction("showcase") + ); + actions.addObject(showcaseAction); + + // Create menu + const menu = UIMenu.menuWithTitleImageIdentifierOptionsChildren( + "", + null, + "header-menu", + UIMenuOptions.DisplayInline, + actions + ); + + // Create transparent button overlay + const button = UIButton.buttonWithType(UIButtonType.System); + button.frame = CGRectMake( + 0, + 0, + nativeView.bounds.size.width || 44, + nativeView.bounds.size.height || 44 + ); + button.autoresizingMask = + UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight; + button.backgroundColor = UIColor.clearColor; + button.setTitleForState("", 0); + + // Attach menu + button.menu = menu; + button.showsMenuAsPrimaryAction = true; + + // Add to view + nativeView.addSubview(button); + this.iosMenuButton = button; + this.menuSetupComplete = true; + } catch (error) { + console.error("Error setting up iOS header menu:", error); + } + } - .loading-text { - font-size: 13; - color: #9ca3af; - margin-left: 8; - vertical-align: center; - } + /** + * Handle header menu action selection + */ + private async handleHeaderMenuAction(actionId: string): Promise { + const isDemo = this.chatService.demoModeActive(); + const serverAvailable = this.chatService.isServerAvailable(); - .floating-canvas { - vertical-align: bottom; - margin-bottom: 8; - } - `, - ], -}) -export class App implements OnInit { - readonly chatService = inject(ChatService); - readonly isIOS = isIOS; + switch (actionId) { + case "clear-chat": + this.chatService.clearMessages(); + break; - @ViewChild('menuButton', { read: ElementRef, static: false }) - menuButtonRef!: ElementRef; + case "toggle-mode": + if (isDemo) { + if (serverAvailable) { + this.chatService.setDemoMode(false); + await Dialogs.alert({ + title: "Live Mode Enabled", + message: "Messages will now be sent to the A2A server.", + okButtonText: "OK", + }); + } else { + await Dialogs.alert({ + title: "Server Unavailable", + message: + "The A2A server is not reachable. Make sure it's running on localhost:10002 and restart the app.", + okButtonText: "OK", + }); + } + } else { + this.chatService.setDemoMode(true); + } + // Rebuild menu to reflect new state + this.menuSetupComplete = false; + if (this.iosMenuButton) { + this.iosMenuButton.removeFromSuperview(); + this.iosMenuButton = null; + } + setTimeout(() => this.setupIOSHeaderMenu(), 100); + break; - ngOnInit(): void { - // Try to connect to the A2A server - this.chatService.connect().then((connected) => { - if (!connected) { - console.log("Could not connect to A2A server, running in demo mode"); - } - }); + case "showcase": + this.chatService.sendMessage("showcase"); + break; + } } getStatusText(): string { @@ -207,77 +220,49 @@ export class App implements OnInit { this.chatService.sendMessage(message); } + /** + * Handle menu tap - Android fallback (iOS uses native UIButton menu) + */ async onMenuTap(): Promise { + // On iOS, the native UIButton handles the menu display + if (isIOS) return; + const isDemo = this.chatService.demoModeActive(); const serverAvailable = this.chatService.isServerAvailable(); - // Build menu items + // Build menu items for Android const menuConfig: MenuConfig = { title: "A2UI Demo Options", items: [ - { - id: "clear-chat", + { + id: "clear-chat", title: "Clear Chat", - icon: isIOS ? "trash" : "ic_delete" }, - { - id: "toggle-mode", + { + id: "toggle-mode", title: isDemo ? "Switch to Live Mode" : "Switch to Demo Mode", - icon: isIOS ? (isDemo ? "antenna.radiowaves.left.and.right" : "play.circle") : "ic_sync", - disabled: isDemo && !serverAvailable + disabled: isDemo && !serverAvailable, }, - { - id: "showcase", + { + id: "showcase", title: "Show All Demo Surfaces", - icon: isIOS ? "square.stack.3d.up" : "ic_view_module" }, ], }; // Get the anchor view for the menu - const anchorView: View = this.menuButtonRef?.nativeElement; - - if (!anchorView) { - console.warn('Menu button not available'); + const container: View = this.menuButtonContainerRef?.nativeElement; + + if (!container) { + console.warn("Menu button container not available"); return; } // Show native menu - const result = await showMenu(anchorView, menuConfig); - - if (!result) return; + const result = await showMenu(container, menuConfig); - switch (result.itemId) { - case "clear-chat": - this.chatService.clearMessages(); - break; - - case "toggle-mode": - if (isDemo) { - if (serverAvailable) { - this.chatService.setDemoMode(false); - await Dialogs.alert({ - title: "Live Mode Enabled", - message: "Messages will now be sent to the A2A server.", - okButtonText: "OK", - }); - } else { - await Dialogs.alert({ - title: "Server Unavailable", - message: - "The A2A server is not reachable. Make sure it's running on localhost:10002 and restart the app.", - okButtonText: "OK", - }); - } - } else { - this.chatService.setDemoMode(true); - } - break; - - case "showcase": - // Send a showcase message to display all components - this.chatService.sendMessage("showcase"); - break; + if (result) { + await this.handleHeaderMenuAction(result.itemId); } } } diff --git a/samples/client/nativescript/src/app/components/button.component.ts b/samples/client/nativescript/src/app/components/button.component.ts index 1a11247e..74754e8a 100644 --- a/samples/client/nativescript/src/app/components/button.component.ts +++ b/samples/client/nativescript/src/app/components/button.component.ts @@ -1,51 +1,62 @@ -import { Component, NO_ERRORS_SCHEMA, ChangeDetectionStrategy, Input } from '@angular/core'; -import { Types, SimpleNode } from '../../a2ui-lit-types'; -import { DynamicComponent } from '@a2ui/nativescript'; -import { NativeScriptCommonModule } from '@nativescript/angular'; +import { + Component, + NO_ERRORS_SCHEMA, + ChangeDetectionStrategy, + Input, + inject, +} from "@angular/core"; +import { Types, SimpleNode } from "../../a2ui-lit-types"; +import { DynamicComponent } from "@a2ui/nativescript"; +import { NativeScriptCommonModule } from "@nativescript/angular"; +import { shareText } from "@nativescript/social-share"; +import { Page } from "@nativescript/core"; @Component({ - selector: 'a2ui-button', - standalone: true, + selector: "a2ui-button", changeDetection: ChangeDetectionStrategy.OnPush, template: ` - `, - styles: [` - .a2ui-button { - font-size: 15; - font-weight: 500; - padding: 12 24; - border-radius: 12; - text-transform: none; - } - - .btn-primary { - background-color: #6366f1; - color: #ffffff; - } - - .btn-secondary { - background-color: transparent; - color: #6366f1; - border-width: 1; - border-color: #6366f1; - } - - .btn-tertiary { - background-color: transparent; - color: #6366f1; - } - `], + styles: [ + ` + .a2ui-button { + font-size: 15; + font-weight: 500; + padding: 12 24; + border-radius: 12; + text-transform: none; + } + + .btn-primary { + background-color: #6366f1; + color: #ffffff; + } + + .btn-secondary { + background-color: transparent; + color: #6366f1; + border-width: 1; + border-color: #6366f1; + } + + .btn-tertiary { + background-color: transparent; + color: #6366f1; + } + `, + ], imports: [NativeScriptCommonModule], - schemas: [NO_ERRORS_SCHEMA] + schemas: [NO_ERRORS_SCHEMA], }) export class ButtonComponent extends DynamicComponent { - + page = inject(Page); + get buttonText(): string { const node = this.node as SimpleNode; // Try to get text from child node @@ -53,19 +64,24 @@ export class ButtonComponent extends DynamicComponent { return node.child.text; } // Fallback to label or id - return node?.label || node?.id || 'Button'; + return node?.label || node?.id || "Button"; } get buttonClass(): string { const node = this.node as SimpleNode; - const variant = node?.variant || 'primary'; + const variant = node?.variant || "primary"; return `btn-${variant}`; } onTap(): void { const node = this.node as SimpleNode; const action = node?.action || node?.actions?.[0]; - console.log('Button tapped:', action); + console.log("Button tapped:", action); + + if (action.type === "social-share") { + shareText("Check this out!", 'A2UI Button tap', this.page); + return; + } if (action) { this.sendAction(action); } diff --git a/samples/client/nativescript/src/app/components/canvas.component.css b/samples/client/nativescript/src/app/components/canvas.component.css new file mode 100644 index 00000000..b7f2b856 --- /dev/null +++ b/samples/client/nativescript/src/app/components/canvas.component.css @@ -0,0 +1,40 @@ +.canvas-container { + background-color: rgba(15, 15, 35, 0.8); + border-radius: 16; + margin: 0 8 8 8; + border-width: 1; + border-color: #2a2a4a; +} + +.canvas-header { + padding: 12 16; + border-bottom-width: 1; + border-bottom-color: #2a2a4a; +} + +.canvas-icon { + font-size: 16; + vertical-align: center; +} + +.canvas-title { + font-size: 14; + font-weight: 600; + color: #ffffff; + margin-left: 8; + vertical-align: center; +} + +.canvas-close { + font-size: 16; + color: #6b7280; + padding: 4 8; +} + +.canvas-content { + max-height: 300; +} + +.surface-wrapper { + padding: 16; +} diff --git a/samples/client/nativescript/src/app/components/canvas.component.ts b/samples/client/nativescript/src/app/components/canvas.component.ts index b0c647f1..86ae8a75 100644 --- a/samples/client/nativescript/src/app/components/canvas.component.ts +++ b/samples/client/nativescript/src/app/components/canvas.component.ts @@ -1,86 +1,53 @@ -import { Component, Input, signal, inject, NO_ERRORS_SCHEMA } from '@angular/core'; -import { NativeScriptCommonModule } from '@nativescript/angular'; -import { Renderer } from '@a2ui/nativescript'; -import { Types } from '../../a2ui-lit-types'; -import { ChatService } from '../services/chat.service'; +import { + Component, + Input, + signal, + inject, + NO_ERRORS_SCHEMA, +} from "@angular/core"; +import { NativeScriptCommonModule } from "@nativescript/angular"; +import { Renderer } from "@a2ui/nativescript"; +import { Types } from "../../a2ui-lit-types"; +import { ChatService } from "../services/chat.service"; @Component({ - selector: 'a2ui-canvas', - standalone: true, + selector: "a2ui-canvas", imports: [NativeScriptCommonModule, Renderer], schemas: [NO_ERRORS_SCHEMA], template: ` - - + @if (surface()) { + - - + + - - + @if (surface()?.root) { + + + } - - - `, - styles: [` - .canvas-container { - background-color: #0f0f23; - border-radius: 16; - margin: 8; - border-width: 1; - border-color: #2a2a4a; - } - - .canvas-header { - padding: 12 16; - border-bottom-width: 1; - border-bottom-color: #2a2a4a; - } - - .canvas-icon { - font-size: 16; - vertical-align: center; - } - - .canvas-title { - font-size: 14; - font-weight: 600; - color: #ffffff; - margin-left: 8; - vertical-align: center; - } - - .canvas-close { - font-size: 16; - color: #6b7280; - padding: 4 8; + } - - .canvas-content { - max-height: 300; - } - - .surface-wrapper { - padding: 16; - } - `] + `, + styleUrls: ["./canvas.component.css"], }) export class CanvasComponent { private readonly chatService = inject(ChatService); - + readonly surface = this.chatService.currentSurface; - + onClose(): void { - // Could add a method to clear surface in chat service + this.chatService.clearMessages(); } } diff --git a/samples/client/nativescript/src/app/components/card.component.ts b/samples/client/nativescript/src/app/components/card.component.ts index a42dc7ee..c2593ffd 100644 --- a/samples/client/nativescript/src/app/components/card.component.ts +++ b/samples/client/nativescript/src/app/components/card.component.ts @@ -5,7 +5,6 @@ import { Types, SimpleNode, Action } from '../../a2ui-lit-types'; @Component({ selector: 'a2ui-card', - standalone: true, imports: [NativeScriptCommonModule, Renderer], changeDetection: ChangeDetectionStrategy.OnPush, template: ` diff --git a/samples/client/nativescript/src/app/components/chat-history.component.ts b/samples/client/nativescript/src/app/components/chat-history.component.ts index 3120fa16..de7c7a60 100644 --- a/samples/client/nativescript/src/app/components/chat-history.component.ts +++ b/samples/client/nativescript/src/app/components/chat-history.component.ts @@ -1,89 +1,99 @@ -import { Component, Input, ViewChild, ElementRef, signal, effect, inject, NO_ERRORS_SCHEMA } from '@angular/core'; -import { NativeScriptCommonModule } from '@nativescript/angular'; -import { ScrollView } from '@nativescript/core'; -import { ChatService, UiMessage } from '../services/chat.service'; -import { MessageBubbleComponent } from './message-bubble.component'; +import { + Component, + Input, + ViewChild, + ElementRef, + signal, + effect, + inject, + NO_ERRORS_SCHEMA, +} from "@angular/core"; +import { NativeScriptCommonModule } from "@nativescript/angular"; +import { ScrollView } from "@nativescript/core"; +import { ChatService, UiMessage } from "../services/chat.service"; +import { MessageBubbleComponent } from "./message-bubble.component"; @Component({ - selector: 'a2ui-chat-history', - standalone: true, + selector: "a2ui-chat-history", imports: [NativeScriptCommonModule, MessageBubbleComponent], template: ` - - - - - - - - - - - - - - - - - - - - + + + + + @if (!hasMessages()) { + + + + + + } + + + + + + + + + + + `, - styles: [` - .chat-history { - background-color: transparent; - } - - .messages-container { - padding: 16 0; - } - - .empty-state { - padding: 60 40; - horizontal-align: center; - } - - .empty-icon { - font-size: 48; - text-align: center; - margin-bottom: 16; - } - - .empty-title { - font-size: 20; - font-weight: bold; - color: #ffffff; - text-align: center; - margin-bottom: 8; - } - - .empty-subtitle { - font-size: 14; - color: #9ca3af; - text-align: center; - } - `], + styles: [ + ` + .chat-history { + background-color: transparent; + } + + .messages-container { + padding: 16 0 0 0; + } + + .empty-state { + padding: 60 40; + horizontal-align: center; + } + + .empty-icon { + font-size: 48; + text-align: center; + margin-bottom: 16; + } + + .empty-title { + font-size: 20; + font-weight: bold; + color: #ffffff; + text-align: center; + margin-bottom: 8; + } + + .empty-subtitle { + font-size: 14; + color: #9ca3af; + text-align: center; + } + `, + ], schemas: [NO_ERRORS_SCHEMA], }) export class ChatHistoryComponent { - @ViewChild('scrollView') scrollViewRef!: ElementRef; - + @ViewChild("scrollView") scrollViewRef!: ElementRef; + private readonly chatService = inject(ChatService); - + readonly messages = this.chatService.messages; readonly hasMessages = this.chatService.hasMessages; - + constructor() { // Auto-scroll to bottom when new messages arrive effect(() => { @@ -93,7 +103,7 @@ export class ChatHistoryComponent { } }); } - + private scrollToBottom(): void { const scrollView = this.scrollViewRef?.nativeElement; if (scrollView) { diff --git a/samples/client/nativescript/src/app/components/chat-input.component.ts b/samples/client/nativescript/src/app/components/chat-input.component.ts index f9dfdd07..20f5cea7 100644 --- a/samples/client/nativescript/src/app/components/chat-input.component.ts +++ b/samples/client/nativescript/src/app/components/chat-input.component.ts @@ -1,23 +1,22 @@ import { Component, - EventEmitter, - Output, signal, - inject, NO_ERRORS_SCHEMA, + output, + input, } from "@angular/core"; import { NativeScriptCommonModule } from "@nativescript/angular"; import { isIOS } from "@nativescript/core"; @Component({ selector: "a2ui-chat-input", - standalone: true, imports: [NativeScriptCommonModule], template: ` @@ -58,7 +58,7 @@ import { isIOS } from "@nativescript/core"; border-radius: 28; border-width: 1; border-color: #2a2a4a; - margin: 8; + margin: 4 8 4 8; padding: 4 6 4 16; } @@ -99,7 +99,8 @@ import { isIOS } from "@nativescript/core"; schemas: [NO_ERRORS_SCHEMA], }) export class ChatInputComponent { - @Output() send = new EventEmitter(); + row = input(0); + send = output(); readonly inputText = signal(""); readonly isIOS = isIOS; diff --git a/samples/client/nativescript/src/app/components/column.component.ts b/samples/client/nativescript/src/app/components/column.component.ts index f5f03a22..0ed9206c 100644 --- a/samples/client/nativescript/src/app/components/column.component.ts +++ b/samples/client/nativescript/src/app/components/column.component.ts @@ -5,7 +5,6 @@ import { Types, SimpleNode } from '../../a2ui-lit-types'; @Component({ selector: 'a2ui-column', - standalone: true, imports: [NativeScriptCommonModule, Renderer], changeDetection: ChangeDetectionStrategy.OnPush, template: ` diff --git a/samples/client/nativescript/src/app/components/divider.component.ts b/samples/client/nativescript/src/app/components/divider.component.ts index 407fb8f6..6f15e5a1 100644 --- a/samples/client/nativescript/src/app/components/divider.component.ts +++ b/samples/client/nativescript/src/app/components/divider.component.ts @@ -5,16 +5,15 @@ import { Types, SimpleNode } from '../../a2ui-lit-types'; @Component({ selector: 'a2ui-divider', - standalone: true, imports: [NativeScriptCommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: ` - - + `, styles: [` .a2ui-divider { diff --git a/samples/client/nativescript/src/app/components/image.component.ts b/samples/client/nativescript/src/app/components/image.component.ts index 2f7d215c..ad1767be 100644 --- a/samples/client/nativescript/src/app/components/image.component.ts +++ b/samples/client/nativescript/src/app/components/image.component.ts @@ -5,7 +5,6 @@ import { Types, SimpleNode } from '../../a2ui-lit-types'; @Component({ selector: 'a2ui-image', - standalone: true, imports: [NativeScriptCommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: ` diff --git a/samples/client/nativescript/src/app/components/list.component.ts b/samples/client/nativescript/src/app/components/list.component.ts index afd3ef6f..61170c5b 100644 --- a/samples/client/nativescript/src/app/components/list.component.ts +++ b/samples/client/nativescript/src/app/components/list.component.ts @@ -5,7 +5,6 @@ import { Types, SimpleNode } from '../../a2ui-lit-types'; @Component({ selector: 'a2ui-list', - standalone: true, imports: [NativeScriptCommonModule, Renderer], changeDetection: ChangeDetectionStrategy.OnPush, template: ` diff --git a/samples/client/nativescript/src/app/components/menu/index.ts b/samples/client/nativescript/src/app/components/menu/index.ts index 42ce17f0..0581a8a0 100644 --- a/samples/client/nativescript/src/app/components/menu/index.ts +++ b/samples/client/nativescript/src/app/components/menu/index.ts @@ -2,15 +2,12 @@ * Native Menu Module * * This module provides native platform menus for iOS and Android. - * - iOS: Uses UIAlertController in action sheet style with popover support + * - iOS: Uses UIButton with UIMenu for native dropdown menus * - Android: Uses android.widget.PopupMenu for native popup menus * - * The correct platform-specific implementation is automatically selected - * at build time based on the platform (menu.ios.ts or menu.android.ts). - * * Usage: * ```typescript - * import { showMenu, MenuConfig } from './menu/menu'; + * import { showMenu, MenuConfig } from './menu'; * * const config: MenuConfig = { * title: 'Options', @@ -28,8 +25,34 @@ * ``` */ -export { showMenu, MenuItem, MenuConfig, MenuResult } from './menu.common'; +// Re-export types from common +export { MenuItem, MenuConfig, MenuResult } from './menu.common'; + +import { isAndroid, isIOS, View } from '@nativescript/core'; +import { MenuConfig as MenuConfigType, MenuResult as MenuResultType } from './menu.common'; + +// Import platform-specific implementations +let platformShowMenu: (anchorView: View, config: MenuConfigType) => Promise; -// Note: The actual platform-specific exports are handled by NativeScript's -// build system which will include either menu.ios.ts or menu.android.ts -// based on the target platform. +if (isAndroid) { + // Android implementation + platformShowMenu = require('./menu.android').showMenu; +} else if (isIOS) { + // iOS implementation + platformShowMenu = require('./menu.ios').showMenu; +} else { + // Fallback + platformShowMenu = require('./menu.common').showMenu; +} + +/** + * Shows a native platform menu anchored to the given view. + * On iOS, uses UIMenu with UIButton for native dropdown appearance. + * On Android, uses PopupMenu for native popup appearance. + */ +export function showMenu( + anchorView: View, + config: MenuConfigType +): Promise { + return platformShowMenu(anchorView, config); +} diff --git a/samples/client/nativescript/src/app/components/menu/menu.android.ts b/samples/client/nativescript/src/app/components/menu/menu.android.ts index d7a4a667..4ab4f6be 100644 --- a/samples/client/nativescript/src/app/components/menu/menu.android.ts +++ b/samples/client/nativescript/src/app/components/menu/menu.android.ts @@ -6,6 +6,7 @@ export { MenuItem, MenuConfig, MenuResult }; /** * Shows a native Android popup menu anchored to a view. * Uses android.widget.PopupMenu for native Android look and feel. + * The menu appears as a dropdown from the anchor view with dark styling. */ export function showMenu( anchorView: View, @@ -22,15 +23,37 @@ export function showMenu( } // Get the context - const context = nativeView.getContext(); + let context = nativeView.getContext(); if (!context) { console.error('No context available for popup menu'); resolve(null); return; } - // Create PopupMenu - const popupMenu = new android.widget.PopupMenu(context, nativeView); + // Wrap context with dark theme for dark popup menu styling + try { + // Use Material dark theme for the popup + const darkThemeId = android.R.style.Theme_Material_NoActionBar; + context = new android.view.ContextThemeWrapper(context, darkThemeId); + } catch (e) { + console.warn('Could not apply dark theme to popup menu'); + } + + // Create PopupMenu with gravity to position it correctly + let popupMenu: android.widget.PopupMenu; + try { + // Try constructor with gravity (API 22+) + const Gravity = android.view.Gravity; + popupMenu = new android.widget.PopupMenu( + context, + nativeView, + Gravity.END | Gravity.TOP + ); + } catch (e) { + // Fallback to basic constructor + popupMenu = new android.widget.PopupMenu(context, nativeView); + } + const menu = popupMenu.getMenu(); // Add menu items @@ -42,46 +65,18 @@ export function showMenu( item.title ); - // Set icon if provided - if (item.icon) { - try { - // Try to load icon from resources - const resources = context.getResources(); - const packageName = context.getPackageName(); - const iconId = resources.getIdentifier( - item.icon, - 'drawable', - packageName - ); - if (iconId > 0) { - const drawable = context.getDrawable(iconId); - menuItem.setIcon(drawable); - } - } catch (e) { - console.warn(`Could not load icon: ${item.icon}`); - } - } - // Set enabled state menuItem.setEnabled(!item.disabled); }); - // Force icons to show (requires reflection on Android) - try { - const menuHelper = new (org).appcompat.widget.MenuPopupHelper( - context, - (popupMenu).getMenu() - ); - menuHelper.setForceShowIcon(true); - // Note: Using this approach requires careful setup - } catch (e) { - // Icons may not show, but menu will still work - } + // Track if an item was selected + let itemSelected = false; // Set up click listener popupMenu.setOnMenuItemClickListener( new android.widget.PopupMenu.OnMenuItemClickListener({ onMenuItemClick: (menuItem: android.view.MenuItem): boolean => { + itemSelected = true; const itemIndex = menuItem.getItemId(); const selectedItem = config.items[itemIndex]; if (selectedItem) { @@ -98,9 +93,11 @@ export function showMenu( // Set up dismiss listener popupMenu.setOnDismissListener( new android.widget.PopupMenu.OnDismissListener({ - onDismiss: (popupMenu: android.widget.PopupMenu): void => { - // Resolve with null if dismissed without selection - // Note: This fires after onMenuItemClick, so we need to handle carefully + onDismiss: (): void => { + // Only resolve null if no item was selected + if (!itemSelected) { + resolve(null); + } }, }) ); diff --git a/samples/client/nativescript/src/app/components/menu/menu.component.ts b/samples/client/nativescript/src/app/components/menu/menu.component.ts index 499490c2..763b2232 100644 --- a/samples/client/nativescript/src/app/components/menu/menu.component.ts +++ b/samples/client/nativescript/src/app/components/menu/menu.component.ts @@ -1,61 +1,190 @@ -import { Component, NO_ERRORS_SCHEMA, ChangeDetectionStrategy, ElementRef, ViewChild, signal } from '@angular/core'; +import { Component, NO_ERRORS_SCHEMA, ChangeDetectionStrategy, ElementRef, ViewChild, signal, AfterViewInit, OnDestroy } from '@angular/core'; import { Types } from '../../../a2ui-lit-types'; import { DynamicComponent } from '@a2ui/nativescript'; import { NativeScriptCommonModule } from '@nativescript/angular'; -import { View } from '@nativescript/core'; -import { showMenu, MenuConfig, MenuItem } from './menu.common'; +import { View, isIOS, isAndroid } from '@nativescript/core'; +import { showMenu, MenuConfig, MenuItem } from './index'; + +// iOS-specific imports and setup +declare const UIButton: any; +declare const UIButtonType: any; +declare const UIMenu: any; +declare const UIAction: any; +declare const UIImage: any; +declare const UIMenuElementAttributes: any; +declare const CGRectMake: any; +declare const UIColor: any; +declare const UIViewAutoresizing: any; +declare const NSMutableArray: any; /** * A2UI Menu Component * * Displays a button that when tapped shows a native platform menu. - * - iOS: Uses UIAlertController as action sheet with popover presentation + * - iOS: Uses UIButton with showsMenuAsPrimaryAction for native dropdown * - Android: Uses PopupMenu for native dropdown appearance * - * Example A2UI node structure: - * { - * "type": "Menu", - * "id": "options-menu", - * "label": "Options", - * "icon": "more_vert", - * "items": [ - * { "id": "edit", "title": "Edit", "icon": "pencil" }, - * { "id": "share", "title": "Share" }, - * { "id": "delete", "title": "Delete", "destructive": true } - * ] - * } + * The menu appears as a native dropdown from the button location, + * not as a centered dialog. */ @Component({ selector: 'a2ui-menu', - standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: ` - + + + `, styles: [` - .a2ui-menu-button { - font-size: 20; - background-color: transparent; + .a2ui-menu-container { + background-color: rgba(99, 102, 241, 0.1); + border-radius: 8; + height: 38; + } + .a2ui-menu-label { + font-size: 16; color: #6366f1; - padding: 8; - margin: 0; - min-width: 44; - min-height: 44; + padding: 8 12; + text-align: center; } `], imports: [NativeScriptCommonModule], schemas: [NO_ERRORS_SCHEMA] }) -export class MenuComponent extends DynamicComponent { - @ViewChild('menuButton', { read: ElementRef, static: false }) - menuButtonRef!: ElementRef; +export class MenuComponent extends DynamicComponent implements AfterViewInit, OnDestroy { + @ViewChild('menuContainer', { read: ElementRef, static: false }) + containerRef!: ElementRef; + private iosMenuButton: any = null; private isMenuOpen = signal(false); + private menuSetupComplete = false; + + ngAfterViewInit(): void { + // Setup iOS menu after view is ready + if (isIOS) { + setTimeout(() => this.setupIOSMenu(), 100); + } + } + + ngOnDestroy(): void { + // Cleanup iOS menu button + if (this.iosMenuButton) { + this.iosMenuButton.removeFromSuperview(); + this.iosMenuButton = null; + } + } + + onContainerLoaded(): void { + if (isIOS && !this.menuSetupComplete) { + setTimeout(() => this.setupIOSMenu(), 50); + } + } + + /** + * Setup native iOS menu button with UIMenu + */ + private setupIOSMenu(): void { + if (!isIOS || this.menuSetupComplete) return; + + const container: View = this.containerRef?.nativeElement; + if (!container?.nativeView) return; + + const nativeView = container.nativeView as any; + const config = this.menuConfig; + + if (config.items.length === 0) return; + + try { + // Build UIMenu actions + const actions = NSMutableArray.alloc().init(); + + for (const item of config.items) { + const itemId = item.id; + const itemTitle = item.title; + + // Create SF Symbol image if icon provided + let image: any = null; + if (item.icon) { + image = UIImage.systemImageNamed(item.icon); + } + + // Create action with handler + const action = UIAction.actionWithTitleImageIdentifierHandler( + item.title, + image, + item.id, + () => { + this.handleMenuSelection(itemId, itemTitle); + } + ); + + // Set attributes + let attributes = 0; + if (item.destructive) { + attributes = UIMenuElementAttributes.Destructive; + } + if (item.disabled) { + attributes = attributes | UIMenuElementAttributes.Disabled; + } + if (attributes > 0) { + action.attributes = attributes; + } + + actions.addObject(action); + } + + // Create UIMenu + const menu = UIMenu.menuWithTitleImageIdentifierOptionsChildren( + config.title || "", + null, + this.menuNode.id || "menu", + 0, + actions + ); + + // Create transparent UIButton overlay + const button = UIButton.buttonWithType(UIButtonType.System); + button.frame = CGRectMake(0, 0, nativeView.bounds.size.width, nativeView.bounds.size.height); + button.autoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight; + button.backgroundColor = UIColor.clearColor; + button.setTitleForState("", 0); // UIControlState.Normal = 0 + + // Attach menu - this makes the button show the menu on tap + button.menu = menu; + button.showsMenuAsPrimaryAction = true; + + // Add to native view + nativeView.addSubview(button); + this.iosMenuButton = button; + this.menuSetupComplete = true; + + } catch (error) { + console.error('Error setting up iOS menu:', error); + } + } + + /** + * Handle menu item selection + */ + private handleMenuSelection(itemId: string, itemTitle: string): void { + const node = this.menuNode; + const selectedItem = node?.items?.find(item => item.id === itemId); + + if (selectedItem?.action) { + this.sendAction(selectedItem.action); + } else { + this.sendAction({ + name: itemId, + id: itemId, + label: itemTitle, + payload: { itemId, title: itemTitle } + }); + } + } /** * Menu node interface with extended properties @@ -69,15 +198,14 @@ export class MenuComponent extends DynamicComponent { */ get buttonText(): string { const node = this.menuNode; - // Support common menu icons if (node?.icon === 'more_vert' || node?.icon === 'more') { - return '⋮'; // Vertical ellipsis + return '⋮'; } if (node?.icon === 'more_horiz') { - return '⋯'; // Horizontal ellipsis + return '⋯'; } if (node?.icon === 'menu') { - return '☰'; // Hamburger menu + return '☰'; } return node?.label || node?.icon || '⋮'; } @@ -103,48 +231,25 @@ export class MenuComponent extends DynamicComponent { } /** - * Handle menu button tap + * Handle menu tap - used for Android */ - async onMenuTap(): Promise { - if (this.isMenuOpen()) return; + async onMenuTap(args: any): Promise { + // On iOS, the native UIButton handles the menu display + if (isIOS) return; + if (this.isMenuOpen()) return; this.isMenuOpen.set(true); try { - // Get the native view from the button - const buttonView: View = this.menuButtonRef?.nativeElement; - - if (!buttonView) { - console.warn('Menu button view not available'); - return; - } - + const view: View = args.object; const config = this.menuConfig; - if (config.items.length === 0) { - console.warn('Menu has no items'); - return; - } + if (config.items.length === 0) return; - // Show the native menu - const result = await showMenu(buttonView, config); + const result = await showMenu(view, config); if (result) { - // Find the selected item and trigger its action - const node = this.menuNode; - const selectedItem = node?.items?.find(item => item.id === result.itemId); - - if (selectedItem?.action) { - this.sendAction(selectedItem.action); - } else { - // Create a default action with the item id - this.sendAction({ - name: result.itemId, - id: result.itemId, - label: result.title, - payload: { itemId: result.itemId, title: result.title } - }); - } + this.handleMenuSelection(result.itemId, result.title); } } catch (error) { console.error('Error showing menu:', error); @@ -155,7 +260,7 @@ export class MenuComponent extends DynamicComponent { } /** - * Extended interface for Menu node with menu-specific properties + * Extended interface for Menu node */ interface MenuNode { type: string; diff --git a/samples/client/nativescript/src/app/components/menu/menu.ios.ts b/samples/client/nativescript/src/app/components/menu/menu.ios.ts index 4bb6cba9..ecdcfe86 100644 --- a/samples/client/nativescript/src/app/components/menu/menu.ios.ts +++ b/samples/client/nativescript/src/app/components/menu/menu.ios.ts @@ -8,10 +8,18 @@ import { export { MenuItem, MenuConfig, MenuResult }; +// Store references for cleanup and callbacks +const menuButtonMap = new WeakMap(); +const pendingResolvers = new Map void>(); +let menuCounter = 0; + /** - * Shows a native iOS context menu anchored to a view. - * Uses UIMenu and UIContextMenuInteraction for iOS 14+. - * Falls back to UIAlertController action sheet for older iOS. + * Creates and attaches a native iOS dropdown menu to a view. + * Uses UIButton with showsMenuAsPrimaryAction for iOS 14+ to show + * a native pull-down menu that appears directly from the button. + * + * The menu appears as a native dropdown (like in the example screenshots) + * rather than as a centered alert dialog. */ export function showMenu( anchorView: View, @@ -31,20 +39,172 @@ export function showMenu( const iosVersion = parseFloat(UIDevice.currentDevice.systemVersion); if (iosVersion >= 14) { - // Use modern UIMenu approach via UIContextMenuInteraction - showUIMenuPopover(nativeView, config, resolve); + showNativeDropdownMenu(nativeView, config, resolve); } else { - // Fallback to UIAlertController action sheet - showActionSheet(nativeView, config, resolve); + showActionSheetFallback(nativeView, config, resolve); } }); }); } /** - * Shows menu using UIAlertController as popover (works on all iOS versions) + * Shows native iOS 14+ dropdown menu using UIContextMenuInteraction */ -function showActionSheet( +function showNativeDropdownMenu( + anchorView: UIView, + config: MenuConfig, + resolve: (result: MenuResult | null) => void +): void { + const menuId = `menu_${++menuCounter}`; + pendingResolvers.set(menuId, resolve); + + // Clean up any existing menu button + const existingButton = menuButtonMap.get(anchorView); + if (existingButton) { + existingButton.removeFromSuperview(); + } + + // Build menu actions + const actions = NSMutableArray.alloc().init(); + + for (const item of config.items) { + const itemId = item.id; + const itemTitle = item.title; + const currentMenuId = menuId; + + // Create UIImage for SF Symbol icon + let image: UIImage | null = null; + if (item.icon) { + image = UIImage.systemImageNamed(item.icon); + } + + // Create action with handler + const action = UIAction.actionWithTitleImageIdentifierHandler( + item.title, + image, + item.id, + () => { + // Clean up button + const btn = menuButtonMap.get(anchorView); + if (btn) { + btn.removeFromSuperview(); + menuButtonMap.delete(anchorView); + } + + // Resolve with selection + const resolver = pendingResolvers.get(currentMenuId); + if (resolver) { + pendingResolvers.delete(currentMenuId); + resolver({ itemId, title: itemTitle }); + } + } + ); + + // Set attributes + if (item.destructive) { + action.attributes = UIMenuElementAttributes.Destructive; + } + if (item.disabled) { + action.attributes = action.attributes | UIMenuElementAttributes.Disabled; + } + + actions.addObject(action); + } + + // Create the menu (without DisplayInline to get proper dropdown styling) + const menu = UIMenu.menuWithTitleImageIdentifierOptionsChildren( + config.title || "", + null, + menuId, + 0 as UIMenuOptions, // Default options - no DisplayInline + actions as unknown as NSArray + ); + + // Create transparent button overlay + const button = UIButton.buttonWithType(UIButtonType.System); + button.frame = CGRectMake( + 0, + 0, + anchorView.bounds.size.width, + anchorView.bounds.size.height + ); + button.autoresizingMask = + UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight; + button.backgroundColor = UIColor.clearColor; + button.setTitleForState("", UIControlState.Normal); + + // Attach menu to button + button.menu = menu; + button.showsMenuAsPrimaryAction = true; + + // Store reference for cleanup + menuButtonMap.set(anchorView, button); + + // Add button to anchor view + anchorView.addSubview(button); + + // Programmatically present the menu by simulating a long press + // We use performSelector to trigger the internal menu presentation + const contextInteraction = button.contextMenuInteraction; + if (contextInteraction) { + // Try to present using internal APIs if available + try { + const location = CGPointMake( + anchorView.bounds.size.width / 2, + anchorView.bounds.size.height / 2 + ); + // The menu will present on the next touch + } catch (e) { + console.log("Menu will present on tap"); + } + } + + // Handle menu dismissal without selection + // Set up a check to clean up if menu is dismissed + const checkDismissal = () => { + setTimeout(() => { + const btn = menuButtonMap.get(anchorView); + if (btn && btn.superview) { + // Button still exists, check if menu interaction ended + // If no pending resolver, it was already resolved + if (!pendingResolvers.has(menuId)) { + btn.removeFromSuperview(); + menuButtonMap.delete(anchorView); + } else { + // Keep checking + checkDismissal(); + } + } else if (pendingResolvers.has(menuId)) { + // Button was removed but resolver still pending = cancelled + const resolver = pendingResolvers.get(menuId); + pendingResolvers.delete(menuId); + if (resolver) resolver(null); + } + }, 300); + }; + + // Start dismiss detection after a short delay + setTimeout(checkDismissal, 500); + + // Timeout safety net - resolve as cancelled after 60 seconds + setTimeout(() => { + if (pendingResolvers.has(menuId)) { + const resolver = pendingResolvers.get(menuId); + pendingResolvers.delete(menuId); + const btn = menuButtonMap.get(anchorView); + if (btn) { + btn.removeFromSuperview(); + menuButtonMap.delete(anchorView); + } + if (resolver) resolver(null); + } + }, 60000); +} + +/** + * Fallback for iOS < 14 using UIAlertController action sheet + */ +function showActionSheetFallback( anchorView: UIView, config: MenuConfig, resolve: (result: MenuResult | null) => void @@ -56,7 +216,6 @@ function showActionSheet( UIAlertControllerStyle.ActionSheet ); - // Add menu items for (const item of config.items) { const style = item.destructive ? UIAlertActionStyle.Destructive @@ -77,17 +236,13 @@ function showActionSheet( alertController.addAction(action); } - // Add cancel action const cancelAction = UIAlertAction.actionWithTitleStyleHandler( "Cancel", UIAlertActionStyle.Cancel, - () => { - resolve(null); - } + () => resolve(null) ); alertController.addAction(cancelAction); - // Configure for iPad (popover presentation) const popover = alertController.popoverPresentationController; if (popover) { popover.sourceView = anchorView; @@ -95,7 +250,6 @@ function showActionSheet( popover.permittedArrowDirections = UIPopoverArrowDirection.Any; } - // Present the alert controller const viewController = getTopViewController(); if (viewController) { viewController.presentViewControllerAnimatedCompletion( @@ -108,84 +262,8 @@ function showActionSheet( } } -/** - * Shows menu using UIMenu as popover (iOS 14+) - */ -function showUIMenuPopover( - anchorView: UIView, - config: MenuConfig, - resolve: (result: MenuResult | null) => void -): void { - // Create UIActions for each menu item - const actions: UIAction[] = []; - - for (const item of config.items) { - let attributes = UIMenuElementAttributes.KeepsMenuPresented; - if (item.destructive) { - attributes = UIMenuElementAttributes.Destructive; - } - if (item.disabled) { - attributes = UIMenuElementAttributes.Disabled; - } - - // Create UIImage if icon is provided - let image: UIImage | null = null; - if (item.icon) { - image = UIImage.systemImageNamed(item.icon); - } - - const action = UIAction.actionWithTitleImageIdentifierHandler( - item.title, - image, - item.id, - () => { - resolve({ itemId: item.id, title: item.title }); - } - ); - action.attributes = attributes; - actions.push(action); - } - - // Create UIMenu - const menu = UIMenu.menuWithTitleImageIdentifierOptionsChildren( - config.title || "", - null, - "", - UIMenuOptions.DisplayInline, - actions - ); - - // For iOS 14+, we can use the pull-down button approach - // Create a temporary button to show the menu - const button = UIButton.buttonWithType(UIButtonType.System); - button.frame = anchorView.bounds; - button.showsMenuAsPrimaryAction = true; - button.menu = menu; - - // Add button as subview temporarily - anchorView.addSubview(button); - - // Simulate a tap to show the menu - button.sendActionsForControlEvents(UIControlEvents.TouchUpInside); - - // Remove the button after a short delay - setTimeout(() => { - button.removeFromSuperview(); - }, 100); - - // Since UIMenu doesn't have a built-in "canceled" callback, - // we rely on the action handlers above. - // For this simple approach, use action sheet as more reliable - showActionSheet(anchorView, config, resolve); -} - -/** - * Gets the topmost view controller for presenting alerts - */ function getTopViewController(): UIViewController | null { let viewController: UIViewController | null = null; - - // Get the key window's root view controller const scenes = UIApplication.sharedApplication.connectedScenes; const sceneArray = scenes.allObjects; @@ -204,7 +282,6 @@ function getTopViewController(): UIViewController | null { if (viewController) break; } - // Traverse to the topmost presented view controller while (viewController?.presentedViewController) { viewController = viewController.presentedViewController; } diff --git a/samples/client/nativescript/src/app/components/message-bubble.component.ts b/samples/client/nativescript/src/app/components/message-bubble.component.ts index 88d7b8be..c6bc9249 100644 --- a/samples/client/nativescript/src/app/components/message-bubble.component.ts +++ b/samples/client/nativescript/src/app/components/message-bubble.component.ts @@ -4,7 +4,6 @@ import { UiMessage } from '../services/chat.service'; @Component({ selector: 'a2ui-message-bubble', - standalone: true, imports: [NativeScriptCommonModule], template: ` artifact.parts ?? []), @@ -194,12 +187,13 @@ export class ChatService { parts = result.status.message.parts; } - console.log('Extracted', parts.length, 'parts'); + // Accumulate A2UI messages by surfaceId + // The server sends separate beginRendering, surfaceUpdate, and dataModelUpdate parts + // We need to combine them into a single surface with all messages + const a2uiMessagesBySurface: Map = new Map(); // Process parts for (const part of parts) { - console.log('Part:', part.kind, part.text?.substring(0, 50)); - // Handle text parts if (part.kind === 'text' && part.text) { content += part.text; @@ -207,21 +201,22 @@ export class ChatService { // Handle data parts with A2UI content if (part.kind === 'data' && part.data && typeof part.data === 'object') { - const data = part.data; + const data = part.data as Types.A2uiMessage; - // Check for A2UI message types - if ('beginRendering' in data || 'surfaceUpdate' in data) { - const surfaceData = data.beginRendering || data.surfaceUpdate; - if (surfaceData) { - console.log('Found A2UI surface:', surfaceData.surfaceId); - const surface: Types.A2uiMessage = { - surfaceId: surfaceData.surfaceId, - root: surfaceData.root, - dataModels: surfaceData.dataModels, - }; - surfaces.push(surface); - this._currentSurface.set(surface); + // Check for A2UI message types - these are the raw A2UI protocol messages + if ('beginRendering' in data || 'surfaceUpdate' in data || 'dataModelUpdate' in data) { + // Extract surfaceId from the message + const surfaceId = + (data as any).beginRendering?.surfaceId || + (data as any).surfaceUpdate?.surfaceId || + (data as any).dataModelUpdate?.surfaceId || + 'default'; + + // Accumulate messages for this surface + if (!a2uiMessagesBySurface.has(surfaceId)) { + a2uiMessagesBySurface.set(surfaceId, []); } + a2uiMessagesBySurface.get(surfaceId)!.push(data); } } @@ -229,13 +224,28 @@ export class ChatService { if (part.metadata?.['a2ui/surface']) { const surface = part.metadata['a2ui/surface'] as Types.A2uiMessage; surfaces.push(surface); - this._currentSurface.set(surface); + } + } + + // Convert accumulated messages to surfaces + // Only create a surface if we have a surfaceUpdate with components + for (const [surfaceId, messages] of a2uiMessagesBySurface) { + // Check if any message has actual components (surfaceUpdate) + const hasSurfaceUpdate = messages.some(msg => + 'surfaceUpdate' in msg && (msg as any).surfaceUpdate?.components?.length > 0 + ); + + if (hasSurfaceUpdate) { + // Create a surface that contains all the A2UI messages + // Convert the A2UI protocol messages into a component tree + const surface = this.buildSurfaceFromMessages(surfaceId, messages); + if (surface) { + surfaces.push(surface); + this._currentSurface.set(surface); + } } } } - - // Log for debugging - console.log('Processed response - content:', content, 'surfaces:', surfaces.length); } catch (e) { console.error('Error processing response:', e); @@ -257,6 +267,252 @@ export class ChatService { ); } + /** + * Converts A2UI protocol messages (beginRendering, surfaceUpdate, dataModelUpdate) + * into a component tree structure that the renderer can display. + */ + private buildSurfaceFromMessages(surfaceId: string, messages: any[]): Types.A2uiMessage | null { + let rootId: string | null = null; + const componentsById: Map = new Map(); + const dataModel: Map = new Map(); + + // Process each message + for (const msg of messages) { + if (msg.beginRendering) { + rootId = msg.beginRendering.root; + } + + if (msg.surfaceUpdate?.components) { + for (const comp of msg.surfaceUpdate.components) { + if (comp.id && comp.component) { + // Also copy weight from the component definition level + if (comp.weight !== undefined) { + comp.component._weight = comp.weight; + } + componentsById.set(comp.id, comp.component); + } + } + } + + if (msg.dataModelUpdate?.contents) { + // Parse dataModelUpdate contents into our data model + // Contents is an array like: [{ key: "title", valueString: "..." }, { key: "items", valueMap: [...] }] + for (const item of msg.dataModelUpdate.contents) { + const key = item.key; + let value: any = null; + + if (item.valueString !== undefined) { + value = item.valueString; + } else if (item.valueNumber !== undefined) { + value = item.valueNumber; + } else if (item.valueBool !== undefined) { + value = item.valueBool; + } else if (item.valueMap !== undefined) { + // valueMap is an array of items (could be empty or contain objects) + value = this.parseValueMap(item.valueMap); + } else if (item.valueList !== undefined) { + value = item.valueList; + } + + if (key) { + dataModel.set(key, value); + } + } + } + } + + // If no components, don't create a surface + if (componentsById.size === 0 || !rootId) { + return null; + } + + // Check if this surface has meaningful data to display + // If items array exists and is empty, the agent is saying "no results" + // In this case, don't show the UI surface - just show the text message + const items = dataModel.get('items'); + if (items !== undefined && Array.isArray(items) && items.length === 0) { + // No items to display - skip the surface + return null; + } + + // Check if the surface has any interactive or meaningful components + // Skip surfaces that only contain Text components (just duplicates the chat message) + if (!this.hasInteractiveComponents(componentsById)) { + return null; + } + + // Build the component tree starting from root, resolving data bindings + const root = this.buildComponentTree(rootId, componentsById, dataModel); + if (!root) { + return null; + } + + return { + surfaceId, + root, + dataModels: dataModel.size > 0 ? dataModel : undefined, + }; + } + + /** + * Check if the surface has interactive or meaningful components worth displaying. + * Skip surfaces that only have layout containers and Text (just duplicates chat message). + */ + private hasInteractiveComponents(componentsById: Map): boolean { + // Components that are worth showing a surface for + const interactiveTypes = new Set([ + 'TextField', 'Button', 'Checkbox', 'Switch', 'Slider', 'Dropdown', + 'List', 'Card', 'Image', 'AudioPlayer', 'VideoPlayer', 'WebView', + 'Tabs', 'TabItem', 'Menu', 'DatePicker', 'TimePicker', 'Progress', + 'Rating', 'Chip', 'ChipGroup', 'Avatar', 'Badge', 'Carousel', + 'Accordion', 'Dialog', 'Snackbar', 'BottomSheet', 'Fab', + ]); + + for (const compDef of componentsById.values()) { + const componentType = Object.keys(compDef).filter(k => k !== '_weight')[0]; + if (componentType && interactiveTypes.has(componentType)) { + return true; + } + } + + return false; + } + + /** + * Parse a valueMap array into a JavaScript array/object structure + */ + private parseValueMap(valueMap: any[]): any[] { + if (!Array.isArray(valueMap)) { + return []; + } + + return valueMap.map(item => { + if (typeof item !== 'object') { + return item; + } + + const result: Record = {}; + for (const [key, val] of Object.entries(item)) { + if (typeof val === 'object' && val !== null) { + const valObj = val as any; + if (valObj.valueString !== undefined) { + result[key] = valObj.valueString; + } else if (valObj.valueNumber !== undefined) { + result[key] = valObj.valueNumber; + } else if (valObj.valueBool !== undefined) { + result[key] = valObj.valueBool; + } else { + result[key] = val; + } + } else { + result[key] = val; + } + } + return result; + }); + } + + /** + * Recursively builds a component tree from the flat component map. + */ + private buildComponentTree( + componentId: string, + componentsById: Map, + dataModel: Map + ): Types.AnyComponentNode | null { + const compDef = componentsById.get(componentId); + if (!compDef) { + return null; + } + + // The component definition has the structure: { "Column": { children: {...} } } + // Get the component type (e.g., "Column", "Text", "TextField") + const componentType = Object.keys(compDef).filter(k => k !== '_weight')[0]; + if (!componentType) { + return null; + } + + const componentProps = compDef[componentType]; + + // Build the node + const node: any = { + type: componentType, + id: componentId, + }; + + // Copy weight if present + if (compDef._weight !== undefined) { + node.weight = compDef._weight; + } + + // Copy over properties + for (const [key, value] of Object.entries(componentProps || {})) { + if (key === 'children') { + // Handle children - can be explicitList or template + const childrenDef = value as any; + if (childrenDef?.explicitList) { + node.children = childrenDef.explicitList + .map((childId: string) => this.buildComponentTree(childId, componentsById, dataModel)) + .filter((c: any) => c !== null); + } else if (childrenDef?.template) { + // Template-based children (for lists) - store the template info + node.template = { + componentId: childrenDef.template.componentId, + dataBinding: childrenDef.template.dataBinding, + }; + // Build the template component + const templateNode = this.buildComponentTree(childrenDef.template.componentId, componentsById, dataModel); + if (templateNode) { + node.templateComponent = templateNode; + } + } + } else if (key === 'child') { + // Single child reference + const childId = value as string; + const childNode = this.buildComponentTree(childId, componentsById, dataModel); + if (childNode) { + node.children = [childNode]; + } + } else if (key === 'text' || key === 'label' || key === 'url') { + // Handle text/label/url - can be literalString or path binding + const textValue = value as any; + if (textValue?.literalString !== undefined) { + node[key] = textValue.literalString; + } else if (textValue?.path !== undefined) { + // Data-bound value - resolve from data model if possible + const resolvedValue = dataModel.get(textValue.path); + if (resolvedValue !== undefined && resolvedValue !== null) { + node[key] = String(resolvedValue); + } else { + // Keep as binding placeholder for runtime resolution + node[key] = `{{${textValue.path}}}`; + node[`${key}Binding`] = textValue.path; + } + } else if (typeof textValue === 'string') { + node[key] = textValue; + } + } else if (key === 'action') { + // Handle action + node.action = value; + } else if (key === 'usageHint') { + // Map usageHint to textStyle + const hint = value as string; + if (hint === 'h1') { + node.textStyle = 'headline'; + } else if (hint === 'h2' || hint === 'h3') { + node.textStyle = 'title'; + } else { + node.textStyle = 'body'; + } + } else { + // Copy other properties directly + node[key] = value; + } + } + + return node as Types.AnyComponentNode; + } + handleAction(action: Types.Action): void { console.log('Action triggered:', action); // Send action back to agent if needed diff --git a/samples/client/nativescript/src/globals.ts b/samples/client/nativescript/src/globals.ts new file mode 100644 index 00000000..3e71aa18 --- /dev/null +++ b/samples/client/nativescript/src/globals.ts @@ -0,0 +1,65 @@ +import { CoreTypes, TouchManager, View } from "@nativescript/core"; + +const originalTransform = Symbol("originalTransform"); +TouchManager.enableGlobalTapAnimations = true; +TouchManager.animations = { + down: (view: View) => { + if (__APPLE__) { + UIView.animateWithDurationDelayUsingSpringWithDampingInitialSpringVelocityOptionsAnimationsCompletion( + 0.3, + 0, + 0.5, + 3, + UIViewAnimationOptions.CurveEaseInOut, + () => { + if (view?.ios) { + view[originalTransform] = + view[originalTransform] ?? view.ios.transform; + + view.ios.transform = CGAffineTransformConcat( + view[originalTransform], + CGAffineTransformMakeScale(0.97, 0.97) + ); + } + }, + () => {} + ); + } else { + view + ?.animate({ + scale: { x: 0.97, y: 0.97 }, + duration: 120, + curve: CoreTypes.AnimationCurve.easeInOut, + }) + .then(() => {}) + .catch(() => {}); + } + }, + up: (view: View) => { + if (__APPLE__) { + UIView.animateWithDurationDelayUsingSpringWithDampingInitialSpringVelocityOptionsAnimationsCompletion( + 0.3, + 0, + 0.5, + 3, + UIViewAnimationOptions.CurveEaseInOut, + () => { + if (view?.ios) { + view.ios.transform = + view[originalTransform] ?? CGAffineTransformMakeScale(1, 1); + } + }, + () => {} + ); + } else { + view + ?.animate({ + scale: { x: 1, y: 1 }, + duration: 120, + curve: CoreTypes.AnimationCurve.easeInOut, + }) + .then(() => {}) + .catch(() => {}); + } + }, +}; diff --git a/samples/client/nativescript/src/main.ts b/samples/client/nativescript/src/main.ts index e9066d74..8e3fa53a 100644 --- a/samples/client/nativescript/src/main.ts +++ b/samples/client/nativescript/src/main.ts @@ -3,18 +3,23 @@ import { provideNativeScriptHttpClient, provideNativeScriptRouter, runNativeScriptAngularApp, -} from '@nativescript/angular'; -import { provideZonelessChangeDetection } from '@angular/core'; -import { withInterceptorsFromDi } from '@angular/common/http'; -import { App } from './app/app'; -import { Catalog, Theme, MessageProcessor } from '@a2ui/nativescript'; -import { NativeScriptCatalog } from './app/catalog'; -import { defaultTheme } from './app/theme'; -import { A2aService } from './app/services/a2a.service'; -import { ChatService } from './app/services/chat.service'; +} from "@nativescript/angular"; +import { provideZonelessChangeDetection } from "@angular/core"; +import { withInterceptorsFromDi } from "@angular/common/http"; +import { App } from "./app/app"; +import { Catalog, Theme, MessageProcessor } from "@a2ui/nativescript"; +import { NativeScriptCatalog } from "./app/catalog"; +import { defaultTheme } from "./app/theme"; +import { A2aService } from "./app/services/a2a.service"; +import { ChatService } from "./app/services/chat.service"; +import "./globals"; +import { Utils } from "@nativescript/core"; runNativeScriptAngularApp({ appModuleBootstrap: () => { + if (__APPLE__) { + Utils.ios.setWindowBackgroundColor('#000000'); + } return bootstrapApplication(App, { providers: [ provideNativeScriptHttpClient(withInterceptorsFromDi()), From 4da86defdc671d4c5f172b2601941a8cf4e1226e Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Sat, 3 Jan 2026 09:57:31 -0800 Subject: [PATCH 7/9] chore: cleanup adjustments --- samples/client/nativescript/src/app/app.ts | 2 + .../nativescript/src/app/demo-surfaces.ts | 1897 +++++++++++------ .../src/app/services/a2a.service.ts | 88 +- 3 files changed, 1271 insertions(+), 716 deletions(-) diff --git a/samples/client/nativescript/src/app/app.ts b/samples/client/nativescript/src/app/app.ts index b45ab96c..91713d08 100644 --- a/samples/client/nativescript/src/app/app.ts +++ b/samples/client/nativescript/src/app/app.ts @@ -44,6 +44,8 @@ export class App implements OnInit, AfterViewInit, OnDestroy { const keyboardManager = IQKeyboardManager.sharedManager(); keyboardManager.enable = true; keyboardManager.enableAutoToolbar = false; + keyboardManager.overrideKeyboardAppearance = true; + keyboardManager.keyboardAppearance = UIKeyboardAppearance.Dark; keyboardManager.shouldResignOnTouchOutside = true; keyboardManager.keyboardDistanceFromTextField = 0; } diff --git a/samples/client/nativescript/src/app/demo-surfaces.ts b/samples/client/nativescript/src/app/demo-surfaces.ts index b0e75fb2..00a5707a 100644 --- a/samples/client/nativescript/src/app/demo-surfaces.ts +++ b/samples/client/nativescript/src/app/demo-surfaces.ts @@ -1,9 +1,9 @@ -import { Types } from '../a2ui-lit-types'; +import { Types } from "../a2ui-lit-types"; /** * Comprehensive demo surfaces for showcasing ALL A2UI capabilities. * These are used when running in demo mode (no backend server connected). - * + * * Trigger phrases: * - "hello", "welcome" → Welcome surface * - "restaurant", "food", "eat" → Restaurant cards with actions @@ -21,58 +21,103 @@ import { Types } from '../a2ui-lit-types'; // WELCOME SURFACE // ============================================================ export const DEMO_WELCOME_SURFACE: Types.A2uiMessage = { - surfaceId: 'demo-welcome', + surfaceId: "demo-welcome", root: { - type: 'Column', - id: 'welcome-root', + type: "Column", + id: "welcome-root", children: [ { - type: 'Card', - id: 'welcome-card', - title: 'Welcome to A2UI Demo', - subtitle: 'Interactive Agent-to-User Interface', + type: "Card", + id: "welcome-card", + title: "Welcome to A2UI Demo", + subtitle: "Interactive Agent-to-User Interface", children: [ { - type: 'Text', - id: 'welcome-text', - text: 'This demo showcases A2UI\'s capabilities on NativeScript. Try these commands to see different UI surfaces:', - textStyle: 'body', + type: "Text", + id: "welcome-text", + text: "This demo showcases A2UI's capabilities on NativeScript. Try these commands to see different UI surfaces:", + textStyle: "body", }, { - type: 'Spacer', - id: 'spacer-1', + type: "Spacer", + id: "spacer-1", height: 16, }, { - type: 'Column', - id: 'command-list', + type: "Column", + id: "command-list", children: [ - { type: 'Text', id: 'cmd-1', text: '• "restaurants" - Card list with actions', textStyle: 'body' }, - { type: 'Text', id: 'cmd-2', text: '• "contact" - Contact card layout', textStyle: 'body' }, - { type: 'Text', id: 'cmd-3', text: '• "dashboard" - Analytics cards', textStyle: 'body' }, - { type: 'Text', id: 'cmd-4', text: '• "form" - Input fields & checkboxes', textStyle: 'body' }, - { type: 'Text', id: 'cmd-5', text: '• "list" - Scrollable list demo', textStyle: 'body' }, - { type: 'Text', id: 'cmd-6', text: '• "gallery" - Image showcase', textStyle: 'body' }, - { type: 'Text', id: 'cmd-7', text: '• "buttons" - All button variants', textStyle: 'body' }, - { type: 'Text', id: 'cmd-8', text: '• "menu" - Native platform menus', textStyle: 'body' }, - { type: 'Text', id: 'cmd-9', text: '• "showcase" - Full component demo', textStyle: 'body' }, + { + type: "Text", + id: "cmd-1", + text: '• "restaurants" - Card list with actions', + textStyle: "body", + }, + { + type: "Text", + id: "cmd-2", + text: '• "contact" - Contact card layout', + textStyle: "body", + }, + { + type: "Text", + id: "cmd-3", + text: '• "dashboard" - Analytics cards', + textStyle: "body", + }, + { + type: "Text", + id: "cmd-4", + text: '• "form" - Input fields & checkboxes', + textStyle: "body", + }, + { + type: "Text", + id: "cmd-5", + text: '• "list" - Scrollable list demo', + textStyle: "body", + }, + { + type: "Text", + id: "cmd-6", + text: '• "gallery" - Image showcase', + textStyle: "body", + }, + { + type: "Text", + id: "cmd-7", + text: '• "buttons" - All button variants', + textStyle: "body", + }, + { + type: "Text", + id: "cmd-8", + text: '• "menu" - Native platform menus', + textStyle: "body", + }, + { + type: "Text", + id: "cmd-9", + text: '• "showcase" - Full component demo', + textStyle: "body", + }, ], }, { - type: 'Spacer', - id: 'spacer-2', + type: "Spacer", + id: "spacer-2", height: 16, }, { - type: 'Row', - id: 'action-row', + type: "Row", + id: "action-row", children: [ { - type: 'Button', - id: 'try-demo-btn', - label: 'Try Showcase', - variant: 'primary', - action: { name: 'showcase' }, + type: "Button", + id: "try-demo-btn", + label: "Try Showcase", + variant: "primary", + action: { name: "showcase" }, }, ], }, @@ -86,117 +131,162 @@ export const DEMO_WELCOME_SURFACE: Types.A2uiMessage = { // RESTAURANT FINDER SURFACE // ============================================================ export const DEMO_RESTAURANT_SURFACE: Types.A2uiMessage = { - surfaceId: 'demo-restaurants', + surfaceId: "demo-restaurants", root: { - type: 'Column', - id: 'restaurant-root', + type: "Column", + id: "restaurant-root", children: [ { - type: 'Text', - id: 'restaurant-title', - text: '🍕 Top Restaurants Near You', - textStyle: 'title', + type: "Text", + id: "restaurant-title", + text: "🍕 Top Restaurants Near You", + textStyle: "title", }, { - type: 'Spacer', - id: 'spacer-top', + type: "Spacer", + id: "spacer-top", height: 12, }, { - type: 'Card', - id: 'restaurant-1', - title: 'La Piazza Italiana', - subtitle: '⭐ 4.8 • Italian • $$ • 0.3 mi', + type: "Card", + id: "restaurant-1", + title: "La Piazza Italiana", + subtitle: "⭐ 4.8 • Italian • $$ • 0.3 mi", children: [ { - type: 'Text', - id: 'restaurant-1-desc', - text: 'Authentic Italian cuisine with fresh pasta and wood-fired pizzas in a cozy atmosphere.', - textStyle: 'body', + type: "Text", + id: "restaurant-1-desc", + text: "Authentic Italian cuisine with fresh pasta and wood-fired pizzas in a cozy atmosphere.", + textStyle: "body", }, { - type: 'Spacer', - id: 'spacer-r1', + type: "Spacer", + id: "spacer-r1", height: 8, }, { - type: 'Row', - id: 'restaurant-1-tags', + type: "Row", + id: "restaurant-1-tags", children: [ - { type: 'Text', id: 'tag-1a', text: '🌿 Vegetarian', textStyle: 'caption' }, - { type: 'Text', id: 'tag-1b', text: '🍷 Full Bar', textStyle: 'caption' }, - { type: 'Text', id: 'tag-1c', text: '📍 North Beach', textStyle: 'caption' }, + { + type: "Text", + id: "tag-1a", + text: "🌿 Vegetarian", + textStyle: "caption", + }, + { + type: "Text", + id: "tag-1b", + text: "🍷 Full Bar", + textStyle: "caption", + }, + { + type: "Text", + id: "tag-1c", + text: "📍 North Beach", + textStyle: "caption", + }, ], }, ], actions: [ - { name: 'viewDetails', id: 'view-1', label: 'Details' }, - { name: 'reserve', id: 'reserve-1', label: 'Reserve' }, - { name: 'directions', id: 'dir-1', label: 'Directions' }, + { name: "viewDetails", id: "view-1", label: "Details" }, + { name: "reserve", id: "reserve-1", label: "Reserve" }, + { name: "directions", id: "dir-1", label: "Directions" }, ], }, { - type: 'Card', - id: 'restaurant-2', - title: 'Sakura Garden', - subtitle: '⭐ 4.6 • Japanese • $$$ • 0.5 mi', + type: "Card", + id: "restaurant-2", + title: "Sakura Garden", + subtitle: "⭐ 4.6 • Japanese • $$$ • 0.5 mi", children: [ { - type: 'Text', - id: 'restaurant-2-desc', - text: 'Premium sushi and traditional Japanese dishes. Omakase experience available nightly.', - textStyle: 'body', + type: "Text", + id: "restaurant-2-desc", + text: "Premium sushi and traditional Japanese dishes. Omakase experience available nightly.", + textStyle: "body", }, { - type: 'Spacer', - id: 'spacer-r2', + type: "Spacer", + id: "spacer-r2", height: 8, }, { - type: 'Row', - id: 'restaurant-2-tags', + type: "Row", + id: "restaurant-2-tags", children: [ - { type: 'Text', id: 'tag-2a', text: '🍣 Omakase', textStyle: 'caption' }, - { type: 'Text', id: 'tag-2b', text: '🍶 Sake Bar', textStyle: 'caption' }, - { type: 'Text', id: 'tag-2c', text: '📍 Japantown', textStyle: 'caption' }, + { + type: "Text", + id: "tag-2a", + text: "🍣 Omakase", + textStyle: "caption", + }, + { + type: "Text", + id: "tag-2b", + text: "🍶 Sake Bar", + textStyle: "caption", + }, + { + type: "Text", + id: "tag-2c", + text: "📍 Japantown", + textStyle: "caption", + }, ], }, ], actions: [ - { name: 'viewDetails', id: 'view-2', label: 'Details' }, - { name: 'reserve', id: 'reserve-2', label: 'Reserve' }, + { name: "viewDetails", id: "view-2", label: "Details" }, + { name: "reserve", id: "reserve-2", label: "Reserve" }, ], }, { - type: 'Card', - id: 'restaurant-3', - title: 'The Spice Route', - subtitle: '⭐ 4.7 • Indian • $$ • 0.8 mi', + type: "Card", + id: "restaurant-3", + title: "The Spice Route", + subtitle: "⭐ 4.7 • Indian • $$ • 0.8 mi", children: [ { - type: 'Text', - id: 'restaurant-3-desc', - text: 'Rich flavors from across India. Extensive vegetarian menu with vegan options available.', - textStyle: 'body', + type: "Text", + id: "restaurant-3-desc", + text: "Rich flavors from across India. Extensive vegetarian menu with vegan options available.", + textStyle: "body", }, { - type: 'Spacer', - id: 'spacer-r3', + type: "Spacer", + id: "spacer-r3", height: 8, }, { - type: 'Row', - id: 'restaurant-3-tags', + type: "Row", + id: "restaurant-3-tags", children: [ - { type: 'Text', id: 'tag-3a', text: '🌱 Vegan Options', textStyle: 'caption' }, - { type: 'Text', id: 'tag-3b', text: '🌶️ Spicy', textStyle: 'caption' }, - { type: 'Text', id: 'tag-3c', text: '📍 Mission', textStyle: 'caption' }, + { + type: "Text", + id: "tag-3a", + text: "🌱 Vegan Options", + textStyle: "caption", + }, + { + type: "Text", + id: "tag-3b", + text: "🌶️ Spicy", + textStyle: "caption", + }, + { + type: "Text", + id: "tag-3c", + text: "📍 Mission", + textStyle: "caption", + }, ], }, ], actions: [ - { name: 'viewDetails', id: 'view-3', label: 'Details' }, - { name: 'reserve', id: 'reserve-3', label: 'Reserve' }, + { name: "viewDetails", id: "view-3", label: "Details" }, + { name: "reserve", id: "reserve-3", label: "Reserve" }, ], }, ], @@ -207,160 +297,185 @@ export const DEMO_RESTAURANT_SURFACE: Types.A2uiMessage = { // CONTACT DETAILS SURFACE // ============================================================ export const DEMO_CONTACT_SURFACE: Types.A2uiMessage = { - surfaceId: 'demo-contact', + surfaceId: "demo-contact", root: { - type: 'Column', - id: 'contact-root', + type: "Column", + id: "contact-root", children: [ { - type: 'Card', - id: 'contact-card', + type: "Card", + id: "contact-card", children: [ { - type: 'Row', - id: 'contact-header', + type: "Row", + id: "contact-header", children: [ { - type: 'Column', - id: 'avatar-col', + type: "Column", + id: "avatar-col", children: [ { - type: 'Text', - id: 'contact-avatar', - text: '👤', - textStyle: 'title', + type: "Text", + id: "contact-avatar", + text: "👤", + textStyle: "title", }, ], }, { - type: 'Column', - id: 'contact-info', + type: "Spacer", + id: "spacer-avatar", + width: 12, + }, + { + type: "Column", + id: "contact-info", children: [ { - type: 'Text', - id: 'contact-name', - text: 'Sarah Johnson', - textStyle: 'subtitle', + type: "Text", + id: "contact-name", + text: "Sarah Johnson", + textStyle: "subtitle", + }, + { + type: "Text", + id: "contact-role", + text: "Senior Product Manager at Google", + textStyle: "body", }, { - type: 'Text', - id: 'contact-role', - text: 'Senior Product Manager at Google', - textStyle: 'body', + type: 'Spacer', + id: 'spacer-name-role', + height: 4, }, { - type: 'Text', - id: 'contact-location', - text: '📍 San Francisco, CA', - textStyle: 'caption', + type: "Text", + id: "contact-location", + text: "📍 San Francisco, CA", + textStyle: "caption", }, ], }, ], }, { - type: 'Divider', - id: 'divider-1', + type: "Divider", + id: "divider-1", }, { - type: 'Spacer', - id: 'spacer-contact-1', + type: "Spacer", + id: "spacer-contact-1", height: 8, }, { - type: 'Row', - id: 'contact-email-row', + type: "Row", + id: "contact-email-row", children: [ { - type: 'Text', - id: 'email-icon', - text: '📧', + type: "Text", + id: "email-icon", + text: "📧", + }, + { + type: "Spacer", + id: "spacer-email", + width: 4, }, { - type: 'Text', - id: 'email-value', - text: 'sarah.johnson@google.com', - textStyle: 'body', + type: "Text", + id: "email-value", + text: "sarah.johnson@google.com", + textStyle: "body", }, ], }, { - type: 'Spacer', - id: 'spacer-contact-2', - height: 4, + type: "Spacer", + id: "spacer-contact-2", + height: 8, }, { - type: 'Row', - id: 'contact-phone-row', + type: "Row", + id: "contact-phone-row", children: [ { - type: 'Text', - id: 'phone-icon', - text: '📱', + type: "Text", + id: "phone-icon", + text: "📱", }, { - type: 'Text', - id: 'phone-value', - text: '+1 (415) 555-0123', - textStyle: 'body', + type: "Spacer", + id: "spacer-phone", + width: 4, + }, + { + type: "Text", + id: "phone-value", + text: "+1 (415) 555-0123", + textStyle: "body", }, ], }, { - type: 'Spacer', - id: 'spacer-contact-3', - height: 4, + type: "Spacer", + id: "spacer-contact-3", + height: 8, }, { - type: 'Row', - id: 'contact-linkedin-row', + type: "Row", + id: "contact-linkedin-row", children: [ { - type: 'Text', - id: 'linkedin-icon', - text: '💼', + type: "Text", + id: "linkedin-icon", + text: "💼", }, { - type: 'Text', - id: 'linkedin-value', - text: 'linkedin.com/in/sarahjohnson', - textStyle: 'body', + type: "Spacer", + id: "spacer-email", + width: 4, + }, + { + type: "Text", + id: "linkedin-value", + text: "linkedin.com/in/sarahjohnson", + textStyle: "body", }, ], }, { - type: 'Divider', - id: 'divider-2', + type: "Divider", + id: "divider-2", }, { - type: 'Spacer', - id: 'spacer-contact-4', + type: "Spacer", + id: "spacer-contact-4", height: 8, }, { - type: 'Row', - id: 'contact-actions', + type: "Row", + id: "contact-actions", children: [ { - type: 'Button', - id: 'call-btn', - label: '📞 Call', - variant: 'primary', - action: { name: 'call' }, + type: "Button", + id: "call-btn", + label: "📞 Call", + variant: "primary", + action: { name: "call" }, }, { - type: 'Button', - id: 'email-btn', - label: '✉️ Email', - variant: 'secondary', - action: { name: 'email' }, + type: "Button", + id: "email-btn", + label: "✉️ Email", + variant: "secondary", + action: { name: "email" }, }, { - type: 'Button', - id: 'msg-btn', - label: '💬 Message', - variant: 'secondary', - action: { name: 'message' }, + type: "Button", + id: "msg-btn", + label: "💬 Message", + variant: "secondary", + action: { name: "message" }, }, ], }, @@ -374,139 +489,237 @@ export const DEMO_CONTACT_SURFACE: Types.A2uiMessage = { // ANALYTICS DASHBOARD SURFACE // ============================================================ export const DEMO_CHART_SURFACE: Types.A2uiMessage = { - surfaceId: 'demo-analytics', + surfaceId: "demo-analytics", root: { - type: 'Column', - id: 'chart-root', + type: "Column", + id: "chart-root", children: [ { - type: 'Text', - id: 'chart-title', - text: '📊 Analytics Dashboard', - textStyle: 'title', + type: "Text", + id: "chart-title", + text: "📊 Analytics Dashboard", + textStyle: "title", }, { - type: 'Spacer', - id: 'spacer-1', + type: "Spacer", + id: "spacer-1", height: 12, }, { - type: 'Row', - id: 'stats-row-1', + type: "Row", + id: "stats-row-1", children: [ { - type: 'Card', - id: 'stat-1', - title: '12,549', - subtitle: 'Total Users', + type: "Card", + id: "stat-1", + title: "12,549", + subtitle: "Total Users", children: [ { - type: 'Text', - id: 'stat-1-change', - text: '↑ 12.5% from last month', - textStyle: 'caption', + type: "Text", + id: "stat-1-change", + text: "↑ 12.5% from last month", + textStyle: "caption", }, ], }, { - type: 'Card', - id: 'stat-2', - title: '3,247', - subtitle: 'Active Today', + type: "Card", + id: "stat-2", + title: "3,247", + subtitle: "Active Today", children: [ { - type: 'Text', - id: 'stat-2-change', - text: '↑ 8.3% from yesterday', - textStyle: 'caption', + type: "Text", + id: "stat-2-change", + text: "↑ 8.3% from yesterday", + textStyle: "caption", }, ], }, ], }, { - type: 'Spacer', - id: 'spacer-stats', + type: "Spacer", + id: "spacer-stats", height: 8, }, { - type: 'Row', - id: 'stats-row-2', + type: "Row", + id: "stats-row-2", children: [ { - type: 'Card', - id: 'stat-3', - title: '$48.2K', - subtitle: 'Revenue', + type: "Card", + id: "stat-3", + title: "$48.2K", + subtitle: "Revenue", children: [ { - type: 'Text', - id: 'stat-3-change', - text: '↑ 23.1% this quarter', - textStyle: 'caption', + type: "Text", + id: "stat-3-change", + text: "↑ 23.1% this quarter", + textStyle: "caption", }, ], }, { - type: 'Card', - id: 'stat-4', - title: '98.5%', - subtitle: 'Uptime', + type: "Card", + id: "stat-4", + title: "98.5%", + subtitle: "Uptime", children: [ { - type: 'Text', - id: 'stat-4-change', - text: '✓ Exceeds SLA target', - textStyle: 'caption', + type: "Text", + id: "stat-4-change", + text: "✓ Exceeds SLA target", + textStyle: "caption", }, ], }, ], }, { - type: 'Spacer', - id: 'spacer-2', + type: "Spacer", + id: "spacer-2", height: 12, }, { - type: 'Card', - id: 'chart-card', - title: 'Weekly Activity', - subtitle: 'User sessions per day', + type: "Card", + id: "chart-card", + title: "Weekly Activity", + subtitle: "User sessions per day", children: [ { - type: 'Row', - id: 'chart-bars', - horizontalAlignment: 'spaceAround', + type: "Row", + id: "chart-bars", + horizontalAlignment: "spaceAround", children: [ - { type: 'Column', id: 'bar-col-1', children: [ - { type: 'Text', id: 'bar-1', text: '▓\n▓\n▓', textStyle: 'code' }, - { type: 'Text', id: 'label-1', text: 'Mon', textStyle: 'caption' }, - ]}, - { type: 'Column', id: 'bar-col-2', children: [ - { type: 'Text', id: 'bar-2', text: '▓\n▓\n▓\n▓', textStyle: 'code' }, - { type: 'Text', id: 'label-2', text: 'Tue', textStyle: 'caption' }, - ]}, - { type: 'Column', id: 'bar-col-3', children: [ - { type: 'Text', id: 'bar-3', text: '▓\n▓', textStyle: 'code' }, - { type: 'Text', id: 'label-3', text: 'Wed', textStyle: 'caption' }, - ]}, - { type: 'Column', id: 'bar-col-4', children: [ - { type: 'Text', id: 'bar-4', text: '▓\n▓\n▓\n▓\n▓', textStyle: 'code' }, - { type: 'Text', id: 'label-4', text: 'Thu', textStyle: 'caption' }, - ]}, - { type: 'Column', id: 'bar-col-5', children: [ - { type: 'Text', id: 'bar-5', text: '▓\n▓\n▓', textStyle: 'code' }, - { type: 'Text', id: 'label-5', text: 'Fri', textStyle: 'caption' }, - ]}, - { type: 'Column', id: 'bar-col-6', children: [ - { type: 'Text', id: 'bar-6', text: '▓\n▓\n▓\n▓', textStyle: 'code' }, - { type: 'Text', id: 'label-6', text: 'Sat', textStyle: 'caption' }, - ]}, - { type: 'Column', id: 'bar-col-7', children: [ - { type: 'Text', id: 'bar-7', text: '▓\n▓', textStyle: 'code' }, - { type: 'Text', id: 'label-7', text: 'Sun', textStyle: 'caption' }, - ]}, + { + type: "Column", + id: "bar-col-1", + children: [ + { + type: "Text", + id: "bar-1", + text: "▓\n▓\n▓", + textStyle: "code", + }, + { + type: "Text", + id: "label-1", + text: "Mon", + textStyle: "caption", + }, + ], + }, + { + type: "Column", + id: "bar-col-2", + children: [ + { + type: "Text", + id: "bar-2", + text: "▓\n▓\n▓\n▓", + textStyle: "code", + }, + { + type: "Text", + id: "label-2", + text: "Tue", + textStyle: "caption", + }, + ], + }, + { + type: "Column", + id: "bar-col-3", + children: [ + { + type: "Text", + id: "bar-3", + text: "▓\n▓", + textStyle: "code", + }, + { + type: "Text", + id: "label-3", + text: "Wed", + textStyle: "caption", + }, + ], + }, + { + type: "Column", + id: "bar-col-4", + children: [ + { + type: "Text", + id: "bar-4", + text: "▓\n▓\n▓\n▓\n▓", + textStyle: "code", + }, + { + type: "Text", + id: "label-4", + text: "Thu", + textStyle: "caption", + }, + ], + }, + { + type: "Column", + id: "bar-col-5", + children: [ + { + type: "Text", + id: "bar-5", + text: "▓\n▓\n▓", + textStyle: "code", + }, + { + type: "Text", + id: "label-5", + text: "Fri", + textStyle: "caption", + }, + ], + }, + { + type: "Column", + id: "bar-col-6", + children: [ + { + type: "Text", + id: "bar-6", + text: "▓\n▓\n▓\n▓", + textStyle: "code", + }, + { + type: "Text", + id: "label-6", + text: "Sat", + textStyle: "caption", + }, + ], + }, + { + type: "Column", + id: "bar-col-7", + children: [ + { + type: "Text", + id: "bar-7", + text: "▓\n▓", + textStyle: "code", + }, + { + type: "Text", + id: "label-7", + text: "Sun", + textStyle: "caption", + }, + ], + }, ], }, ], @@ -519,123 +732,138 @@ export const DEMO_CHART_SURFACE: Types.A2uiMessage = { // FORM INPUT SURFACE // ============================================================ export const DEMO_FORM_SURFACE: Types.A2uiMessage = { - surfaceId: 'demo-form', + surfaceId: "demo-form", root: { - type: 'Column', - id: 'form-root', + type: "Column", + id: "form-root", children: [ { - type: 'Text', - id: 'form-title', - text: '📝 Sign Up Form', - textStyle: 'title', + type: "Text", + id: "form-title", + text: "📝 Sign Up Form", + textStyle: "title", }, { - type: 'Spacer', - id: 'spacer-form-1', + type: "Spacer", + id: "spacer-form-1", height: 16, }, { - type: 'Card', - id: 'form-card', + type: "Card", + id: "form-card", children: [ { - type: 'TextField', - id: 'name-field', - label: 'Full Name', - placeholder: 'Enter your name', + type: "TextField", + id: "name-field", + label: "Full Name", + placeholder: "Enter your name", }, { - type: 'Spacer', - id: 'spacer-f1', + type: "Spacer", + id: "spacer-f1", height: 12, }, { - type: 'TextField', - id: 'email-field', - label: 'Email Address', - placeholder: 'you@example.com', + type: "TextField", + id: "email-field", + label: "Email Address", + placeholder: "you@example.com", }, { - type: 'Spacer', - id: 'spacer-f2', + type: "Spacer", + id: "spacer-f2", height: 12, }, { - type: 'TextField', - id: 'password-field', - label: 'Password', - placeholder: '••••••••', + type: "TextField", + id: "password-field", + label: "Password", + placeholder: "••••••••", secure: true, }, { - type: 'Spacer', - id: 'spacer-f3', + type: "Spacer", + id: "spacer-f3", height: 16, }, { - type: 'Divider', - id: 'form-divider', + type: "Divider", + id: "form-divider", }, { - type: 'Spacer', - id: 'spacer-f4', + type: "Spacer", + id: "spacer-f4", height: 16, }, { - type: 'Text', - id: 'prefs-title', - text: 'Preferences', - textStyle: 'subtitle', + type: "Text", + id: "prefs-title", + text: "Preferences", + textStyle: "subtitle", }, { - type: 'Spacer', - id: 'spacer-f5', + type: "Spacer", + id: "spacer-f5", height: 8, }, { - type: 'Row', - id: 'checkbox-row-1', + type: "Row", + id: "checkbox-row-1", children: [ - { type: 'Text', id: 'check-1', text: '☑️ Receive email updates', textStyle: 'body' }, + { + type: "Text", + id: "check-1", + text: "☑️ Receive email updates", + textStyle: "body", + }, ], }, { - type: 'Row', - id: 'checkbox-row-2', + type: "Row", + id: "checkbox-row-2", children: [ - { type: 'Text', id: 'check-2', text: '☐ Enable notifications', textStyle: 'body' }, + { + type: "Text", + id: "check-2", + text: "☐ Enable notifications", + textStyle: "body", + }, ], }, { - type: 'Row', - id: 'checkbox-row-3', + type: "Row", + id: "checkbox-row-3", children: [ - { type: 'Text', id: 'check-3', text: '☑️ Accept terms & conditions', textStyle: 'body' }, + { + type: "Text", + id: "check-3", + text: "☑️ Accept terms & conditions", + textStyle: "body", + }, ], }, { - type: 'Spacer', - id: 'spacer-f6', + type: "Spacer", + id: "spacer-f6", height: 16, }, { - type: 'Row', - id: 'form-actions', + type: "Row", + id: "form-actions", children: [ { - type: 'Button', - id: 'submit-btn', - label: 'Create Account', - variant: 'primary', - action: { name: 'submit' }, + type: "Button", + id: "submit-btn", + label: "Create Account", + variant: "primary", + action: { name: "submit" }, }, { - type: 'Button', - id: 'cancel-btn', - label: 'Cancel', - variant: 'secondary', - action: { name: 'cancel' }, + type: "Button", + id: "cancel-btn", + label: "Cancel", + variant: "secondary", + action: { name: "cancel" }, }, ], }, @@ -649,115 +877,213 @@ export const DEMO_FORM_SURFACE: Types.A2uiMessage = { // LIST COMPONENT SURFACE // ============================================================ export const DEMO_LIST_SURFACE: Types.A2uiMessage = { - surfaceId: 'demo-list', + surfaceId: "demo-list", root: { - type: 'Column', - id: 'list-root', + type: "Column", + id: "list-root", children: [ { - type: 'Text', - id: 'list-title', - text: '📋 Task List', - textStyle: 'title', + type: "Text", + id: "list-title", + text: "📋 To Do", + textStyle: "title", }, { - type: 'Spacer', - id: 'spacer-list-1', + type: "Spacer", + id: "spacer-list-1", height: 12, }, { - type: 'List', - id: 'task-list', - direction: 'vertical', + type: "List", + id: "task-list", + direction: "vertical", children: [ { - type: 'Card', - id: 'task-1', + type: "Card", + id: "task-1", children: [ { - type: 'Row', - id: 'task-1-row', + type: "Row", + id: "task-1-row", children: [ - { type: 'Text', id: 'task-1-check', text: '✅', textStyle: 'body' }, - { type: 'Column', id: 'task-1-content', children: [ - { type: 'Text', id: 'task-1-title', text: 'Complete project proposal', textStyle: 'subtitle' }, - { type: 'Text', id: 'task-1-meta', text: 'Completed yesterday', textStyle: 'caption' }, - ]}, + { + type: "Text", + id: "task-1-check", + text: "✅", + textStyle: "body", + }, + { type: "Spacer", id: "spacer-t5", width: 8 }, + { + type: "Column", + id: "task-1-content", + children: [ + { + type: "Text", + id: "task-1-title", + text: "Complete project proposal", + textStyle: "subtitle", + }, + { + type: "Text", + id: "task-1-meta", + text: "Completed yesterday", + textStyle: "caption", + }, + ], + }, ], }, ], }, { - type: 'Card', - id: 'task-2', + type: "Card", + id: "task-2", children: [ { - type: 'Row', - id: 'task-2-row', + type: "Row", + id: "task-2-row", children: [ - { type: 'Text', id: 'task-2-check', text: '✅', textStyle: 'body' }, - { type: 'Column', id: 'task-2-content', children: [ - { type: 'Text', id: 'task-2-title', text: 'Review design mockups', textStyle: 'subtitle' }, - { type: 'Text', id: 'task-2-meta', text: 'Completed today', textStyle: 'caption' }, - ]}, + { + type: "Text", + id: "task-2-check", + text: "✅", + textStyle: "body", + }, + { type: "Spacer", id: "spacer-t5", width: 8 }, + { + type: "Column", + id: "task-2-content", + children: [ + { + type: "Text", + id: "task-2-title", + text: "Review design mockups", + textStyle: "subtitle", + }, + { + type: "Text", + id: "task-2-meta", + text: "Completed today", + textStyle: "caption", + }, + ], + }, ], }, ], }, { - type: 'Card', - id: 'task-3', + type: "Card", + id: "task-3", children: [ { - type: 'Row', - id: 'task-3-row', + type: "Row", + id: "task-3-row", children: [ - { type: 'Text', id: 'task-3-check', text: '⬜', textStyle: 'body' }, - { type: 'Column', id: 'task-3-content', children: [ - { type: 'Text', id: 'task-3-title', text: 'Schedule team meeting', textStyle: 'subtitle' }, - { type: 'Text', id: 'task-3-meta', text: 'Due tomorrow', textStyle: 'caption' }, - ]}, + { + type: "Text", + id: "task-3-check", + text: "⬜", + textStyle: "body", + }, + { type: "Spacer", id: "spacer-t5", width: 8 }, + { + type: "Column", + id: "task-3-content", + children: [ + { + type: "Text", + id: "task-3-title", + text: "Schedule team meeting", + textStyle: "subtitle", + }, + { + type: "Text", + id: "task-3-meta", + text: "Due tomorrow", + textStyle: "caption", + }, + ], + }, ], }, ], actions: [ - { name: 'complete', id: 'complete-3', label: 'Done' }, - { name: 'reschedule', id: 'reschedule-3', label: 'Reschedule' }, + { name: "complete", id: "complete-3", label: "Done" }, + { name: "reschedule", id: "reschedule-3", label: "Reschedule" }, ], }, { - type: 'Card', - id: 'task-4', + type: "Card", + id: "task-4", children: [ { - type: 'Row', - id: 'task-4-row', + type: "Row", + id: "task-4-row", children: [ - { type: 'Text', id: 'task-4-check', text: '⬜', textStyle: 'body' }, - { type: 'Column', id: 'task-4-content', children: [ - { type: 'Text', id: 'task-4-title', text: 'Prepare quarterly report', textStyle: 'subtitle' }, - { type: 'Text', id: 'task-4-meta', text: 'Due in 3 days', textStyle: 'caption' }, - ]}, + { + type: "Text", + id: "task-4-check", + text: "⬜", + textStyle: "body", + }, + { type: "Spacer", id: "spacer-t5", width: 8 }, + { + type: "Column", + id: "task-4-content", + children: [ + { + type: "Text", + id: "task-4-title", + text: "Prepare quarterly report", + textStyle: "subtitle", + }, + { + type: "Text", + id: "task-4-meta", + text: "Due in 3 days", + textStyle: "caption", + }, + ], + }, ], }, ], - actions: [ - { name: 'complete', id: 'complete-4', label: 'Done' }, - ], + actions: [{ name: "complete", id: "complete-4", label: "Done" }], }, { - type: 'Card', - id: 'task-5', + type: "Card", + id: "task-5", children: [ { - type: 'Row', - id: 'task-5-row', + type: "Row", + id: "task-5-row", children: [ - { type: 'Text', id: 'task-5-check', text: '⬜', textStyle: 'body' }, - { type: 'Column', id: 'task-5-content', children: [ - { type: 'Text', id: 'task-5-title', text: 'Update documentation', textStyle: 'subtitle' }, - { type: 'Text', id: 'task-5-meta', text: 'Due next week', textStyle: 'caption' }, - ]}, + { + type: "Text", + id: "task-5-check", + text: "⬜", + textStyle: "body", + }, + { type: "Spacer", id: "spacer-t5", width: 8 }, + { + type: "Column", + id: "task-5-content", + children: [ + { + type: "Text", + id: "task-5-title", + text: "Update documentation", + textStyle: "subtitle", + }, + { + type: "Text", + id: "task-5-meta", + text: "Due next week", + textStyle: "caption", + }, + ], + }, ], }, ], @@ -765,16 +1091,16 @@ export const DEMO_LIST_SURFACE: Types.A2uiMessage = { ], }, { - type: 'Spacer', - id: 'spacer-list-2', + type: "Spacer", + id: "spacer-list-2", height: 12, }, { - type: 'Button', - id: 'add-task-btn', - label: '+ Add New Task', - variant: 'primary', - action: { name: 'addTask' }, + type: "Button", + id: "add-task-btn", + label: "+ Add New Task", + variant: "primary", + action: { name: "addTask" }, }, ], } as Types.Node, @@ -784,127 +1110,127 @@ export const DEMO_LIST_SURFACE: Types.A2uiMessage = { // IMAGE GALLERY SURFACE // ============================================================ export const DEMO_IMAGE_SURFACE: Types.A2uiMessage = { - surfaceId: 'demo-gallery', + surfaceId: "demo-gallery", root: { - type: 'Column', - id: 'gallery-root', + type: "Column", + id: "gallery-root", children: [ { - type: 'Text', - id: 'gallery-title', - text: '🖼️ Image Gallery', - textStyle: 'title', + type: "Text", + id: "gallery-title", + text: "🖼️ Images", + textStyle: "title", }, { - type: 'Text', - id: 'gallery-subtitle', - text: 'A2UI supports images with various sizing hints', - textStyle: 'caption', + type: "Text", + id: "gallery-subtitle", + text: "A2UI supports images with various sizing hints", + textStyle: "caption", }, { - type: 'Spacer', - id: 'spacer-gallery-1', + type: "Spacer", + id: "spacer-gallery-1", height: 12, }, { - type: 'Card', - id: 'featured-image-card', - title: 'Featured Photo', + type: "Card", + id: "featured-image-card", + title: "Featured Photo", children: [ { - type: 'Image', - id: 'featured-image', - url: 'https://picsum.photos/400/200', - fit: 'cover', - usageHint: 'largeFeature', + type: "Image", + id: "featured-image", + url: "https://picsum.photos/400/200", + fit: "cover", + usageHint: "largeFeature", }, { - type: 'Spacer', - id: 'spacer-g1', + type: "Spacer", + id: "spacer-g1", height: 8, }, { - type: 'Text', - id: 'featured-caption', - text: 'Beautiful landscape photography with cover fit', - textStyle: 'caption', + type: "Text", + id: "featured-caption", + text: "Beautiful landscape photography with cover fit", + textStyle: "caption", }, ], }, { - type: 'Spacer', - id: 'spacer-gallery-2', + type: "Spacer", + id: "spacer-gallery-2", height: 12, }, { - type: 'Row', - id: 'thumbnail-row', + type: "Row", + id: "thumbnail-row", children: [ { - type: 'Card', - id: 'thumb-1', + type: "Card", + id: "thumb-1", children: [ { - type: 'Image', - id: 'thumb-img-1', - url: 'https://picsum.photos/300/300?random=1', - usageHint: 'smallFeature', + type: "Image", + id: "thumb-img-1", + url: "https://picsum.photos/300/300?random=1", + usageHint: "smallFeature", }, ], }, { - type: 'Card', - id: 'thumb-2', + type: "Card", + id: "thumb-2", children: [ { - type: 'Image', - id: 'thumb-img-2', - url: 'https://picsum.photos/300/300?random=2', - usageHint: 'smallFeature', + type: "Image", + id: "thumb-img-2", + url: "https://picsum.photos/300/300?random=2", + usageHint: "smallFeature", }, ], }, { - type: 'Card', - id: 'thumb-3', + type: "Card", + id: "thumb-3", children: [ { - type: 'Image', - id: 'thumb-img-3', - url: 'https://picsum.photos/300/300?random=3', - usageHint: 'smallFeature', + type: "Image", + id: "thumb-img-3", + url: "https://picsum.photos/300/300?random=3", + usageHint: "smallFeature", }, ], }, ], }, { - type: 'Spacer', - id: 'spacer-gallery-3', + type: "Spacer", + id: "spacer-gallery-3", height: 12, }, { - type: 'Row', - id: 'gallery-actions', + type: "Row", + id: "gallery-actions", children: [ { - type: 'Button', - id: 'upload-btn', - label: '📤 Upload', - variant: 'primary', - action: { name: 'upload' }, + type: "Button", + id: "upload-btn", + label: "📤 Upload", + variant: "primary", + action: { name: "upload" }, }, { - type: 'Spacer', - id: 'spacer-g2', - width: 8, + type: "Spacer", + id: "spacer-g2", + width: 8, }, { - type: 'Button', - id: 'share-btn', - label: '🔗 Share', - variant: 'secondary', - action: { name: 'share' }, + type: "Button", + id: "share-btn", + label: "🔗 Share", + variant: "secondary", + action: { name: "share" }, }, ], }, @@ -916,79 +1242,133 @@ export const DEMO_IMAGE_SURFACE: Types.A2uiMessage = { // BUTTON VARIANTS SURFACE // ============================================================ export const DEMO_BUTTONS_SURFACE: Types.A2uiMessage = { - surfaceId: 'demo-buttons', + surfaceId: "demo-buttons", root: { - type: 'Column', - id: 'buttons-root', + type: "Column", + id: "buttons-root", children: [ { - type: 'Text', - id: 'buttons-title', - text: '🔘 Button Variants', - textStyle: 'title', + type: "Text", + id: "buttons-title", + text: "🔘 Button Variants", + textStyle: "title", }, { - type: 'Spacer', - id: 'spacer-b1', + type: "Spacer", + id: "spacer-b1", height: 16, }, { - type: 'Card', - id: 'primary-section', - title: 'Primary Buttons', - subtitle: 'For main call-to-action', + type: "Card", + id: "primary-section", + title: "Primary Buttons", + subtitle: "For main call-to-action", children: [ { - type: 'Row', - id: 'primary-row', + type: "Row", + id: "primary-row", children: [ - { type: 'Button', id: 'btn-p1', label: 'Submit', variant: 'primary', action: { name: 'submit' } }, - { type: 'Button', id: 'btn-p2', label: 'Continue', variant: 'primary', action: { name: 'continue' } }, - { type: 'Button', id: 'btn-p3', label: 'Save', variant: 'primary', action: { name: 'save' } }, + { + type: "Button", + id: "btn-p1", + label: "Submit", + variant: "primary", + action: { name: "submit" }, + }, + { + type: "Button", + id: "btn-p2", + label: "Continue", + variant: "primary", + action: { name: "continue" }, + }, + { + type: "Button", + id: "btn-p3", + label: "Save", + variant: "primary", + action: { name: "save" }, + }, ], }, ], }, { - type: 'Spacer', - id: 'spacer-b2', + type: "Spacer", + id: "spacer-b2", height: 12, }, { - type: 'Card', - id: 'secondary-section', - title: 'Secondary Buttons', - subtitle: 'For alternative actions', + type: "Card", + id: "secondary-section", + title: "Secondary Buttons", + subtitle: "For alternative actions", children: [ { - type: 'Row', - id: 'secondary-row', + type: "Row", + id: "secondary-row", children: [ - { type: 'Button', id: 'btn-s1', label: 'Cancel', variant: 'secondary', action: { name: 'cancel' } }, - { type: 'Button', id: 'btn-s2', label: 'Back', variant: 'secondary', action: { name: 'back' } }, - { type: 'Button', id: 'btn-s3', label: 'Skip', variant: 'secondary', action: { name: 'skip' } }, + { + type: "Button", + id: "btn-s1", + label: "Cancel", + variant: "secondary", + action: { name: "cancel" }, + }, + { + type: "Button", + id: "btn-s2", + label: "Back", + variant: "secondary", + action: { name: "back" }, + }, + { + type: "Button", + id: "btn-s3", + label: "Skip", + variant: "secondary", + action: { name: "skip" }, + }, ], }, ], }, { - type: 'Spacer', - id: 'spacer-b3', + type: "Spacer", + id: "spacer-b3", height: 12, }, { - type: 'Card', - id: 'icon-section', - title: 'Buttons with Icons', - subtitle: 'Using emoji as icon indicators', + type: "Card", + id: "icon-section", + title: "Buttons with Icons", + subtitle: "Using emoji as icon indicators", children: [ { - type: 'Row', - id: 'icon-row', + type: "Row", + id: "icon-row", children: [ - { type: 'Button', id: 'btn-i1', label: '❤️ Like', variant: 'secondary', action: { name: 'like' } }, - { type: 'Button', id: 'btn-i2', label: '📤 Share', variant: 'secondary', action: { name: 'share' } }, - { type: 'Button', id: 'btn-i3', label: '💾 Save', variant: 'primary', action: { name: 'save' } }, + { + type: "Button", + id: "btn-i1", + label: "❤️ Like", + variant: "secondary", + action: { name: "like" }, + }, + { + type: "Button", + id: "btn-i2", + label: "📤 Share", + variant: "secondary", + action: { name: "share" }, + }, + { + type: "Button", + id: "btn-i3", + label: "💾 Save", + variant: "primary", + action: { name: "save" }, + }, ], }, ], @@ -1001,169 +1381,241 @@ export const DEMO_BUTTONS_SURFACE: Types.A2uiMessage = { // FULL COMPONENT SHOWCASE SURFACE // ============================================================ export const DEMO_SHOWCASE_SURFACE: Types.A2uiMessage = { - surfaceId: 'demo-showcase', + surfaceId: "demo-showcase", root: { - type: 'Column', - id: 'showcase-root', + type: "Column", + id: "showcase-root", children: [ { - type: 'Text', - id: 'showcase-title', - text: '🎨 A2UI Component Showcase', - textStyle: 'title', + type: "Text", + id: "showcase-title", + text: "🎨 A2UI Component Showcase", + textStyle: "title", }, { - type: 'Text', - id: 'showcase-subtitle', - text: 'All available NativeScript A2UI components', - textStyle: 'caption', + type: "Text", + id: "showcase-subtitle", + text: "All available NativeScript A2UI components", + textStyle: "caption", }, { - type: 'Spacer', - id: 'spacer-s1', + type: "Spacer", + id: "spacer-s1", height: 16, }, // Text Styles { - type: 'Card', - id: 'text-section', - title: '📝 Text Styles', + type: "Card", + id: "text-section", + title: "📝 Text Styles", children: [ - { type: 'Text', id: 'text-title', text: 'Title Style', textStyle: 'title' }, - { type: 'Text', id: 'text-subtitle', text: 'Subtitle Style', textStyle: 'subtitle' }, - { type: 'Text', id: 'text-body', text: 'Body text style for regular content and paragraphs.', textStyle: 'body' }, - { type: 'Spacer', id: 'spacer-text-1', height: 4 }, - { type: 'Text', id: 'text-caption', text: 'Caption style for metadata and small text', textStyle: 'caption' }, - { type: 'Text', id: 'text-code', text: 'const code = "monospace";', textStyle: 'code' }, + { + type: "Text", + id: "text-title", + text: "Title Style", + textStyle: "title", + }, + { + type: "Text", + id: "text-subtitle", + text: "Subtitle Style", + textStyle: "subtitle", + }, + { + type: "Text", + id: "text-body", + text: "Body text style for regular content and paragraphs.", + textStyle: "body", + }, + { type: "Spacer", id: "spacer-text-1", height: 4 }, + { + type: "Text", + id: "text-caption", + text: "Caption style for metadata and small text", + textStyle: "caption", + }, + { + type: "Text", + id: "text-code", + text: 'const code = "monospace";', + textStyle: "code", + }, ], }, { - type: 'Spacer', - id: 'spacer-s2', + type: "Spacer", + id: "spacer-s2", height: 12, }, // Layout Components { - type: 'Card', - id: 'layout-section', - title: '📐 Layout Components', + type: "Card", + id: "layout-section", + title: "📐 Layout Components", children: [ - { type: 'Text', id: 'layout-desc', text: 'Row (horizontal) and Column (vertical) layouts:', textStyle: 'caption' }, { - type: 'Spacer', - id: 'spacer-layout-1', + type: "Text", + id: "layout-desc", + text: "Row (horizontal) and Column (vertical) layouts:", + textStyle: "caption", + }, + { + type: "Spacer", + id: "spacer-layout-1", height: 8, }, { - type: 'Row', - id: 'demo-row', + type: "Row", + id: "demo-row", children: [ - { type: 'Card', id: 'row-item-1', title: 'Row 1', children: [] }, - { type: 'Card', id: 'row-item-2', title: 'Row 2', children: [] }, - { type: 'Card', id: 'row-item-3', title: 'Row 3', children: [] }, + { type: "Card", id: "row-item-1", title: "Row 1", children: [] }, + { type: "Card", id: "row-item-2", title: "Row 2", children: [] }, + { type: "Card", id: "row-item-3", title: "Row 3", children: [] }, ], }, { - type: 'Spacer', - id: 'spacer-layout-2', + type: "Spacer", + id: "spacer-layout-2", height: 8, }, { - type: 'Divider', - id: 'layout-divider', + type: "Divider", + id: "layout-divider", }, { - type: 'Spacer', - id: 'spacer-layout-3', + type: "Spacer", + id: "spacer-layout-3", height: 8, }, - { type: 'Text', id: 'divider-note', text: '↑ Divider component above', textStyle: 'caption' }, + { + type: "Text", + id: "divider-note", + text: "↑ Divider component above", + textStyle: "caption", + }, ], }, { - type: 'Spacer', - id: 'spacer-s3', + type: "Spacer", + id: "spacer-s3", height: 12, }, // Interactive Components { - type: 'Card', - id: 'interactive-section', - title: '👆 Interactive Components', + type: "Card", + id: "interactive-section", + title: "👆 Interactive Components", children: [ - { type: 'Text', id: 'btn-desc', text: 'Button variants:', textStyle: 'caption' }, { - type: 'Spacer', - id: 'spacer-int-1', + type: "Text", + id: "btn-desc", + text: "Button variants:", + textStyle: "caption", + }, + { + type: "Spacer", + id: "spacer-int-1", height: 8, }, { - type: 'Row', - id: 'btn-demo-row', + type: "Row", + id: "btn-demo-row", children: [ - { type: 'Button', id: 'demo-primary', label: 'Primary', variant: 'primary', action: { name: 'demo' } }, - { type: 'Button', id: 'demo-secondary', label: 'Secondary', variant: 'secondary', action: { name: 'demo' } }, + { + type: "Button", + id: "demo-primary", + label: "Primary", + variant: "primary", + action: { name: "demo" }, + }, + { + type: "Button", + id: "demo-secondary", + label: "Secondary", + variant: "secondary", + action: { name: "demo" }, + }, ], }, { - type: 'Spacer', - id: 'spacer-int-2', + type: "Spacer", + id: "spacer-int-2", height: 12, }, - { type: 'Text', id: 'input-desc', text: 'Input field:', textStyle: 'caption' }, { - type: 'Spacer', - id: 'spacer-int-3', + type: "Text", + id: "input-desc", + text: "Input field:", + textStyle: "caption", + }, + { + type: "Spacer", + id: "spacer-int-3", height: 8, }, { - type: 'TextField', - id: 'demo-input', - label: 'Sample Input', - placeholder: 'Type something...', + type: "TextField", + id: "demo-input", + label: "Sample Input", + placeholder: "Type something...", }, ], }, { - type: 'Spacer', - id: 'spacer-s4', + type: "Spacer", + id: "spacer-s4", height: 12, }, // Card with Actions { - type: 'Card', - id: 'action-card-section', - title: '🎯 Card with Actions', - subtitle: 'Cards can have footer action buttons', + type: "Card", + id: "action-card-section", + title: "🎯 Card with Actions", + subtitle: "Cards can have footer action buttons", children: [ { - type: 'Text', - id: 'action-card-text', - text: 'This card demonstrates the actions property which renders as footer buttons.', - textStyle: 'body', + type: "Text", + id: "action-card-text", + text: "This card demonstrates the actions property which renders as footer buttons.", + textStyle: "body", }, ], actions: [ - { name: 'action1', id: 'action-1', label: 'Action 1' }, - { name: 'action2', id: 'action-2', label: 'Action 2' }, - { name: 'action3', id: 'action-3', label: 'More...' }, + { name: "action1", id: "action-1", label: "Action 1" }, + { name: "action2", id: "action-2", label: "Action 2" }, + { name: "action3", id: "action-3", label: "More..." }, ], }, { - type: 'Spacer', - id: 'spacer-s5', + type: "Spacer", + id: "spacer-s5", height: 12, }, // Spacer demo { - type: 'Card', - id: 'spacer-section', - title: '📏 Spacer Component', + type: "Card", + id: "spacer-section", + title: "📏 Spacer Component", children: [ - { type: 'Text', id: 'spacer-text-1', text: 'No spacer below', textStyle: 'body' }, - { type: 'Text', id: 'spacer-text-2', text: 'Text right after', textStyle: 'body' }, - { type: 'Spacer', id: 'demo-spacer', height: 24 }, - { type: 'Text', id: 'spacer-text-3', text: '24px spacer above', textStyle: 'body' }, + { + type: "Text", + id: "spacer-text-1", + text: "No spacer below", + textStyle: "body", + }, + { + type: "Text", + id: "spacer-text-2", + text: "Text right after", + textStyle: "body", + }, + { type: "Spacer", id: "demo-spacer", height: 24 }, + { + type: "Text", + id: "spacer-text-3", + text: "24px spacer above", + textStyle: "body", + }, ], }, ], @@ -1174,74 +1626,91 @@ export const DEMO_SHOWCASE_SURFACE: Types.A2uiMessage = { // MENU DEMO SURFACE // ============================================================ export const DEMO_MENU_SURFACE: Types.A2uiMessage = { - surfaceId: 'demo-menu', + surfaceId: "demo-menu", root: { - type: 'Column', - id: 'menu-root', + type: "Column", + id: "menu-root", children: [ { - type: 'Card', - id: 'menu-card-1', - title: 'Native Platform Menus', + type: "Card", + id: "menu-card-1", + title: "Native Platform Menus", children: [ { - type: 'Text', - id: 'menu-desc', - text: 'Tap the buttons below to see native dropdown menus. On iOS uses UIMenu, on Android uses PopupMenu.', - textStyle: 'body', + type: "Text", + id: "menu-desc", + text: "Tap the buttons below to see native dropdown menus. On iOS uses UIMenu, on Android uses PopupMenu.", + textStyle: "body", }, { - type: 'Spacer', - id: 'menu-spacer-2', + type: "Spacer", + id: "menu-spacer-2", height: 16, }, { - type: 'Row', - id: 'menu-examples-row', + type: "Row", + id: "menu-examples-row", children: [ { - type: 'Menu', - id: 'options-menu', - label: '⋮', - title: 'Options', + type: "Menu", + id: "options-menu", + label: "⋮", + title: "Options", items: [ - { id: 'edit', title: 'Edit', icon: 'pencil' }, - { id: 'share', title: 'Share', icon: 'square.and.arrow.up' }, - { id: 'duplicate', title: 'Duplicate', icon: 'doc.on.doc' }, - { id: 'delete', title: 'Delete', destructive: true, icon: 'trash' }, + { id: "edit", title: "Edit", icon: "pencil" }, + { id: "share", title: "Share", icon: "square.and.arrow.up" }, + { id: "duplicate", title: "Duplicate", icon: "doc.on.doc" }, + { + id: "delete", + title: "Delete", + destructive: true, + icon: "trash", + }, ], }, { - type: 'Spacer', - id: 'menu-btn-spacer', + type: "Spacer", + id: "menu-btn-spacer", width: 16, }, { - type: 'Menu', - id: 'actions-menu', - label: 'Actions', - title: 'Quick Actions', + type: "Menu", + id: "actions-menu", + label: "Actions", + title: "Quick Actions", items: [ - { id: 'new-doc', title: 'New Document', icon: 'doc.badge.plus' }, - { id: 'new-folder', title: 'New Folder', icon: 'folder.badge.plus' }, - { id: 'import', title: 'Import File', icon: 'square.and.arrow.down' }, + { + id: "new-doc", + title: "New Document", + icon: "doc.badge.plus", + }, + { + id: "new-folder", + title: "New Folder", + icon: "folder.badge.plus", + }, + { + id: "import", + title: "Import File", + icon: "square.and.arrow.down", + }, ], }, { - type: 'Spacer', - id: 'menu-btn-spacer-2', + type: "Spacer", + id: "menu-btn-spacer-2", width: 16, }, { - type: 'Menu', - id: 'sort-menu', - label: 'Sort ▾', - title: 'Sort By', + type: "Menu", + id: "sort-menu", + label: "Sort ▾", + title: "Sort By", items: [ - { id: 'sort-name', title: 'Name' }, - { id: 'sort-date', title: 'Date Modified' }, - { id: 'sort-size', title: 'Size' }, - { id: 'sort-type', title: 'Type' }, + { id: "sort-name", title: "Name" }, + { id: "sort-date", title: "Date Modified" }, + { id: "sort-size", title: "Size" }, + { id: "sort-type", title: "Type" }, ], }, ], @@ -1249,24 +1718,49 @@ export const DEMO_MENU_SURFACE: Types.A2uiMessage = { ], }, { - type: 'Spacer', - id: 'menu-spacer-3', + type: "Spacer", + id: "menu-spacer-3", height: 16, }, { - type: 'Card', - id: 'menu-card-2', - title: 'Features', + type: "Card", + id: "menu-card-2", + title: "Features", children: [ { - type: 'Column', - id: 'menu-features', + type: "Column", + id: "menu-features", children: [ - { type: 'Text', id: 'mf-1', text: '• Native look and feel on each platform', textStyle: 'body' }, - { type: 'Text', id: 'mf-2', text: '• Supports SF Symbols icons on iOS', textStyle: 'body' }, - { type: 'Text', id: 'mf-3', text: '• Destructive items shown in red', textStyle: 'body' }, - { type: 'Text', id: 'mf-4', text: '• Items can be disabled', textStyle: 'body' }, - { type: 'Text', id: 'mf-5', text: '• Menu selections trigger actions', textStyle: 'body' }, + { + type: "Text", + id: "mf-1", + text: "• Native look and feel on each platform", + textStyle: "body", + }, + { + type: "Text", + id: "mf-2", + text: "• Supports SF Symbols icons on iOS", + textStyle: "body", + }, + { + type: "Text", + id: "mf-3", + text: "• Destructive items shown in red", + textStyle: "body", + }, + { + type: "Text", + id: "mf-4", + text: "• Items can be disabled", + textStyle: "body", + }, + { + type: "Text", + id: "mf-5", + text: "• Menu selections trigger actions", + textStyle: "body", + }, ], }, ], @@ -1278,91 +1772,146 @@ export const DEMO_MENU_SURFACE: Types.A2uiMessage = { // ============================================================ // DEMO RESPONSE ROUTER // ============================================================ -export function getDemoResponse(query: string): { text: string; surface?: Types.A2uiMessage } { +export function getDemoResponse(query: string): { + text: string; + surface?: Types.A2uiMessage; +} { const q = query.toLowerCase().trim(); - + // Restaurant/Food queries - if (q.includes('restaurant') || q.includes('food') || q.includes('eat') || q.includes('dinner') || q.includes('lunch')) { + if ( + q.includes("restaurant") || + q.includes("food") || + q.includes("eat") || + q.includes("dinner") || + q.includes("lunch") + ) { return { - text: '🍕 I found some great restaurants near you! Here are my top recommendations:', + text: "🍕 I found some great restaurants near you! Here are my top recommendations:", surface: DEMO_RESTAURANT_SURFACE, }; } - + // Contact queries - if (q.includes('contact') || q.includes('person') || q.includes('profile') || q.includes('john') || q.includes('sarah')) { + if ( + q.includes("contact") || + q.includes("person") || + q.includes("profile") || + q.includes("john") || + q.includes("sarah") + ) { return { - text: '📇 Here\'s the contact information you requested:', + text: "📇 Here's the contact information you requested:", surface: DEMO_CONTACT_SURFACE, }; } - + // Analytics/Dashboard queries - if (q.includes('analytics') || q.includes('chart') || q.includes('stats') || q.includes('dashboard') || q.includes('metrics')) { + if ( + q.includes("analytics") || + q.includes("chart") || + q.includes("stats") || + q.includes("dashboard") || + q.includes("metrics") + ) { return { - text: '📊 Here\'s your analytics dashboard with the latest data:', + text: "📊 Here's your analytics dashboard with the latest data:", surface: DEMO_CHART_SURFACE, }; } - + // Form/Input queries - if (q.includes('form') || q.includes('input') || q.includes('signup') || q.includes('sign up') || q.includes('register')) { + if ( + q.includes("form") || + q.includes("input") || + q.includes("signup") || + q.includes("sign up") || + q.includes("register") + ) { return { - text: '📝 Here\'s a sign-up form demonstrating input components:', + text: "📝 Here's a sign-up form:", surface: DEMO_FORM_SURFACE, }; } - + // List queries - if (q.includes('list') || q.includes('task') || q.includes('todo') || q.includes('items') || q.includes('scroll')) { + if ( + q.includes("list") || + q.includes("task") || + q.includes("todo") || + q.includes("items") || + q.includes("scroll") + ) { return { - text: '📋 Here\'s a task list demonstrating the List component:', + text: "📋 Here's your todos:", surface: DEMO_LIST_SURFACE, }; } - + // Image/Gallery queries - if (q.includes('image') || q.includes('photo') || q.includes('gallery') || q.includes('picture')) { + if ( + q.includes("image") || + q.includes("photo") || + q.includes("gallery") || + q.includes("picture") + ) { return { - text: '🖼️ Here\'s an image gallery demonstrating the Image component:', + text: "🖼️ Here's your recent images:", surface: DEMO_IMAGE_SURFACE, }; } - + // Button queries - if (q.includes('button') || q.includes('action') || q.includes('click')) { + if (q.includes("button") || q.includes("action") || q.includes("click")) { return { - text: '🔘 Here are all the button variants available in A2UI:', + text: "🔘 Here are all the button variants available in A2UI:", surface: DEMO_BUTTONS_SURFACE, }; } - + // Menu queries - if (q.includes('menu') || q.includes('popup') || q.includes('dropdown')) { + if (q.includes("menu") || q.includes("popup") || q.includes("dropdown")) { return { - text: '📱 Here\'s a demo of native platform menus:', + text: "📱 You bet! Here's native platform menus:", surface: DEMO_MENU_SURFACE, }; } - + // Showcase/All components - if (q.includes('all') || q.includes('showcase') || q.includes('components') || q.includes('demo') || q.includes('everything')) { + if ( + q.includes("all") || + q.includes("showcase") || + q.includes("components") || + q.includes("demo") || + q.includes("everything") + ) { return { - text: '🎨 Here\'s a comprehensive showcase of all A2UI components:', + text: "🎨 Here's a comprehensive showcase of all A2UI components:", surface: DEMO_SHOWCASE_SURFACE, }; } - + // Hello/Welcome - if (q.includes('hello') || q.includes('hi') || q.includes('hey') || q.includes('welcome') || q.includes('start')) { + if ( + q.includes("hello") || + q.includes("hi") || + q.includes("hey") || + q.includes("welcome") || + q.includes("start") + ) { return { - text: 'Hello! 👋 I\'m the A2UI demo agent. Let me show you what I can do!', + text: "Hello! 👋 I'm the A2UI demo agent. Let me show you what I can do!", surface: DEMO_WELCOME_SURFACE, }; } - + // Help - if (q.includes('help') || q.includes('what can') || q.includes('commands') || q.includes('options')) { + if ( + q.includes("help") || + q.includes("what can") || + q.includes("commands") || + q.includes("options") + ) { return { text: `I can demonstrate A2UI's rich interface capabilities! Try these commands: @@ -1379,7 +1928,7 @@ export function getDemoResponse(query: string): { text: string; surface?: Types. Each command displays an interactive UI surface!`, }; } - + // Default response with welcome surface return { text: `I'm running in demo mode. Try one of these commands to see A2UI surfaces: diff --git a/samples/client/nativescript/src/app/services/a2a.service.ts b/samples/client/nativescript/src/app/services/a2a.service.ts index 521b38c7..8c2c2a73 100644 --- a/samples/client/nativescript/src/app/services/a2a.service.ts +++ b/samples/client/nativescript/src/app/services/a2a.service.ts @@ -1,6 +1,6 @@ -import { Injectable, signal, computed } from '@angular/core'; -import { Http, HttpResponse } from '@nativescript/core'; -import { Types } from '../../a2ui-lit-types'; +import { Injectable, signal, computed } from "@angular/core"; +import { Http, HttpResponse } from "@nativescript/core"; +import { Types } from "../../a2ui-lit-types"; export interface AgentCard { name: string; @@ -12,14 +12,14 @@ export interface AgentCard { } export interface MessagePart { - type: 'text' | 'file' | 'data'; + type: "text" | "file" | "data"; text?: string; mimeType?: string; data?: unknown; } export interface A2aMessage { - role: 'user' | 'agent'; + role: "user" | "agent"; parts: MessagePart[]; timestamp?: number; taskId?: string; @@ -27,19 +27,19 @@ export interface A2aMessage { export interface ChatMessage { id: string; - role: 'user' | 'agent'; + role: "user" | "agent"; content: string; timestamp: Date; surfaces?: Types.A2uiMessage[]; - status?: 'sending' | 'sent' | 'error'; + status?: "sending" | "sent" | "error"; } -@Injectable({ providedIn: 'root' }) +@Injectable({ providedIn: "root" }) export class A2aService { // Configure your A2A server endpoint here - private readonly serverUrl = 'http://localhost:10002'; + private readonly serverUrl = "http://localhost:10002"; // A2A SDK uses root endpoint for JSON-RPC - private readonly endpoint = '/'; + private readonly endpoint = "/"; private readonly _connected = signal(false); private readonly _agentCard = signal(null); @@ -50,8 +50,12 @@ export class A2aService { readonly agentCard = this._agentCard.asReadonly(); readonly loading = this._loading.asReadonly(); - readonly agentName = computed(() => this._agentCard()?.name ?? 'A2UI Agent'); - readonly agentDescription = computed(() => this._agentCard()?.description ?? 'Powered by Google AI'); + readonly agentName = computed(() => { + return this._agentCard()?.name ?? "A2UI Agent"; + }); + readonly agentDescription = computed( + () => this._agentCard()?.description ?? "Powered by Google AI" + ); async connect(): Promise { try { @@ -62,7 +66,7 @@ export class A2aService { return true; } } catch (error) { - console.error('Failed to connect to A2A server:', error); + console.error("Failed to connect to A2A server:", error); this._connected.set(false); } return false; @@ -72,32 +76,32 @@ export class A2aService { try { const response = await Http.request({ url: `${this.serverUrl}/.well-known/agent-card.json`, - method: 'GET', - headers: { 'Content-Type': 'application/json' }, + method: "GET", + headers: { "Content-Type": "application/json" }, timeout: 5000, }); - + if (response.statusCode === 200) { const content = response.content; - if (typeof content === 'string') { + if (typeof content === "string") { return JSON.parse(content) as AgentCard; } // Handle HttpContent object const contentObj = content as any; - if (contentObj && typeof contentObj.toJSON === 'function') { + if (contentObj && typeof contentObj.toJSON === "function") { return contentObj.toJSON() as AgentCard; } return contentObj as AgentCard; } } catch (error) { - console.log('Agent card not available, using defaults'); + console.log("Agent card not available, using defaults"); } return null; } // Supported A2UI catalog URIs - tells the agent we support A2UI rendering private readonly supportedCatalogIds = [ - 'https://raw.githubusercontent.com/google/A2UI/refs/heads/main/specification/0.8/json/standard_catalog_definition.json' + "https://raw.githubusercontent.com/google/A2UI/refs/heads/main/specification/0.8/json/standard_catalog_definition.json", ]; async sendMessage( @@ -105,20 +109,20 @@ export class A2aService { onUpdate?: (data: any) => void ): Promise { this._loading.set(true); - + try { const messageId = this.generateTaskId(); const requestId = this.generateTaskId(); const requestBody = { - jsonrpc: '2.0', + jsonrpc: "2.0", id: requestId, - method: 'message/send', + method: "message/send", params: { message: { messageId: messageId, - role: 'user', - parts: parts.map(p => ({ - kind: p.type, // A2A uses 'kind' not 'type' + role: "user", + parts: parts.map((p) => ({ + kind: p.type, // A2A uses 'kind' not 'type' text: p.text, mimeType: p.mimeType, data: p.data, @@ -127,22 +131,22 @@ export class A2aService { // Tell the agent we support A2UI - this activates the A2UI extension metadata: { a2uiClientCapabilities: { - supportedCatalogIds: this.supportedCatalogIds - } - } + supportedCatalogIds: this.supportedCatalogIds, + }, + }, }, }; - console.log('Sending A2A request with A2UI capabilities'); + console.log("Sending A2A request with A2UI capabilities"); const response = await Http.request({ url: `${this.serverUrl}${this.endpoint}`, - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'Accept': 'application/json', + method: "POST", + headers: { + "Content-Type": "application/json", + Accept: "application/json", // This header tells the A2A server to activate the A2UI extension - 'X-A2A-Extensions': 'https://a2ui.org/a2a-extension/a2ui/v0.8', + "X-A2A-Extensions": "https://a2ui.org/a2a-extension/a2ui/v0.8", }, content: JSON.stringify(requestBody), timeout: 60000, @@ -153,13 +157,13 @@ export class A2aService { // We need to use toJSON() or toString() to get the actual content let data: any; const content = response.content; - - if (typeof content === 'string') { + + if (typeof content === "string") { data = JSON.parse(content); - } else if (content && typeof content.toJSON === 'function') { + } else if (content && typeof content.toJSON === "function") { // HttpContent object - use toJSON() to parse directly data = content.toJSON(); - } else if (content && typeof content.toString === 'function') { + } else if (content && typeof content.toString === "function") { // Fallback: try toString then parse const str = content.toString(); data = JSON.parse(str); @@ -167,17 +171,17 @@ export class A2aService { // Last resort: assume it's already parsed data = content; } - + if (onUpdate) { onUpdate(data); } - + return data; } else { throw new Error(`Server returned ${response.statusCode}`); } } catch (error) { - console.error('Error sending message:', error); + console.error("Error sending message:", error); throw error; } finally { this._loading.set(false); From 3370bd103ab2bdaad0b238c671412f56562ab5eb Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Sat, 3 Jan 2026 13:24:25 -0800 Subject: [PATCH 8/9] feat: use router --- samples/client/nativescript/README.md | 3 +- samples/client/nativescript/src/app.css | 2 +- samples/client/nativescript/src/app/app.html | 11 +++++-- .../client/nativescript/src/app/app.routes.ts | 7 +++++ samples/client/nativescript/src/app/app.ts | 14 ++++++++- .../app/components/chat-input.component.ts | 12 ++++++-- samples/client/nativescript/src/app/root.ts | 15 ++++++++++ samples/client/nativescript/src/main.ts | 29 ++++++++++++------- 8 files changed, 74 insertions(+), 19 deletions(-) create mode 100644 samples/client/nativescript/src/app/app.routes.ts create mode 100644 samples/client/nativescript/src/app/root.ts diff --git a/samples/client/nativescript/README.md b/samples/client/nativescript/README.md index e819a36c..21480cf1 100644 --- a/samples/client/nativescript/README.md +++ b/samples/client/nativescript/README.md @@ -9,6 +9,5 @@ This is a sample NativeScript Angular application using the A2UI NativeScript re ## Structure -- `src/app/catalog.ts`: Implements the A2UI Catalog mapping. - `src/app/components/`: Contains the NativeScript implementations of A2UI components. -- `src/app/app.component.ts`: Main entry point demonstrating the renderer. +- `src/app/app.ts`: Main entry point demonstrating the renderer. diff --git a/samples/client/nativescript/src/app.css b/samples/client/nativescript/src/app.css index 6503bf07..52500a21 100644 --- a/samples/client/nativescript/src/app.css +++ b/samples/client/nativescript/src/app.css @@ -8,7 +8,7 @@ /* Base App Styles */ Page { - background: linear-gradient(180deg, #0a0a1f 0%, #12122e 50%, #1a1a3e 100%); + background: #1a1a3e; } ActionBar { diff --git a/samples/client/nativescript/src/app/app.html b/samples/client/nativescript/src/app/app.html index 8768367e..d9c6e3a5 100644 --- a/samples/client/nativescript/src/app/app.html +++ b/samples/client/nativescript/src/app/app.html @@ -1,5 +1,5 @@ - + @@ -23,7 +23,12 @@ class="header-menu-container" (loaded)="onMenuContainerLoaded()" > - @@ -44,5 +49,5 @@ - + diff --git a/samples/client/nativescript/src/app/app.routes.ts b/samples/client/nativescript/src/app/app.routes.ts new file mode 100644 index 00000000..905c41ec --- /dev/null +++ b/samples/client/nativescript/src/app/app.routes.ts @@ -0,0 +1,7 @@ +import { Routes } from '@angular/router'; +import { App } from './app'; + +export const routes: Routes = [ + { path: '', redirectTo: '/home', pathMatch: 'full' }, + { path: 'home', component: App }, +]; diff --git a/samples/client/nativescript/src/app/app.ts b/samples/client/nativescript/src/app/app.ts index 91713d08..9c3f8856 100644 --- a/samples/client/nativescript/src/app/app.ts +++ b/samples/client/nativescript/src/app/app.ts @@ -9,7 +9,16 @@ import { AfterViewInit, } from "@angular/core"; import { NativeScriptCommonModule } from "@nativescript/angular"; -import { isIOS, Screen, Dialogs, View, ScrollView } from "@nativescript/core"; +import { + isIOS, + Screen, + Dialogs, + View, + ScrollView, + Page, + EventData, + GridLayout, +} from "@nativescript/core"; import { Types } from "../a2ui-lit-types"; import { ChatService } from "./services/chat.service"; import { ChatInputComponent } from "./components/chat-input.component"; @@ -31,6 +40,7 @@ import { showMenu, MenuConfig } from "./components/menu"; }) export class App implements OnInit, AfterViewInit, OnDestroy { readonly chatService = inject(ChatService); + page = inject(Page); readonly isIOS = isIOS; @ViewChild("menuButtonContainer", { read: ElementRef, static: false }) @@ -48,6 +58,8 @@ export class App implements OnInit, AfterViewInit, OnDestroy { keyboardManager.keyboardAppearance = UIKeyboardAppearance.Dark; keyboardManager.shouldResignOnTouchOutside = true; keyboardManager.keyboardDistanceFromTextField = 0; + // const vc = this.page.ios as UIViewController; + // keyboardManager.disabledDistanceHandlingClasses.addObject(vc.class()); } } diff --git a/samples/client/nativescript/src/app/components/chat-input.component.ts b/samples/client/nativescript/src/app/components/chat-input.component.ts index 20f5cea7..5df9bd70 100644 --- a/samples/client/nativescript/src/app/components/chat-input.component.ts +++ b/samples/client/nativescript/src/app/components/chat-input.component.ts @@ -4,9 +4,10 @@ import { NO_ERRORS_SCHEMA, output, input, + inject, } from "@angular/core"; import { NativeScriptCommonModule } from "@nativescript/angular"; -import { isIOS } from "@nativescript/core"; +import { EventData, isIOS } from "@nativescript/core"; @Component({ selector: "a2ui-chat-input", @@ -16,8 +17,9 @@ import { isIOS } from "@nativescript/core"; [row]="row()" rows="auto" columns="*, auto" - class="input-container align-bottom" + class="input-container" [class.ios]="isIOS" + (loaded)="loadedBottomBar($event)" > (); + loaded = output(); readonly inputText = signal(""); readonly isIOS = isIOS; @@ -116,4 +120,8 @@ export class ChatInputComponent { this.inputText.set(""); } } + + loadedBottomBar(args: EventData) { + this.loaded.emit(args); + } } diff --git a/samples/client/nativescript/src/app/root.ts b/samples/client/nativescript/src/app/root.ts new file mode 100644 index 00000000..01c30923 --- /dev/null +++ b/samples/client/nativescript/src/app/root.ts @@ -0,0 +1,15 @@ +import { Component, NO_ERRORS_SCHEMA } from "@angular/core"; +import { + NativeScriptCommonModule, + PageRouterOutlet, +} from "@nativescript/angular"; + +@Component({ + selector: "ns-root", + template: ` + + `, + imports: [NativeScriptCommonModule, PageRouterOutlet], + schemas: [NO_ERRORS_SCHEMA], +}) +export class Root {} diff --git a/samples/client/nativescript/src/main.ts b/samples/client/nativescript/src/main.ts index 8e3fa53a..c27c2fac 100644 --- a/samples/client/nativescript/src/main.ts +++ b/samples/client/nativescript/src/main.ts @@ -4,33 +4,42 @@ import { provideNativeScriptRouter, runNativeScriptAngularApp, } from "@nativescript/angular"; -import { provideZonelessChangeDetection } from "@angular/core"; +import { Utils } from "@nativescript/core"; +import { ErrorHandler, Injectable, provideZonelessChangeDetection } from "@angular/core"; import { withInterceptorsFromDi } from "@angular/common/http"; -import { App } from "./app/app"; import { Catalog, Theme, MessageProcessor } from "@a2ui/nativescript"; import { NativeScriptCatalog } from "./app/catalog"; import { defaultTheme } from "./app/theme"; -import { A2aService } from "./app/services/a2a.service"; -import { ChatService } from "./app/services/chat.service"; import "./globals"; -import { Utils } from "@nativescript/core"; +import { Root } from "./app/root"; +import { routes } from "./app/app.routes"; + +@Injectable() +export class GlobalErrorHandler extends ErrorHandler { + + handleError(error: Error) { + // catch all throw's in the callstack and just report them here + console.error('GlobalErrorHandler', error); + console.error(error.stack); + } +} + runNativeScriptAngularApp({ appModuleBootstrap: () => { if (__APPLE__) { - Utils.ios.setWindowBackgroundColor('#000000'); + Utils.ios.setWindowBackgroundColor("#000000"); } - return bootstrapApplication(App, { + return bootstrapApplication(Root, { providers: [ provideNativeScriptHttpClient(withInterceptorsFromDi()), + provideNativeScriptRouter(routes), provideZonelessChangeDetection(), // A2UI Renderer providers { provide: Catalog, useValue: NativeScriptCatalog }, { provide: Theme, useValue: defaultTheme }, MessageProcessor, - // Chat services - A2aService, - ChatService, + { provide: ErrorHandler, useClass: GlobalErrorHandler} ], }); }, From 3e18456782196be47d8bf497ab631188f46c6efd Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Sat, 3 Jan 2026 16:35:00 -0800 Subject: [PATCH 9/9] chore: cleanup types and documentation --- renderers/nativescript/README.md | 115 +++- renderers/nativescript/package-lock.json | 3 + renderers/nativescript/src/public-api.ts | 4 + .../client/nativescript/src/a2ui-lit-shim.ts | 10 + .../client/nativescript/src/a2ui-lit-types.ts | 581 ------------------ samples/client/nativescript/src/a2ui-types.ts | 84 +++ samples/client/nativescript/src/app/app.ts | 3 +- .../client/nativescript/src/app/catalog.ts | 3 +- .../src/app/components/button.component.ts | 4 +- .../src/app/components/canvas.component.ts | 4 +- .../src/app/components/card.component.ts | 4 +- .../app/components/chat-input.component.ts | 2 +- .../src/app/components/column.component.ts | 4 +- .../src/app/components/divider.component.ts | 4 +- .../src/app/components/image.component.ts | 4 +- .../src/app/components/list.component.ts | 4 +- .../src/app/components/menu/menu.component.ts | 9 +- .../src/app/components/row.component.ts | 4 +- .../src/app/components/spacer.component.ts | 4 +- .../src/app/components/text.component.ts | 4 +- .../src/app/components/textfield.component.ts | 7 +- .../nativescript/src/app/demo-surfaces.ts | 46 +- .../src/app/services/a2a.service.ts | 5 +- .../src/app/services/chat.service.ts | 23 +- samples/client/nativescript/tsconfig.json | 10 +- samples/client/nativescript/webpack.config.js | 7 +- 26 files changed, 288 insertions(+), 664 deletions(-) create mode 100644 samples/client/nativescript/src/a2ui-lit-shim.ts delete mode 100644 samples/client/nativescript/src/a2ui-lit-types.ts create mode 100644 samples/client/nativescript/src/a2ui-types.ts diff --git a/renderers/nativescript/README.md b/renderers/nativescript/README.md index b6642722..751d0b73 100644 --- a/renderers/nativescript/README.md +++ b/renderers/nativescript/README.md @@ -1,13 +1,71 @@ # @a2ui/nativescript -This is a NativeScript renderer for A2UI. +A NativeScript Angular renderer for A2UI (Agent-to-User Interface). This package provides the core rendering infrastructure for displaying A2UI component trees in NativeScript applications. + +## Installation + +```bash +npm install @a2ui/nativescript +``` ## Usage -1. Install the package (once published or linked). -2. Implement the `Catalog` abstract class to map A2UI components to NativeScript Angular components. -3. Provide the `Catalog` implementation in your application. -4. Use the `a2ui-renderer` directive to render components. +### 1. Create a Component Catalog + +Create a catalog that maps A2UI component types to your NativeScript Angular components: + +```typescript +// catalog.ts +import { inputBinding } from '@angular/core'; +import { Catalog, CatalogEntry } from '@a2ui/nativescript'; + +export const AppCatalog: Catalog = { + ['Button']: { + type: async () => (await import('./components/button.component')).ButtonComponent, + bindings: (component) => [ + inputBinding('node', () => component), + ], + }, + ['Text']: { + type: async () => (await import('./components/text.component')).TextComponent, + bindings: (component) => [ + inputBinding('node', () => component), + ], + }, + ['Column']: { + type: async () => (await import('./components/column.component')).ColumnComponent, + bindings: (component) => [ + inputBinding('node', () => component), + ], + }, + // Add more component mappings as needed... +}; +``` + +### 2. Provide the Catalog and Theme + +In your application bootstrap, provide the `Catalog`, `Theme`, and `MessageProcessor`: + +```typescript +// main.ts +import { bootstrapApplication } from '@nativescript/angular'; +import { Catalog, Theme, MessageProcessor } from '@a2ui/nativescript'; +import { AppCatalog } from './app/catalog'; +import { appTheme } from './app/theme'; +import { AppComponent } from './app/app.component'; + +bootstrapApplication(AppComponent, { + providers: [ + { provide: Catalog, useValue: AppCatalog }, + { provide: Theme, useValue: appTheme }, + MessageProcessor, + ], +}); +``` + +### 3. Use the Renderer Directive + +Use the `a2ui-renderer` directive to render A2UI component trees: ```typescript // app.component.ts @@ -17,11 +75,54 @@ import { Renderer } from '@a2ui/nativescript'; @Component({ selector: 'ns-app', template: ` - + + `, imports: [Renderer], }) export class AppComponent { - // ... + surfaceId = 'main'; + rootComponent = { + type: 'Column', + id: 'root', + children: [ + { type: 'Text', id: 'hello', text: 'Hello from A2UI!' }, + ], + }; +} +``` + +## Exports + +The package exports the following: + +### Rendering +- `Renderer` - The main directive for rendering A2UI components +- `Catalog` - Injection token for providing component mappings +- `CatalogEntry` - Type for catalog entries +- `DynamicComponent` - Base class for A2UI-compatible components +- `Theme` - Injection token for theming + +### Data +- `MessageProcessor` - Service for processing A2UI messages and managing surface state + +## Creating Components + +Components should extend `DynamicComponent` and accept standard inputs: + +```typescript +import { Component, input } from '@angular/core'; +import { DynamicComponent } from '@a2ui/nativescript'; +import { Types } from '@a2ui/lit/0.8'; + +@Component({ + selector: 'app-text', + template: ``, +}) +export class TextComponent extends DynamicComponent { + readonly node = input.required(); } ``` diff --git a/renderers/nativescript/package-lock.json b/renderers/nativescript/package-lock.json index 1889e781..82033091 100644 --- a/renderers/nativescript/package-lock.json +++ b/renderers/nativescript/package-lock.json @@ -596,6 +596,7 @@ "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", @@ -6076,6 +6077,7 @@ "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cli-truncate": "^5.0.0", "colorette": "^2.0.20", @@ -9029,6 +9031,7 @@ "integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", diff --git a/renderers/nativescript/src/public-api.ts b/renderers/nativescript/src/public-api.ts index 6f026fee..5e7227c3 100644 --- a/renderers/nativescript/src/public-api.ts +++ b/renderers/nativescript/src/public-api.ts @@ -4,3 +4,7 @@ export * from './lib/rendering'; export * from './lib/data'; + +// Re-export types from @a2ui/lit for convenience +// These are type-only exports, no runtime code +export { Types, Primitives } from '@a2ui/lit/0.8'; diff --git a/samples/client/nativescript/src/a2ui-lit-shim.ts b/samples/client/nativescript/src/a2ui-lit-shim.ts new file mode 100644 index 00000000..091ba728 --- /dev/null +++ b/samples/client/nativescript/src/a2ui-lit-shim.ts @@ -0,0 +1,10 @@ +/* + * Shim for @a2ui/lit/0.8 types. + * + * This file provides type-only exports from the lit renderer + * without pulling in any runtime code or web components. + */ + +// Re-export only the types we need (no runtime code) +export type * as Types from '@a2ui/lit/0.8/types/types'; +export type * as Primitives from '@a2ui/lit/0.8/types/primitives'; diff --git a/samples/client/nativescript/src/a2ui-lit-types.ts b/samples/client/nativescript/src/a2ui-lit-types.ts deleted file mode 100644 index 2792bc6c..00000000 --- a/samples/client/nativescript/src/a2ui-lit-types.ts +++ /dev/null @@ -1,581 +0,0 @@ -/* - * Self-contained types from @a2ui/lit/0.8 for NativeScript compatibility. - * This avoids importing the Lit-based UI components which are web-only. - * - * Copyright 2025 Google LLC - Apache License 2.0 - */ - -// ============ Primitives ============ - -export interface StringValue { - path?: string; - literalString?: string; - literal?: string; -} - -export interface NumberValue { - path?: string; - literalNumber?: number; - literal?: number; -} - -export interface BooleanValue { - path?: string; - literalBoolean?: boolean; - literal?: boolean; -} - -// Re-export Primitives namespace -export const Primitives = { - StringValue: {} as StringValue, - NumberValue: {} as NumberValue, - BooleanValue: {} as BooleanValue, -}; - -export namespace Primitives { - export type StringValue = import('./a2ui-lit-types').StringValue; - export type NumberValue = import('./a2ui-lit-types').NumberValue; - export type BooleanValue = import('./a2ui-lit-types').BooleanValue; -} - -// ============ Components ============ - -export interface Action { - name: string; - id?: string; - label?: string; - type?: string; - payload?: Record; - context?: { - key: string; - value: { - path?: string; - literalString?: string; - literalNumber?: number; - literalBoolean?: boolean; - }; - }[]; -} - -export interface Text { - text: StringValue; - usageHint: "h1" | "h2" | "h3" | "h4" | "h5" | "caption" | "body"; -} - -export interface Image { - url: StringValue; - usageHint: "icon" | "avatar" | "smallFeature" | "mediumFeature" | "largeFeature" | "header"; - fit?: "contain" | "cover" | "fill" | "none" | "scale-down"; -} - -export interface Icon { - name: StringValue; -} - -export interface Video { - url: StringValue; -} - -export interface AudioPlayer { - url: StringValue; - description?: StringValue; -} - -export interface Divider { - axis?: "horizontal" | "vertical"; - color?: string; - thickness?: number; -} - -export interface Button { - child: string; - action: Action; -} - -export interface Checkbox { - label: StringValue; - value: { - path?: string; - literalBoolean?: boolean; - }; -} - -export interface TextField { - text?: StringValue; - label: StringValue; - type?: "shortText" | "number" | "date" | "longText"; - validationRegexp?: string; -} - -export interface DateTimeInput { - value: StringValue; - enableDate?: boolean; - enableTime?: boolean; - outputFormat?: string; -} - -export interface MultipleChoice { - selections: { - path?: string; - literalArray?: string[]; - }; - options?: { - label: { - path?: string; - literalString?: string; - }; - value: string; - }[]; - maxAllowedSelections?: number; -} - -export interface Slider { - value: { - path?: string; - literalNumber?: number; - }; - minValue?: number; - maxValue?: number; -} - -// ============ Types ============ - -export type SurfaceID = string; - -export type DataValue = string | number | boolean | null | DataMap | DataObject | DataArray; -export type DataObject = { [key: string]: DataValue }; -export type DataMap = Map; -export type DataArray = DataValue[]; - -export interface ComponentInstance { - id: string; - weight?: number; - component?: { [k: string]: unknown }; -} - -export interface BeginRenderingMessage { - surfaceId: string; - root: string; - styles?: Record; -} - -export interface SurfaceUpdateMessage { - surfaceId: string; - components: ComponentInstance[]; -} - -export interface DataModelUpdate { - surfaceId: string; - path?: string; - contents: { key: string; [k: string]: unknown }[]; -} - -export interface DeleteSurfaceMessage { - surfaceId: string; -} - -export interface ServerToClientMessage { - beginRendering?: BeginRenderingMessage; - surfaceUpdate?: SurfaceUpdateMessage; - dataModelUpdate?: DataModelUpdate; - deleteSurface?: DeleteSurfaceMessage; -} - -export interface UserAction { - name: string; - surfaceId: string; - sourceComponentId: string; - timestamp: string; - context?: { [k: string]: unknown }; -} - -export interface ClientToServerMessage { - userAction?: UserAction; - clientUiCapabilities?: unknown; - error?: unknown; - request?: unknown; -} - -export type A2UIClientEventMessage = ClientToServerMessage; - -// Resolved types -export type ResolvedValue = string | number | boolean | null | AnyComponentNode | ResolvedMap | ResolvedArray; -export type ResolvedMap = { [key: string]: ResolvedValue }; -export type ResolvedArray = ResolvedValue[]; - -interface BaseComponentNode { - id: string; - weight?: number; - dataContextPath?: string; - slotName?: string; -} - -export type ResolvedText = Text; -export type ResolvedIcon = Icon; -export type ResolvedImage = Image; -export type ResolvedVideo = Video; -export type ResolvedAudioPlayer = AudioPlayer; -export type ResolvedDivider = Divider; -export type ResolvedCheckbox = Checkbox; -export type ResolvedTextField = TextField; -export type ResolvedDateTimeInput = DateTimeInput; -export type ResolvedMultipleChoice = MultipleChoice; -export type ResolvedSlider = Slider; - -export interface ResolvedRow { - children: AnyComponentNode[]; - distribution?: "start" | "center" | "end" | "spaceBetween" | "spaceAround" | "spaceEvenly"; - alignment?: "start" | "center" | "end" | "stretch"; -} - -export interface ResolvedColumn { - children: AnyComponentNode[]; - distribution?: "start" | "center" | "end" | "spaceBetween" | "spaceAround" | "spaceEvenly"; - alignment?: "start" | "center" | "end" | "stretch"; -} - -export interface ResolvedButton { - child: AnyComponentNode; - action: Action; -} - -export interface ResolvedList { - children: AnyComponentNode[]; - direction?: "vertical" | "horizontal"; - alignment?: "start" | "center" | "end" | "stretch"; -} - -export interface ResolvedCard { - child: AnyComponentNode; - children: AnyComponentNode[]; -} - -export interface ResolvedTabItem { - title: StringValue; - child: AnyComponentNode; -} - -export interface ResolvedTabs { - tabItems: ResolvedTabItem[]; -} - -export interface ResolvedModal { - entryPointChild: AnyComponentNode; - contentChild: AnyComponentNode; -} - -export interface CustomNodeProperties { - [k: string]: ResolvedValue; -} - -export interface TextNode extends BaseComponentNode { - type: "Text"; - properties: ResolvedText; -} - -export interface ImageNode extends BaseComponentNode { - type: "Image"; - properties: ResolvedImage; -} - -export interface IconNode extends BaseComponentNode { - type: "Icon"; - properties: ResolvedIcon; -} - -export interface VideoNode extends BaseComponentNode { - type: "Video"; - properties: ResolvedVideo; -} - -export interface AudioPlayerNode extends BaseComponentNode { - type: "AudioPlayer"; - properties: ResolvedAudioPlayer; -} - -export interface RowNode extends BaseComponentNode { - type: "Row"; - properties: ResolvedRow; -} - -export interface ColumnNode extends BaseComponentNode { - type: "Column"; - properties: ResolvedColumn; -} - -export interface ListNode extends BaseComponentNode { - type: "List"; - properties: ResolvedList; -} - -export interface CardNode extends BaseComponentNode { - type: "Card"; - properties: ResolvedCard; -} - -export interface TabsNode extends BaseComponentNode { - type: "Tabs"; - properties: ResolvedTabs; -} - -export interface DividerNode extends BaseComponentNode { - type: "Divider"; - properties: ResolvedDivider; -} - -export interface ModalNode extends BaseComponentNode { - type: "Modal"; - properties: ResolvedModal; -} - -export interface ButtonNode extends BaseComponentNode { - type: "Button"; - properties: ResolvedButton; -} - -export interface CheckboxNode extends BaseComponentNode { - type: "CheckBox"; - properties: ResolvedCheckbox; -} - -export interface TextFieldNode extends BaseComponentNode { - type: "TextField"; - properties: ResolvedTextField; -} - -export interface DateTimeInputNode extends BaseComponentNode { - type: "DateTimeInput"; - properties: ResolvedDateTimeInput; -} - -export interface MultipleChoiceNode extends BaseComponentNode { - type: "MultipleChoice"; - properties: ResolvedMultipleChoice; -} - -export interface SliderNode extends BaseComponentNode { - type: "Slider"; - properties: ResolvedSlider; -} - -export interface SpacerNode extends BaseComponentNode { - type: "Spacer"; - height?: number; - width?: number | string; -} - -export interface CustomNode extends BaseComponentNode { - type: string; - properties: CustomNodeProperties; -} - -export type AnyComponentNode = - | TextNode - | IconNode - | ImageNode - | VideoNode - | AudioPlayerNode - | RowNode - | ColumnNode - | ListNode - | CardNode - | TabsNode - | DividerNode - | ModalNode - | ButtonNode - | CheckboxNode - | TextFieldNode - | DateTimeInputNode - | MultipleChoiceNode - | SliderNode - | SpacerNode - | CustomNode; - -// Generic Node type for simplified usage -export type Node = AnyComponentNode | SimpleNode; - -// Simplified node type for demo/inline surfaces -export interface SimpleNode { - type: string; - id: string; - children?: SimpleNode[]; - text?: string; - textStyle?: 'title' | 'subtitle' | 'body' | 'caption' | 'code'; - title?: string; - subtitle?: string; - label?: string; - variant?: 'primary' | 'secondary' | 'tertiary'; - url?: string; - src?: string; - fit?: 'cover' | 'contain' | 'fill'; - usageHint?: string; - placeholder?: string; - value?: string; - helperText?: string; - secure?: boolean; - orientation?: 'horizontal' | 'vertical'; - direction?: 'horizontal' | 'vertical'; - height?: number; - width?: number | string; - horizontalAlignment?: 'start' | 'center' | 'end' | 'spaceBetween' | 'spaceAround'; - verticalAlignment?: 'top' | 'center' | 'bottom'; - action?: Action; - actions?: Action[]; - items?: SimpleNode[]; - leading?: SimpleNode; - trailing?: SimpleNode; - child?: SimpleNode; -} - -// A2UI Message types -export interface A2uiMessage { - root?: Node | SimpleNode; - surfaceId?: string; - data?: Record; - dataModels?: DataMap; -} - -export interface Surface { - rootComponentId: string | null; - componentTree: AnyComponentNode | null; - dataModel: DataMap; - components: Map; - styles: Record; -} - -export interface MessageProcessor { - getSurfaces(): ReadonlyMap; - clearSurfaces(): void; - processMessages(messages: ServerToClientMessage[]): void; - getData(node: AnyComponentNode, relativePath: string, surfaceId: string): DataValue | null; - setData(node: AnyComponentNode | null, relativePath: string, value: DataValue, surfaceId: string): void; - resolvePath(path: string, dataContextPath?: string): string; -} - -// Theme types (simplified) -export interface Theme { - components: { - AudioPlayer: Record; - Button: Record; - Card: Record; - Column: Record; - CheckBox: { container: Record; element: Record; label: Record; }; - DateTimeInput: { container: Record; element: Record; label: Record; }; - Divider: Record; - Image: { all: Record; icon: Record; avatar: Record; smallFeature: Record; mediumFeature: Record; largeFeature: Record; header: Record; }; - Icon: Record; - List: Record; - Modal: { backdrop: Record; element: Record; }; - MultipleChoice: { container: Record; element: Record; label: Record; }; - Row: Record; - Slider: { container: Record; element: Record; label: Record; }; - Tabs: { container: Record; controls: { all: Record; selected: Record; }; element: Record; }; - Text: { all: Record; h1: Record; h2: Record; h3: Record; h4: Record; h5: Record; caption: Record; body: Record; }; - TextField: { container: Record; element: Record; label: Record; }; - Video: Record; - }; - elements: { - a: Record; - audio: Record; - body: Record; - button: Record; - h1: Record; - h2: Record; - h3: Record; - h4: Record; - h5: Record; - iframe: Record; - input: Record; - p: Record; - pre: Record; - textarea: Record; - video: Record; - }; - markdown: { - p: string[]; - h1: string[]; - h2: string[]; - h3: string[]; - h4: string[]; - h5: string[]; - ul: string[]; - ol: string[]; - li: string[]; - a: string[]; - strong: string[]; - em: string[]; - }; - additionalStyles?: Record>; -} - -// Re-export Types namespace for compatibility -export namespace Types { - export type StringValue = import('./a2ui-lit-types').StringValue; - export type NumberValue = import('./a2ui-lit-types').NumberValue; - export type BooleanValue = import('./a2ui-lit-types').BooleanValue; - export type Action = import('./a2ui-lit-types').Action; - export type Text = import('./a2ui-lit-types').Text; - export type Image = import('./a2ui-lit-types').Image; - export type Icon = import('./a2ui-lit-types').Icon; - export type Video = import('./a2ui-lit-types').Video; - export type AudioPlayer = import('./a2ui-lit-types').AudioPlayer; - export type Divider = import('./a2ui-lit-types').Divider; - export type Button = import('./a2ui-lit-types').Button; - export type Checkbox = import('./a2ui-lit-types').Checkbox; - export type TextField = import('./a2ui-lit-types').TextField; - export type DateTimeInput = import('./a2ui-lit-types').DateTimeInput; - export type MultipleChoice = import('./a2ui-lit-types').MultipleChoice; - export type Slider = import('./a2ui-lit-types').Slider; - export type SurfaceID = import('./a2ui-lit-types').SurfaceID; - export type DataValue = import('./a2ui-lit-types').DataValue; - export type DataObject = import('./a2ui-lit-types').DataObject; - export type DataMap = import('./a2ui-lit-types').DataMap; - export type DataArray = import('./a2ui-lit-types').DataArray; - export type ServerToClientMessage = import('./a2ui-lit-types').ServerToClientMessage; - export type A2UIClientEventMessage = import('./a2ui-lit-types').A2UIClientEventMessage; - export type AnyComponentNode = import('./a2ui-lit-types').AnyComponentNode; - export type Node = import('./a2ui-lit-types').Node; - export type SimpleNode = import('./a2ui-lit-types').SimpleNode; - export type A2uiMessage = import('./a2ui-lit-types').A2uiMessage; - export type TextNode = import('./a2ui-lit-types').TextNode; - export type ImageNode = import('./a2ui-lit-types').ImageNode; - export type IconNode = import('./a2ui-lit-types').IconNode; - export type VideoNode = import('./a2ui-lit-types').VideoNode; - export type AudioPlayerNode = import('./a2ui-lit-types').AudioPlayerNode; - export type RowNode = import('./a2ui-lit-types').RowNode; - export type ColumnNode = import('./a2ui-lit-types').ColumnNode; - export type ListNode = import('./a2ui-lit-types').ListNode; - export type CardNode = import('./a2ui-lit-types').CardNode; - export type TabsNode = import('./a2ui-lit-types').TabsNode; - export type DividerNode = import('./a2ui-lit-types').DividerNode; - export type ModalNode = import('./a2ui-lit-types').ModalNode; - export type ButtonNode = import('./a2ui-lit-types').ButtonNode; - export type CheckboxNode = import('./a2ui-lit-types').CheckboxNode; - export type TextFieldNode = import('./a2ui-lit-types').TextFieldNode; - export type DateTimeInputNode = import('./a2ui-lit-types').DateTimeInputNode; - export type MultipleChoiceNode = import('./a2ui-lit-types').MultipleChoiceNode; - export type SliderNode = import('./a2ui-lit-types').SliderNode; - export type SpacerNode = import('./a2ui-lit-types').SpacerNode; - export type CustomNode = import('./a2ui-lit-types').CustomNode; - export type Surface = import('./a2ui-lit-types').Surface; - export type MessageProcessor = import('./a2ui-lit-types').MessageProcessor; - export type Theme = import('./a2ui-lit-types').Theme; - export type ResolvedText = import('./a2ui-lit-types').ResolvedText; - export type ResolvedIcon = import('./a2ui-lit-types').ResolvedIcon; - export type ResolvedImage = import('./a2ui-lit-types').ResolvedImage; - export type ResolvedVideo = import('./a2ui-lit-types').ResolvedVideo; - export type ResolvedAudioPlayer = import('./a2ui-lit-types').ResolvedAudioPlayer; - export type ResolvedDivider = import('./a2ui-lit-types').ResolvedDivider; - export type ResolvedCheckbox = import('./a2ui-lit-types').ResolvedCheckbox; - export type ResolvedTextField = import('./a2ui-lit-types').ResolvedTextField; - export type ResolvedDateTimeInput = import('./a2ui-lit-types').ResolvedDateTimeInput; - export type ResolvedMultipleChoice = import('./a2ui-lit-types').ResolvedMultipleChoice; - export type ResolvedSlider = import('./a2ui-lit-types').ResolvedSlider; - export type ResolvedButton = import('./a2ui-lit-types').ResolvedButton; - export type ResolvedRow = import('./a2ui-lit-types').ResolvedRow; - export type ResolvedColumn = import('./a2ui-lit-types').ResolvedColumn; - export type ResolvedList = import('./a2ui-lit-types').ResolvedList; - export type ResolvedCard = import('./a2ui-lit-types').ResolvedCard; - export type ResolvedTabs = import('./a2ui-lit-types').ResolvedTabs; - export type ResolvedModal = import('./a2ui-lit-types').ResolvedModal; -} diff --git a/samples/client/nativescript/src/a2ui-types.ts b/samples/client/nativescript/src/a2ui-types.ts new file mode 100644 index 00000000..3ed5ce4f --- /dev/null +++ b/samples/client/nativescript/src/a2ui-types.ts @@ -0,0 +1,84 @@ +/* + * A2UI types for NativeScript sample app. + * + * Re-exports standard types from @a2ui/nativescript and defines + * custom extensions for the demo app (SimpleNode, extended A2uiMessage). + * + * Copyright 2025 Google LLC - Apache License 2.0 + */ + +// Re-export standard types from the renderer package +export { Types, Primitives } from '@a2ui/nativescript'; + +// Import types we need to extend +import { Types } from '@a2ui/nativescript'; + +// ============ Custom Extensions for Demo App ============ + +/** + * Action type - used for button actions, menu items, etc. + */ +export interface Action { + name: string; + id?: string; + label?: string; + type?: string; + payload?: Record; + context?: { + key: string; + value: { + path?: string; + literalString?: string; + literalNumber?: number; + literalBoolean?: boolean; + }; + }[]; +} + +/** + * Simplified node type for demo/inline surfaces. + * This makes it easier to define UI trees inline without the full + * component schema complexity. + */ +export interface SimpleNode { + type: string; + id: string; + children?: SimpleNode[]; + text?: string; + textStyle?: 'headline' | 'title' | 'subtitle' | 'body' | 'caption' | 'code'; + title?: string; + subtitle?: string; + label?: string; + variant?: 'primary' | 'secondary' | 'tertiary'; + url?: string; + src?: string; + fit?: 'cover' | 'contain' | 'fill'; + usageHint?: string; + placeholder?: string; + value?: string; + helperText?: string; + secure?: boolean; + orientation?: 'horizontal' | 'vertical'; + direction?: 'horizontal' | 'vertical'; + height?: number; + width?: number | string; + weight?: number | string; + horizontalAlignment?: 'start' | 'center' | 'end' | 'spaceBetween' | 'spaceAround'; + verticalAlignment?: 'top' | 'center' | 'bottom'; + action?: Action; + actions?: Action[]; + items?: SimpleNode[]; + leading?: SimpleNode; + trailing?: SimpleNode; + child?: SimpleNode; +} + +/** + * Extended A2UI message type that supports SimpleNode for demo surfaces. + */ +export interface A2uiMessage { + root?: Types.AnyComponentNode | SimpleNode; + surfaceId?: string; + data?: Record; + dataModels?: Types.DataMap; +} diff --git a/samples/client/nativescript/src/app/app.ts b/samples/client/nativescript/src/app/app.ts index 9c3f8856..5ab06e04 100644 --- a/samples/client/nativescript/src/app/app.ts +++ b/samples/client/nativescript/src/app/app.ts @@ -19,7 +19,8 @@ import { EventData, GridLayout, } from "@nativescript/core"; -import { Types } from "../a2ui-lit-types"; +import { Types } from "@a2ui/nativescript"; +import { A2uiMessage } from "../a2ui-types"; import { ChatService } from "./services/chat.service"; import { ChatInputComponent } from "./components/chat-input.component"; import { ChatHistoryComponent } from "./components/chat-history.component"; diff --git a/samples/client/nativescript/src/app/catalog.ts b/samples/client/nativescript/src/app/catalog.ts index 9efc20b0..ba3f2cfe 100644 --- a/samples/client/nativescript/src/app/catalog.ts +++ b/samples/client/nativescript/src/app/catalog.ts @@ -1,6 +1,5 @@ import { inputBinding } from '@angular/core'; -import { Catalog, CatalogEntry } from '@a2ui/nativescript'; -import { Types } from '../a2ui-lit-types'; +import { Catalog, CatalogEntry, Types } from '@a2ui/nativescript'; export const NativeScriptCatalog: Catalog = { // Core components diff --git a/samples/client/nativescript/src/app/components/button.component.ts b/samples/client/nativescript/src/app/components/button.component.ts index 74754e8a..939e31c8 100644 --- a/samples/client/nativescript/src/app/components/button.component.ts +++ b/samples/client/nativescript/src/app/components/button.component.ts @@ -5,8 +5,8 @@ import { Input, inject, } from "@angular/core"; -import { Types, SimpleNode } from "../../a2ui-lit-types"; -import { DynamicComponent } from "@a2ui/nativescript"; +import { DynamicComponent, Types } from "@a2ui/nativescript"; +import { SimpleNode } from "../../a2ui-types"; import { NativeScriptCommonModule } from "@nativescript/angular"; import { shareText } from "@nativescript/social-share"; import { Page } from "@nativescript/core"; diff --git a/samples/client/nativescript/src/app/components/canvas.component.ts b/samples/client/nativescript/src/app/components/canvas.component.ts index 86ae8a75..5d35b33a 100644 --- a/samples/client/nativescript/src/app/components/canvas.component.ts +++ b/samples/client/nativescript/src/app/components/canvas.component.ts @@ -6,8 +6,8 @@ import { NO_ERRORS_SCHEMA, } from "@angular/core"; import { NativeScriptCommonModule } from "@nativescript/angular"; -import { Renderer } from "@a2ui/nativescript"; -import { Types } from "../../a2ui-lit-types"; +import { Renderer, Types } from "@a2ui/nativescript"; +import { A2uiMessage } from "../../a2ui-types"; import { ChatService } from "../services/chat.service"; @Component({ diff --git a/samples/client/nativescript/src/app/components/card.component.ts b/samples/client/nativescript/src/app/components/card.component.ts index c2593ffd..59c9ec0b 100644 --- a/samples/client/nativescript/src/app/components/card.component.ts +++ b/samples/client/nativescript/src/app/components/card.component.ts @@ -1,7 +1,7 @@ import { Component, ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { NativeScriptCommonModule } from '@nativescript/angular'; -import { DynamicComponent, Renderer } from '@a2ui/nativescript'; -import { Types, SimpleNode, Action } from '../../a2ui-lit-types'; +import { DynamicComponent, Renderer, Types } from '@a2ui/nativescript'; +import { SimpleNode, Action } from '../../a2ui-types'; @Component({ selector: 'a2ui-card', diff --git a/samples/client/nativescript/src/app/components/chat-input.component.ts b/samples/client/nativescript/src/app/components/chat-input.component.ts index 5df9bd70..d10a592f 100644 --- a/samples/client/nativescript/src/app/components/chat-input.component.ts +++ b/samples/client/nativescript/src/app/components/chat-input.component.ts @@ -66,7 +66,7 @@ import { EventData, isIOS } from "@nativescript/core"; } .input-container.ios { - margin-bottom: 24; + margin-bottom: 14; } .message-input { diff --git a/samples/client/nativescript/src/app/components/column.component.ts b/samples/client/nativescript/src/app/components/column.component.ts index 0ed9206c..462f9182 100644 --- a/samples/client/nativescript/src/app/components/column.component.ts +++ b/samples/client/nativescript/src/app/components/column.component.ts @@ -1,7 +1,7 @@ import { Component, ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { NativeScriptCommonModule } from '@nativescript/angular'; -import { DynamicComponent, Renderer } from '@a2ui/nativescript'; -import { Types, SimpleNode } from '../../a2ui-lit-types'; +import { DynamicComponent, Renderer, Types } from '@a2ui/nativescript'; +import { SimpleNode } from '../../a2ui-types'; @Component({ selector: 'a2ui-column', diff --git a/samples/client/nativescript/src/app/components/divider.component.ts b/samples/client/nativescript/src/app/components/divider.component.ts index 6f15e5a1..2923f2d4 100644 --- a/samples/client/nativescript/src/app/components/divider.component.ts +++ b/samples/client/nativescript/src/app/components/divider.component.ts @@ -1,7 +1,7 @@ import { Component, ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { NativeScriptCommonModule } from '@nativescript/angular'; -import { DynamicComponent } from '@a2ui/nativescript'; -import { Types, SimpleNode } from '../../a2ui-lit-types'; +import { DynamicComponent, Types } from '@a2ui/nativescript'; +import { SimpleNode } from '../../a2ui-types'; @Component({ selector: 'a2ui-divider', diff --git a/samples/client/nativescript/src/app/components/image.component.ts b/samples/client/nativescript/src/app/components/image.component.ts index ad1767be..4a430bb6 100644 --- a/samples/client/nativescript/src/app/components/image.component.ts +++ b/samples/client/nativescript/src/app/components/image.component.ts @@ -1,7 +1,7 @@ import { Component, ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { NativeScriptCommonModule } from '@nativescript/angular'; -import { DynamicComponent } from '@a2ui/nativescript'; -import { Types, SimpleNode } from '../../a2ui-lit-types'; +import { DynamicComponent, Types } from '@a2ui/nativescript'; +import { SimpleNode } from '../../a2ui-types'; @Component({ selector: 'a2ui-image', diff --git a/samples/client/nativescript/src/app/components/list.component.ts b/samples/client/nativescript/src/app/components/list.component.ts index 61170c5b..fdf9d236 100644 --- a/samples/client/nativescript/src/app/components/list.component.ts +++ b/samples/client/nativescript/src/app/components/list.component.ts @@ -1,7 +1,7 @@ import { Component, ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { NativeScriptCommonModule } from '@nativescript/angular'; -import { DynamicComponent, Renderer } from '@a2ui/nativescript'; -import { Types, SimpleNode } from '../../a2ui-lit-types'; +import { DynamicComponent, Renderer, Types } from '@a2ui/nativescript'; +import { SimpleNode } from '../../a2ui-types'; @Component({ selector: 'a2ui-list', diff --git a/samples/client/nativescript/src/app/components/menu/menu.component.ts b/samples/client/nativescript/src/app/components/menu/menu.component.ts index 763b2232..9ba3f387 100644 --- a/samples/client/nativescript/src/app/components/menu/menu.component.ts +++ b/samples/client/nativescript/src/app/components/menu/menu.component.ts @@ -1,6 +1,6 @@ import { Component, NO_ERRORS_SCHEMA, ChangeDetectionStrategy, ElementRef, ViewChild, signal, AfterViewInit, OnDestroy } from '@angular/core'; -import { Types } from '../../../a2ui-lit-types'; -import { DynamicComponent } from '@a2ui/nativescript'; +import { DynamicComponent, Types } from '@a2ui/nativescript'; +import { Action } from '../../../a2ui-types'; import { NativeScriptCommonModule } from '@nativescript/angular'; import { View, isIOS, isAndroid } from '@nativescript/core'; import { showMenu, MenuConfig, MenuItem } from './index'; @@ -179,10 +179,9 @@ export class MenuComponent extends DynamicComponent implements AfterViewIni } else { this.sendAction({ name: itemId, - id: itemId, label: itemTitle, payload: { itemId, title: itemTitle } - }); + } as Action); } } @@ -277,5 +276,5 @@ interface MenuItemNode { icon?: string; destructive?: boolean; disabled?: boolean; - action?: Types.Action; + action?: Action; } diff --git a/samples/client/nativescript/src/app/components/row.component.ts b/samples/client/nativescript/src/app/components/row.component.ts index b7905d64..24a64e5a 100644 --- a/samples/client/nativescript/src/app/components/row.component.ts +++ b/samples/client/nativescript/src/app/components/row.component.ts @@ -1,7 +1,7 @@ import { Component, ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { NativeScriptCommonModule } from '@nativescript/angular'; -import { DynamicComponent, Renderer } from '@a2ui/nativescript'; -import { Types, SimpleNode } from '../../a2ui-lit-types'; +import { DynamicComponent, Renderer, Types } from '@a2ui/nativescript'; +import { SimpleNode } from '../../a2ui-types'; @Component({ selector: 'a2ui-row', diff --git a/samples/client/nativescript/src/app/components/spacer.component.ts b/samples/client/nativescript/src/app/components/spacer.component.ts index a18d13b5..10e207ab 100644 --- a/samples/client/nativescript/src/app/components/spacer.component.ts +++ b/samples/client/nativescript/src/app/components/spacer.component.ts @@ -1,7 +1,7 @@ import { Component, ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { NativeScriptCommonModule } from '@nativescript/angular'; -import { DynamicComponent } from '@a2ui/nativescript'; -import { Types, SimpleNode } from '../../a2ui-lit-types'; +import { DynamicComponent, Types } from '@a2ui/nativescript'; +import { SimpleNode } from '../../a2ui-types'; @Component({ selector: 'a2ui-spacer', diff --git a/samples/client/nativescript/src/app/components/text.component.ts b/samples/client/nativescript/src/app/components/text.component.ts index a7ab630e..1cf44373 100644 --- a/samples/client/nativescript/src/app/components/text.component.ts +++ b/samples/client/nativescript/src/app/components/text.component.ts @@ -1,7 +1,7 @@ import { Component, Input, ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { NativeScriptCommonModule } from '@nativescript/angular'; -import { DynamicComponent } from '@a2ui/nativescript'; -import { Types, SimpleNode } from '../../a2ui-lit-types'; +import { DynamicComponent, Types } from '@a2ui/nativescript'; +import { SimpleNode } from '../../a2ui-types'; @Component({ selector: 'a2ui-text', diff --git a/samples/client/nativescript/src/app/components/textfield.component.ts b/samples/client/nativescript/src/app/components/textfield.component.ts index 452b2c2f..364ebf2b 100644 --- a/samples/client/nativescript/src/app/components/textfield.component.ts +++ b/samples/client/nativescript/src/app/components/textfield.component.ts @@ -1,7 +1,7 @@ import { Component, ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { NativeScriptCommonModule } from '@nativescript/angular'; -import { DynamicComponent } from '@a2ui/nativescript'; -import { Types, SimpleNode } from '../../a2ui-lit-types'; +import { DynamicComponent, Types } from '@a2ui/nativescript'; +import { SimpleNode, Action } from '../../a2ui-types'; @Component({ selector: 'a2ui-textfield', @@ -110,9 +110,8 @@ export class TextFieldComponent extends DynamicComponent { if (node?.id) { this.sendAction({ name: `${node.id}:change`, - id: `${node.id}:change`, payload: { value }, - }); + } as Action); } } } diff --git a/samples/client/nativescript/src/app/demo-surfaces.ts b/samples/client/nativescript/src/app/demo-surfaces.ts index 00a5707a..b48f24db 100644 --- a/samples/client/nativescript/src/app/demo-surfaces.ts +++ b/samples/client/nativescript/src/app/demo-surfaces.ts @@ -1,4 +1,4 @@ -import { Types } from "../a2ui-lit-types"; +import { A2uiMessage, SimpleNode } from "../a2ui-types"; /** * Comprehensive demo surfaces for showcasing ALL A2UI capabilities. @@ -20,7 +20,7 @@ import { Types } from "../a2ui-lit-types"; // ============================================================ // WELCOME SURFACE // ============================================================ -export const DEMO_WELCOME_SURFACE: Types.A2uiMessage = { +export const DEMO_WELCOME_SURFACE: A2uiMessage = { surfaceId: "demo-welcome", root: { type: "Column", @@ -124,13 +124,13 @@ export const DEMO_WELCOME_SURFACE: Types.A2uiMessage = { ], }, ], - } as Types.Node, + } as SimpleNode, }; // ============================================================ // RESTAURANT FINDER SURFACE // ============================================================ -export const DEMO_RESTAURANT_SURFACE: Types.A2uiMessage = { +export const DEMO_RESTAURANT_SURFACE: A2uiMessage = { surfaceId: "demo-restaurants", root: { type: "Column", @@ -290,13 +290,13 @@ export const DEMO_RESTAURANT_SURFACE: Types.A2uiMessage = { ], }, ], - } as Types.Node, + } as SimpleNode, }; // ============================================================ // CONTACT DETAILS SURFACE // ============================================================ -export const DEMO_CONTACT_SURFACE: Types.A2uiMessage = { +export const DEMO_CONTACT_SURFACE: A2uiMessage = { surfaceId: "demo-contact", root: { type: "Column", @@ -482,13 +482,13 @@ export const DEMO_CONTACT_SURFACE: Types.A2uiMessage = { ], }, ], - } as Types.Node, + } as SimpleNode, }; // ============================================================ // ANALYTICS DASHBOARD SURFACE // ============================================================ -export const DEMO_CHART_SURFACE: Types.A2uiMessage = { +export const DEMO_CHART_SURFACE: A2uiMessage = { surfaceId: "demo-analytics", root: { type: "Column", @@ -725,13 +725,13 @@ export const DEMO_CHART_SURFACE: Types.A2uiMessage = { ], }, ], - } as Types.Node, + } as SimpleNode, }; // ============================================================ // FORM INPUT SURFACE // ============================================================ -export const DEMO_FORM_SURFACE: Types.A2uiMessage = { +export const DEMO_FORM_SURFACE: A2uiMessage = { surfaceId: "demo-form", root: { type: "Column", @@ -870,13 +870,13 @@ export const DEMO_FORM_SURFACE: Types.A2uiMessage = { ], }, ], - } as Types.Node, + } as SimpleNode, }; // ============================================================ // LIST COMPONENT SURFACE // ============================================================ -export const DEMO_LIST_SURFACE: Types.A2uiMessage = { +export const DEMO_LIST_SURFACE: A2uiMessage = { surfaceId: "demo-list", root: { type: "Column", @@ -1103,13 +1103,13 @@ export const DEMO_LIST_SURFACE: Types.A2uiMessage = { action: { name: "addTask" }, }, ], - } as Types.Node, + } as SimpleNode, }; // ============================================================ // IMAGE GALLERY SURFACE // ============================================================ -export const DEMO_IMAGE_SURFACE: Types.A2uiMessage = { +export const DEMO_IMAGE_SURFACE: A2uiMessage = { surfaceId: "demo-gallery", root: { type: "Column", @@ -1235,13 +1235,13 @@ export const DEMO_IMAGE_SURFACE: Types.A2uiMessage = { ], }, ], - } as Types.Node, + } as SimpleNode, }; // ============================================================ // BUTTON VARIANTS SURFACE // ============================================================ -export const DEMO_BUTTONS_SURFACE: Types.A2uiMessage = { +export const DEMO_BUTTONS_SURFACE: A2uiMessage = { surfaceId: "demo-buttons", root: { type: "Column", @@ -1374,13 +1374,13 @@ export const DEMO_BUTTONS_SURFACE: Types.A2uiMessage = { ], }, ], - } as Types.Node, + } as SimpleNode, }; // ============================================================ // FULL COMPONENT SHOWCASE SURFACE // ============================================================ -export const DEMO_SHOWCASE_SURFACE: Types.A2uiMessage = { +export const DEMO_SHOWCASE_SURFACE: A2uiMessage = { surfaceId: "demo-showcase", root: { type: "Column", @@ -1619,13 +1619,13 @@ export const DEMO_SHOWCASE_SURFACE: Types.A2uiMessage = { ], }, ], - } as Types.Node, + } as SimpleNode, }; // ============================================================ // MENU DEMO SURFACE // ============================================================ -export const DEMO_MENU_SURFACE: Types.A2uiMessage = { +export const DEMO_MENU_SURFACE: A2uiMessage = { surfaceId: "demo-menu", root: { type: "Column", @@ -1766,7 +1766,7 @@ export const DEMO_MENU_SURFACE: Types.A2uiMessage = { ], }, ], - } as Types.Node, + } as SimpleNode, }; // ============================================================ @@ -1774,7 +1774,7 @@ export const DEMO_MENU_SURFACE: Types.A2uiMessage = { // ============================================================ export function getDemoResponse(query: string): { text: string; - surface?: Types.A2uiMessage; + surface?: A2uiMessage; } { const q = query.toLowerCase().trim(); @@ -1947,7 +1947,7 @@ Or say **"help"** for the full list!`, /** * Get all available demo surfaces for testing */ -export function getAllDemoSurfaces(): Types.A2uiMessage[] { +export function getAllDemoSurfaces(): A2uiMessage[] { return [ DEMO_WELCOME_SURFACE, DEMO_RESTAURANT_SURFACE, diff --git a/samples/client/nativescript/src/app/services/a2a.service.ts b/samples/client/nativescript/src/app/services/a2a.service.ts index 8c2c2a73..5bc022b0 100644 --- a/samples/client/nativescript/src/app/services/a2a.service.ts +++ b/samples/client/nativescript/src/app/services/a2a.service.ts @@ -1,6 +1,7 @@ import { Injectable, signal, computed } from "@angular/core"; import { Http, HttpResponse } from "@nativescript/core"; -import { Types } from "../../a2ui-lit-types"; +import { Types } from "@a2ui/nativescript"; +import { A2uiMessage } from "../../a2ui-types"; export interface AgentCard { name: string; @@ -30,7 +31,7 @@ export interface ChatMessage { role: "user" | "agent"; content: string; timestamp: Date; - surfaces?: Types.A2uiMessage[]; + surfaces?: A2uiMessage[]; status?: "sending" | "sent" | "error"; } diff --git a/samples/client/nativescript/src/app/services/chat.service.ts b/samples/client/nativescript/src/app/services/chat.service.ts index d21905fe..f7ff4faa 100644 --- a/samples/client/nativescript/src/app/services/chat.service.ts +++ b/samples/client/nativescript/src/app/services/chat.service.ts @@ -1,6 +1,7 @@ import { Injectable, signal, computed, inject } from '@angular/core'; import { A2aService, ChatMessage, MessagePart, AgentCard } from './a2a.service'; -import { Types } from '../../a2ui-lit-types'; +import { Types } from '@a2ui/nativescript'; +import { A2uiMessage, Action } from '../../a2ui-types'; import { getDemoResponse } from '../demo-surfaces'; export type MessageStatus = 'idle' | 'sending' | 'streaming' | 'error'; @@ -10,7 +11,7 @@ export interface UiMessage { role: 'user' | 'agent'; content: string; timestamp: Date; - surfaces?: Types.A2uiMessage[]; + surfaces?: A2uiMessage[]; status: 'sending' | 'sent' | 'error'; actions?: Types.Action[]; } @@ -23,7 +24,7 @@ export class ChatService { private readonly _messages = signal([]); private readonly _status = signal('idle'); - private readonly _currentSurface = signal(null); + private readonly _currentSurface = signal(null); readonly messages = this._messages.asReadonly(); readonly status = this._status.asReadonly(); @@ -137,7 +138,7 @@ export class ChatService { private processDemoResponse(messageId: string, query: string): void { const demoResponse = getDemoResponse(query); - const surfaces: Types.A2uiMessage[] = []; + const surfaces: A2uiMessage[] = []; if (demoResponse.surface) { surfaces.push(demoResponse.surface); @@ -160,7 +161,7 @@ export class ChatService { private processResponse(messageId: string, response: any): void { let content = ''; - let surfaces: Types.A2uiMessage[] = []; + let surfaces: A2uiMessage[] = []; let actions: Types.Action[] = []; try { @@ -190,7 +191,7 @@ export class ChatService { // Accumulate A2UI messages by surfaceId // The server sends separate beginRendering, surfaceUpdate, and dataModelUpdate parts // We need to combine them into a single surface with all messages - const a2uiMessagesBySurface: Map = new Map(); + const a2uiMessagesBySurface: Map = new Map(); // Process parts for (const part of parts) { @@ -201,7 +202,7 @@ export class ChatService { // Handle data parts with A2UI content if (part.kind === 'data' && part.data && typeof part.data === 'object') { - const data = part.data as Types.A2uiMessage; + const data = part.data as A2uiMessage; // Check for A2UI message types - these are the raw A2UI protocol messages if ('beginRendering' in data || 'surfaceUpdate' in data || 'dataModelUpdate' in data) { @@ -222,7 +223,7 @@ export class ChatService { // Legacy: check metadata for a2ui/surface if (part.metadata?.['a2ui/surface']) { - const surface = part.metadata['a2ui/surface'] as Types.A2uiMessage; + const surface = part.metadata['a2ui/surface'] as A2uiMessage; surfaces.push(surface); } } @@ -271,7 +272,7 @@ export class ChatService { * Converts A2UI protocol messages (beginRendering, surfaceUpdate, dataModelUpdate) * into a component tree structure that the renderer can display. */ - private buildSurfaceFromMessages(surfaceId: string, messages: any[]): Types.A2uiMessage | null { + private buildSurfaceFromMessages(surfaceId: string, messages: any[]): A2uiMessage | null { let rootId: string | null = null; const componentsById: Map = new Map(); const dataModel: Map = new Map(); @@ -513,10 +514,10 @@ export class ChatService { return node as Types.AnyComponentNode; } - handleAction(action: Types.Action): void { + handleAction(action: Action): void { console.log('Action triggered:', action); // Send action back to agent if needed - const actionId = action.id || action.name; + const actionId = action.name; if (actionId) { this.sendMessage(`[Action: ${actionId}]`); } diff --git a/samples/client/nativescript/tsconfig.json b/samples/client/nativescript/tsconfig.json index c3a0f70c..1171cb69 100644 --- a/samples/client/nativescript/tsconfig.json +++ b/samples/client/nativescript/tsconfig.json @@ -14,14 +14,18 @@ "~/*": ["src/*"], "@/*": ["src/*"], "@a2ui/nativescript": ["../../../renderers/nativescript/src/public-api.ts"], - "@a2ui/lit": ["src/a2ui-lit-types.ts"], - "@a2ui/lit/0.8": ["src/a2ui-lit-types.ts"], + "@a2ui/lit": ["src/a2ui-lit-shim.ts"], + "@a2ui/lit/0.8": ["src/a2ui-lit-shim.ts"], + "@a2ui/lit/0.8/types/*": ["../../../renderers/lit/src/0.8/types/*"], "@angular/core": ["node_modules/@angular/core"], "rxjs": ["node_modules/rxjs"], "rxjs/*": ["node_modules/rxjs/*"] } }, - "include": ["src/**/*.ts", "../../../renderers/nativescript/src/**/*.ts"], + "include": [ + "src/**/*.ts", + "../../../renderers/nativescript/src/**/*.ts" + ], "files": ["./src/main.ts", "./references.d.ts", "./src/polyfills.ts"], "exclude": ["node_modules", "platforms", "e2e"] } diff --git a/samples/client/nativescript/webpack.config.js b/samples/client/nativescript/webpack.config.js index 1238cacc..aa5e2554 100644 --- a/samples/client/nativescript/webpack.config.js +++ b/samples/client/nativescript/webpack.config.js @@ -9,14 +9,13 @@ module.exports = (env) => { webpack.chainWebpack((config) => { const appNodeModules = resolve(__dirname, 'node_modules'); - const litTypesPath = resolve(__dirname, '../../../renderers/lit/src/0.8/types'); // Configure alias to resolve @a2ui packages from source config.resolve.alias.set('@a2ui/nativescript', resolve(__dirname, '../../../renderers/nativescript/src/public-api.ts')); - // Point to our custom NativeScript-compatible entry for lit types - config.resolve.alias.set('@a2ui/lit/0.8', resolve(__dirname, 'src/a2ui-lit-types.ts')); - config.resolve.alias.set('@a2ui/lit', resolve(__dirname, 'src/a2ui-lit-types.ts')); + // Point to our shim that only exports types (no runtime code from lit) + config.resolve.alias.set('@a2ui/lit/0.8', resolve(__dirname, 'src/a2ui-lit-shim.ts')); + config.resolve.alias.set('@a2ui/lit', resolve(__dirname, 'src/a2ui-lit-shim.ts')); // Ensure all modules resolve from the app's node_modules config.resolve.modules.prepend(appNodeModules);