From 38075244121f72539ab41436fdc8bebd9e1bee28 Mon Sep 17 00:00:00 2001 From: Kham Date: Fri, 18 Sep 2026 15:19:16 +1000 Subject: [PATCH] change over primeng v22 --- U22/.editorconfig | 17 + U22/.gemini/GEMINI.md | 58 + U22/.gemini/settings.json | 11 + U22/.gitignore | 44 + U22/.postcssrc.json | 5 + U22/.prettierrc | 12 + U22/.vscode/extensions.json | 4 + U22/.vscode/launch.json | 20 + U22/.vscode/tasks.json | 42 + U22/README.md | 64 + U22/angular.json | 73 + U22/package-lock.json | 8582 +++++++++++++++++ U22/package.json | 40 + U22/public/config/appsetting.json | 10 + U22/public/favicon.ico | Bin 0 -> 15086 bytes U22/public/images/NBMLHD-LogoWhite.png | Bin 0 -> 47661 bytes ...king-Concession-Validation-Register_v1.png | Bin 0 -> 21307 bytes U22/public/images/application_image.png | Bin 0 -> 20253 bytes U22/public/images/application_image_od.png | Bin 0 -> 76167 bytes U22/src/app/adminuser/adminuser.component.css | 12 + .../app/adminuser/adminuser.component.html | 56 + U22/src/app/adminuser/adminuser.component.ts | 96 + .../adminuser/adminuser.edit.component.css | 12 + .../adminuser/adminuser.edit.component.html | 48 + .../app/adminuser/adminuser.edit.component.ts | 203 + U22/src/app/adminuser/adminuser.service.ts | 51 + U22/src/app/adminuser/index.ts | 4 + U22/src/app/app.config.ts | 48 + U22/src/app/app.css | 0 U22/src/app/app.html | 6 + U22/src/app/app.routes.ts | 28 + U22/src/app/app.ts | 19 + .../concessionvalidation.component.css | 12 + .../concessionvalidation.component.html | 99 + .../concessionvalidation.component.ts | 149 + .../concessionvalidation.edit.component.css | 12 + .../concessionvalidation.edit.component.html | 68 + .../concessionvalidation.edit.component.ts | 296 + .../concessionvalidation.service.ts | 102 + U22/src/app/concessionValidation/index.ts | 4 + .../concessiontype.component.css | 12 + .../concessiontype.component.html | 45 + .../concessiontype.component.ts | 99 + .../concessiontype.edit.component.css | 12 + .../concessiontype.edit.component.html | 34 + .../concessiontype.edit.component.ts | 122 + .../concessiontype/concessiontype.service.ts | 40 + U22/src/app/concessiontype/index.ts | 4 + .../concessionvalidationreport.component.css | 0 .../concessionvalidationreport.component.html | 24 + .../concessionvalidationreport.component.ts | 96 + .../app/concessionvalidationreport/index.ts | 1 + U22/src/app/login/index.ts | 2 + U22/src/app/login/login.component.css | 5 + U22/src/app/login/login.component.html | 47 + U22/src/app/login/login.component.ts | 82 + U22/src/app/models/adminuser.ts | 21 + U22/src/app/models/concessiontype.ts | 6 + U22/src/app/models/concessionvalidation.ts | 14 + U22/src/app/models/configureUrl.ts | 17 + U22/src/app/models/enum.ts | 44 + U22/src/app/models/index.ts | 9 + U22/src/app/models/lookup.ts | 7 + U22/src/app/models/lookupcode.ts | 44 + U22/src/app/models/pagequery.ts | 7 + U22/src/app/models/person.ts | 80 + U22/src/app/models/picklist.ts | 45 + U22/src/app/models/resultmodel.ts | 5 + U22/src/app/models/user.ts | 10 + U22/src/app/models/validationpoint.ts | 6 + U22/src/app/mytheme_aura.ts | 5235 ++++++++++ .../app/nav-toolbar/nav-toolbar.component.css | 38 + .../nav-toolbar/nav-toolbar.component.html | 24 + .../app/nav-toolbar/nav-toolbar.component.ts | 59 + U22/src/app/route-guard/auth.guard.ts | 42 + U22/src/app/route-guard/index.js | 7 + U22/src/app/route-guard/index.ts | 1 + U22/src/app/shares/CommonUtilities.ts | 60 + U22/src/app/shares/appsetting.ts | 65 + U22/src/app/shares/error.interceptor.ts | 97 + U22/src/app/shares/httpfile.service.ts | 115 + U22/src/app/shares/index.ts | 8 + U22/src/app/shares/jwt.interceptor.ts | 50 + U22/src/app/shares/lookup.service.ts | 25 + U22/src/app/shares/utils.ts | 66 + .../user-services/authentication.service.ts | 72 + U22/src/app/user-services/index.js | 8 + U22/src/app/user-services/index.js.map | 1 + U22/src/app/user-services/index.ts | 2 + U22/src/app/user-services/user.service.ts | 19 + U22/src/app/validationPoint/index.ts | 4 + .../validationpoint.component.css | 12 + .../validationpoint.component.html | 46 + .../validationpoint.component.ts | 95 + .../validationpoint.edit.component.css | 12 + .../validationpoint.edit.component.html | 36 + .../validationpoint.edit.component.ts | 125 + .../validationpoint.service.ts | 44 + U22/src/index.html | 13 + U22/src/main.ts | 6 + U22/src/styles.css | 12 + U22/tsconfig.app.json | 14 + U22/tsconfig.json | 31 + U22/tsconfig.spec.json | 14 + UI/e2e/protractor.conf.js | 36 - UI/e2e/src/app.e2e-spec.ts | 23 - UI/e2e/src/app.po.ts | 11 - UI/e2e/tsconfig.json | 14 - 108 files changed, 17705 insertions(+), 84 deletions(-) create mode 100644 U22/.editorconfig create mode 100644 U22/.gemini/GEMINI.md create mode 100644 U22/.gemini/settings.json create mode 100644 U22/.gitignore create mode 100644 U22/.postcssrc.json create mode 100644 U22/.prettierrc create mode 100644 U22/.vscode/extensions.json create mode 100644 U22/.vscode/launch.json create mode 100644 U22/.vscode/tasks.json create mode 100644 U22/README.md create mode 100644 U22/angular.json create mode 100644 U22/package-lock.json create mode 100644 U22/package.json create mode 100644 U22/public/config/appsetting.json create mode 100644 U22/public/favicon.ico create mode 100644 U22/public/images/NBMLHD-LogoWhite.png create mode 100644 U22/public/images/Nepean-Hospital-Parking-Concession-Validation-Register_v1.png create mode 100644 U22/public/images/application_image.png create mode 100644 U22/public/images/application_image_od.png create mode 100644 U22/src/app/adminuser/adminuser.component.css create mode 100644 U22/src/app/adminuser/adminuser.component.html create mode 100644 U22/src/app/adminuser/adminuser.component.ts create mode 100644 U22/src/app/adminuser/adminuser.edit.component.css create mode 100644 U22/src/app/adminuser/adminuser.edit.component.html create mode 100644 U22/src/app/adminuser/adminuser.edit.component.ts create mode 100644 U22/src/app/adminuser/adminuser.service.ts create mode 100644 U22/src/app/adminuser/index.ts create mode 100644 U22/src/app/app.config.ts create mode 100644 U22/src/app/app.css create mode 100644 U22/src/app/app.html create mode 100644 U22/src/app/app.routes.ts create mode 100644 U22/src/app/app.ts create mode 100644 U22/src/app/concessionValidation/concessionvalidation.component.css create mode 100644 U22/src/app/concessionValidation/concessionvalidation.component.html create mode 100644 U22/src/app/concessionValidation/concessionvalidation.component.ts create mode 100644 U22/src/app/concessionValidation/concessionvalidation.edit.component.css create mode 100644 U22/src/app/concessionValidation/concessionvalidation.edit.component.html create mode 100644 U22/src/app/concessionValidation/concessionvalidation.edit.component.ts create mode 100644 U22/src/app/concessionValidation/concessionvalidation.service.ts create mode 100644 U22/src/app/concessionValidation/index.ts create mode 100644 U22/src/app/concessiontype/concessiontype.component.css create mode 100644 U22/src/app/concessiontype/concessiontype.component.html create mode 100644 U22/src/app/concessiontype/concessiontype.component.ts create mode 100644 U22/src/app/concessiontype/concessiontype.edit.component.css create mode 100644 U22/src/app/concessiontype/concessiontype.edit.component.html create mode 100644 U22/src/app/concessiontype/concessiontype.edit.component.ts create mode 100644 U22/src/app/concessiontype/concessiontype.service.ts create mode 100644 U22/src/app/concessiontype/index.ts create mode 100644 U22/src/app/concessionvalidationreport/concessionvalidationreport.component.css create mode 100644 U22/src/app/concessionvalidationreport/concessionvalidationreport.component.html create mode 100644 U22/src/app/concessionvalidationreport/concessionvalidationreport.component.ts create mode 100644 U22/src/app/concessionvalidationreport/index.ts create mode 100644 U22/src/app/login/index.ts create mode 100644 U22/src/app/login/login.component.css create mode 100644 U22/src/app/login/login.component.html create mode 100644 U22/src/app/login/login.component.ts create mode 100644 U22/src/app/models/adminuser.ts create mode 100644 U22/src/app/models/concessiontype.ts create mode 100644 U22/src/app/models/concessionvalidation.ts create mode 100644 U22/src/app/models/configureUrl.ts create mode 100644 U22/src/app/models/enum.ts create mode 100644 U22/src/app/models/index.ts create mode 100644 U22/src/app/models/lookup.ts create mode 100644 U22/src/app/models/lookupcode.ts create mode 100644 U22/src/app/models/pagequery.ts create mode 100644 U22/src/app/models/person.ts create mode 100644 U22/src/app/models/picklist.ts create mode 100644 U22/src/app/models/resultmodel.ts create mode 100644 U22/src/app/models/user.ts create mode 100644 U22/src/app/models/validationpoint.ts create mode 100644 U22/src/app/mytheme_aura.ts create mode 100644 U22/src/app/nav-toolbar/nav-toolbar.component.css create mode 100644 U22/src/app/nav-toolbar/nav-toolbar.component.html create mode 100644 U22/src/app/nav-toolbar/nav-toolbar.component.ts create mode 100644 U22/src/app/route-guard/auth.guard.ts create mode 100644 U22/src/app/route-guard/index.js create mode 100644 U22/src/app/route-guard/index.ts create mode 100644 U22/src/app/shares/CommonUtilities.ts create mode 100644 U22/src/app/shares/appsetting.ts create mode 100644 U22/src/app/shares/error.interceptor.ts create mode 100644 U22/src/app/shares/httpfile.service.ts create mode 100644 U22/src/app/shares/index.ts create mode 100644 U22/src/app/shares/jwt.interceptor.ts create mode 100644 U22/src/app/shares/lookup.service.ts create mode 100644 U22/src/app/shares/utils.ts create mode 100644 U22/src/app/user-services/authentication.service.ts create mode 100644 U22/src/app/user-services/index.js create mode 100644 U22/src/app/user-services/index.js.map create mode 100644 U22/src/app/user-services/index.ts create mode 100644 U22/src/app/user-services/user.service.ts create mode 100644 U22/src/app/validationPoint/index.ts create mode 100644 U22/src/app/validationPoint/validationpoint.component.css create mode 100644 U22/src/app/validationPoint/validationpoint.component.html create mode 100644 U22/src/app/validationPoint/validationpoint.component.ts create mode 100644 U22/src/app/validationPoint/validationpoint.edit.component.css create mode 100644 U22/src/app/validationPoint/validationpoint.edit.component.html create mode 100644 U22/src/app/validationPoint/validationpoint.edit.component.ts create mode 100644 U22/src/app/validationPoint/validationpoint.service.ts create mode 100644 U22/src/index.html create mode 100644 U22/src/main.ts create mode 100644 U22/src/styles.css create mode 100644 U22/tsconfig.app.json create mode 100644 U22/tsconfig.json create mode 100644 U22/tsconfig.spec.json delete mode 100644 UI/e2e/protractor.conf.js delete mode 100644 UI/e2e/src/app.e2e-spec.ts delete mode 100644 UI/e2e/src/app.po.ts delete mode 100644 UI/e2e/tsconfig.json diff --git a/U22/.editorconfig b/U22/.editorconfig new file mode 100644 index 0000000..f166060 --- /dev/null +++ b/U22/.editorconfig @@ -0,0 +1,17 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single +ij_typescript_use_double_quotes = false + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/U22/.gemini/GEMINI.md b/U22/.gemini/GEMINI.md new file mode 100644 index 0000000..085ea86 --- /dev/null +++ b/U22/.gemini/GEMINI.md @@ -0,0 +1,58 @@ +You are an expert in TypeScript, Angular, and scalable web application development. You write functional, maintainable, performant, and accessible code following Angular and TypeScript best practices. + +## TypeScript Best Practices + +- Use strict type checking +- Prefer type inference when the type is obvious +- Avoid the `any` type; use `unknown` when type is uncertain + +## Angular Best Practices + +- Always use standalone components over NgModules +- Must NOT set `standalone: true` inside Angular decorators. It's the default in Angular v20+. +- Do NOT set `changeDetection: ChangeDetectionStrategy.OnPush` explicitly. `OnPush` is the default in Angular v22+. +- Use signals for state management +- Implement lazy loading for feature routes +- Do NOT use the `@HostBinding` and `@HostListener` decorators. Put host bindings inside the `host` object of the `@Component` or `@Directive` decorator instead +- Use `NgOptimizedImage` for all static images. + - `NgOptimizedImage` does not work for inline base64 images. + +## Accessibility Requirements + +- It MUST pass all AXE checks. +- It MUST follow all WCAG AA minimums, including focus management, color contrast, and ARIA attributes. + +### Components + +- Keep components small and focused on a single responsibility +- Use `input()` and `output()` functions instead of decorators +- Use `model()` for two-way bound properties with `[(prop)]` syntax instead of pairing `input()` with `output()` +- Use `computed()` for derived state +- Use `linkedSignal()` for state derived from multiple reactive sources that must stay synchronized +- Prefer inline templates for small components +- Prefer Signal Forms (`@angular/forms/signals`) for new forms. They are stable in Angular v22+ and provide signal-based state, type-safe field access, and schema-based validation +- When not using Signal Forms, prefer Reactive forms instead of Template-driven ones +- Do NOT use `ngClass`, use `class` bindings instead +- Do NOT use `ngStyle`, use `style` bindings instead +- When using external templates/styles, use paths relative to the component TS file. + +## State Management + +- Use signals for local component state +- Use `computed()` for derived state +- Keep state transformations pure and predictable +- Do NOT use `mutate` on signals, use `update` or `set` instead + +## Templates + +- Keep templates simple and avoid complex logic +- Use native control flow (`@if`, `@for`, `@switch`) instead of `*ngIf`, `*ngFor`, `*ngSwitch` +- Use the async pipe to handle observables +- Do not assume globals like (`new Date()`) are available. + +## Services + +- Design services around a single responsibility +- Use the `providedIn: 'root'` option for singleton services +- Prefer the `@Service` decorator over `@Injectable({providedIn: 'root'})` for new singleton services (Angular v22+) +- Use the `inject()` function instead of constructor injection diff --git a/U22/.gemini/settings.json b/U22/.gemini/settings.json new file mode 100644 index 0000000..d7703dc --- /dev/null +++ b/U22/.gemini/settings.json @@ -0,0 +1,11 @@ +{ + "mcpServers": { + "angular-cli": { + "command": "npx", + "args": ["-y", "@angular/cli", "mcp"] + } + }, + "ui": { + "showLineNumbers": false + } +} diff --git a/U22/.gitignore b/U22/.gitignore new file mode 100644 index 0000000..854acd5 --- /dev/null +++ b/U22/.gitignore @@ -0,0 +1,44 @@ +# See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/mcp.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings +__screenshots__/ + +# System files +.DS_Store +Thumbs.db diff --git a/U22/.postcssrc.json b/U22/.postcssrc.json new file mode 100644 index 0000000..72f908d --- /dev/null +++ b/U22/.postcssrc.json @@ -0,0 +1,5 @@ +{ + "plugins": { + "@tailwindcss/postcss": {} + } +} \ No newline at end of file diff --git a/U22/.prettierrc b/U22/.prettierrc new file mode 100644 index 0000000..d6c16d7 --- /dev/null +++ b/U22/.prettierrc @@ -0,0 +1,12 @@ +{ + "printWidth": 100, + "singleQuote": true, + "overrides": [ + { + "files": "*.html", + "options": { + "parser": "angular" + } + } + ] +} diff --git a/U22/.vscode/extensions.json b/U22/.vscode/extensions.json new file mode 100644 index 0000000..77b3745 --- /dev/null +++ b/U22/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 + "recommendations": ["angular.ng-template"] +} diff --git a/U22/.vscode/launch.json b/U22/.vscode/launch.json new file mode 100644 index 0000000..925af83 --- /dev/null +++ b/U22/.vscode/launch.json @@ -0,0 +1,20 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "ng serve", + "type": "chrome", + "request": "launch", + "preLaunchTask": "npm: start", + "url": "http://localhost:4200/" + }, + { + "name": "ng test", + "type": "chrome", + "request": "launch", + "preLaunchTask": "npm: test", + "url": "http://localhost:9876/debug.html" + } + ] +} diff --git a/U22/.vscode/tasks.json b/U22/.vscode/tasks.json new file mode 100644 index 0000000..244306f --- /dev/null +++ b/U22/.vscode/tasks.json @@ -0,0 +1,42 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?LinkId=733558 + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "start", + "isBackground": true, + "problemMatcher": { + "owner": "typescript", + "pattern": "$tsc", + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "Changes detected" + }, + "endsPattern": { + "regexp": "bundle generation (complete|failed)" + } + } + } + }, + { + "type": "npm", + "script": "test", + "isBackground": true, + "problemMatcher": { + "owner": "typescript", + "pattern": "$tsc", + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "Changes detected" + }, + "endsPattern": { + "regexp": "bundle generation (complete|failed)" + } + } + } + } + ] +} diff --git a/U22/README.md b/U22/README.md new file mode 100644 index 0000000..4f7c96e --- /dev/null +++ b/U22/README.md @@ -0,0 +1,64 @@ +# Carparkvalidation + +https://www.youtube.com/watch?v=KpNzBU4fNdU + +# install AI google + npm install -g @google/gemini-cli + +This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 22.1.6. + +## Development server + +To start a local development server, run: + +```bash +ng serve +``` + +Once the server is running, open your browser and navigate to `http://localhost:4200/`. The application will automatically reload whenever you modify any of the source files. + +## Code scaffolding + +Angular CLI includes powerful code scaffolding tools. To generate a new component, run: + +```bash +ng generate component component-name +``` + +For a complete list of available schematics (such as `components`, `directives`, or `pipes`), run: + +```bash +ng generate --help +``` + +## Building + +To build the project run: + +```bash +ng build +``` + +This will compile your project and store the build artifacts in the `dist/` directory. By default, the production build optimizes your application for performance and speed. + +## Running unit tests + +To execute unit tests with the [Vitest](https://vitest.dev/) test runner, use the following command: + +```bash +ng test +``` + +## Running end-to-end tests + +For end-to-end (e2e) testing, run: + +```bash +ng e2e +``` + +Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs. + +## Additional Resources + +For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page. diff --git a/U22/angular.json b/U22/angular.json new file mode 100644 index 0000000..251dcd8 --- /dev/null +++ b/U22/angular.json @@ -0,0 +1,73 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "cli": { + "packageManager": "npm" + }, + "newProjectRoot": "projects", + "projects": { + "carparkvalidation": { + "projectType": "application", + "schematics": {}, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "browser": "src/main.ts", + "tsConfig": "tsconfig.app.json", + "assets": [ + { + "glob": "**/*", + "input": "public" + } + ], + "styles": [ + "src/styles.css" + ] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kB", + "maximumError": "1MB" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "4kB", + "maximumError": "8kB" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular/build:dev-server", + "configurations": { + "production": { + "buildTarget": "carparkvalidation:build:production" + }, + "development": { + "buildTarget": "carparkvalidation:build:development" + } + }, + "defaultConfiguration": "development" + }, + "test": { + "builder": "@angular/build:unit-test" + } + } + } + } +} diff --git a/U22/package-lock.json b/U22/package-lock.json new file mode 100644 index 0000000..39d8da9 --- /dev/null +++ b/U22/package-lock.json @@ -0,0 +1,8582 @@ +{ + "name": "carparkvalidation", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "carparkvalidation", + "version": "0.0.0", + "dependencies": { + "@angular/common": "^22.1.0", + "@angular/compiler": "^22.1.0", + "@angular/core": "^22.1.0", + "@angular/forms": "^22.1.0", + "@angular/platform-browser": "^22.1.0", + "@angular/router": "^22.1.0", + "@google/generative-ai": "^0.24.1", + "@primeicons/angular": "^8.0.1", + "@primeuix/themes": "^3.0.1", + "moment": "^2.31.0", + "primeng": "^22.1.1", + "rxjs": "~7.8.0", + "tslib": "^2.3.0" + }, + "devDependencies": { + "@angular/build": "^22.1.6", + "@angular/cli": "^22.1.6", + "@angular/compiler-cli": "^22.1.0", + "@tailwindcss/postcss": "^4.1.12", + "jsdom": "^28.0.0", + "postcss": "^8.5.3", + "prettier": "^3.8.1", + "tailwindcss": "^4.1.12", + "typescript": "~6.0.2", + "vitest": "^4.0.8" + } + }, + "node_modules/@acemir/cssom": { + "version": "0.9.31", + "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.31.tgz", + "integrity": "sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@alloc/quick-lru": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.3.0.tgz", + "integrity": "sha512-U4+70Pc5ZS9osnCBCE5Jha/ciHM+Yp+CNMNC/7HvYbNRk1Ldd+f7qO65W5qfhu/TCv+/ozljlXXe9Nj8419DMA==", + "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.2201.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2201.8.tgz", + "integrity": "sha512-EUQo8RDS1my2Bo5FRS+gBYgz1/klfIp9XESfMpTBO04nBkjF6DkPCeOxeAf1CYjWy9nCXcWn968eSdEhV5jXiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "22.1.8", + "rxjs": "7.8.2" + }, + "bin": { + "architect": "bin/cli.js" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "22.1.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-22.1.8.tgz", + "integrity": "sha512-34lsgg2FwMVBX7nR/ZqzRUcdvdYPvSB8XAEr2GudXAyZwLI9ehzfQlagAWR/gEb8p4uCFZW0r7uU0toxydq4Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.20.0", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.5", + "rxjs": "7.8.2", + "source-map": "0.7.6" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^5.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "22.1.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-22.1.8.tgz", + "integrity": "sha512-Pv3cPa/44kvEwYcqwx4Ns5dhIDmcFNSHhbpheqiEG1Z/u4e2t4zHKDtE3eHZB+8o+IcC7xJj+d+AqGR44RoZDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "22.1.8", + "jsonc-parser": "3.3.1", + "magic-string": "1.0.0", + "ora": "9.4.1", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/build": { + "version": "22.1.8", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-22.1.8.tgz", + "integrity": "sha512-tw+Evk0EITb8p8dTu743ONoFztCEiyDkdRbtZsh7C0vBS7Q9ElsOcFeg2Z9OAAwrmtZMIBuW3jrdPRQp7OCSdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.2201.8", + "@babel/core": "8.0.1", + "@babel/helper-annotate-as-pure": "8.0.0", + "@babel/helper-split-export-declaration": "7.24.7", + "@inquirer/confirm": "6.1.1", + "@vitejs/plugin-basic-ssl": "2.3.0", + "beasties": "0.4.3", + "browserslist": "^4.26.0", + "esbuild": "0.28.2", + "https-proxy-agent": "9.1.0", + "jsonc-parser": "3.3.1", + "listr2": "11.0.0", + "magic-string": "1.0.0", + "mrmime": "2.0.1", + "oxc-parser": "0.142.0", + "parse5-html-rewriting-stream": "8.0.1", + "picomatch": "4.0.5", + "piscina": "5.2.0", + "rolldown": "1.2.0", + "sass": "1.101.0", + "semver": "7.8.5", + "source-map-support": "0.5.21", + "tinyglobby": "0.2.17", + "vite": "8.1.5", + "watchpack": "2.5.2" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "lmdb": "3.5.6" + }, + "peerDependencies": { + "@angular/compiler": "^22.0.0", + "@angular/compiler-cli": "^22.0.0", + "@angular/core": "^22.0.0", + "@angular/localize": "^22.0.0", + "@angular/platform-browser": "^22.0.0", + "@angular/platform-server": "^22.0.0", + "@angular/service-worker": "^22.0.0", + "@angular/ssr": "^22.1.8", + "istanbul-lib-instrument": "^6.0.0", + "karma": "^6.4.0", + "less": "^4.2.0", + "ng-packagr": "^22.0.0", + "postcss": "^8.4.0", + "rollup": "^4.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "tslib": "^2.3.0", + "typescript": ">=6.0 <6.1", + "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 + }, + "istanbul-lib-instrument": { + "optional": true + }, + "karma": { + "optional": true + }, + "less": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "postcss": { + "optional": true + }, + "rollup": { + "optional": true + }, + "tailwindcss": { + "optional": true + }, + "vitest": { + "optional": true + } + } + }, + "node_modules/@angular/cdk": { + "version": "22.1.7", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-22.1.7.tgz", + "integrity": "sha512-TN4pPExBZ6ZbxWnfVb77M/0cL83eRY3qpHv/R9Y1KhkNXlxdocd0My7wiueWBBimYacSpBnfHrIRNmHgX7Pc4Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "parse5": "^8.0.0", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^22.0.0 || ^23.0.0", + "@angular/core": "^22.0.0 || ^23.0.0", + "@angular/forms": "^22.0.0 || ^23.0.0", + "@angular/platform-browser": "^22.0.0 || ^23.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/cli": { + "version": "22.1.8", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-22.1.8.tgz", + "integrity": "sha512-MFN/FydqDndai8vF12hDxG5RlBt1HUUheeJgJNmuHYIne4bOAfOT+xuMpIK8+gLSRwCemdqR3OMM38pnsFJ/nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.2201.8", + "@angular-devkit/core": "22.1.8", + "@angular-devkit/schematics": "22.1.8", + "@inquirer/prompts": "8.5.2", + "@listr2/prompt-adapter-inquirer": "4.2.5", + "@modelcontextprotocol/sdk": "1.30.0", + "@schematics/angular": "22.1.8", + "jsonc-parser": "3.3.1", + "listr2": "11.0.0", + "npm-package-arg": "14.0.0", + "parse5-html-rewriting-stream": "8.0.1", + "semver": "7.8.5", + "yargs": "18.1.0", + "zod": "4.4.3" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/common": { + "version": "22.1.7", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-22.1.7.tgz", + "integrity": "sha512-SLW4AdH2Y8G9SM/iFRNpCQtkmvq55RcIQWsADT9ypZ7FxxcnJRsr4Q/WnbUBbuCslsCkrgzU1i9WDiW0m7gcnw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/core": "22.1.7", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "22.1.7", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-22.1.7.tgz", + "integrity": "sha512-qhoHAByh805nT4Xy4Wd2kE5FvkTc7wcg8Qps+EH6+z4KRfwGiL5cwdgooGWjTAldFCeqTgJ0BO/0dB6GHZjdkQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + } + }, + "node_modules/@angular/compiler-cli": { + "version": "22.1.7", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-22.1.7.tgz", + "integrity": "sha512-VGg8Kyt0YymQfnUUFk79vFaM+x5xmIMHy+BZh3P2Lh/uxqCXTWhJJH8kOHKtIGGH5/wKhBEmSy2CezdcIuM9xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "8.0.1", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^5.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": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/compiler": "22.1.7", + "typescript": ">=6.0 <6.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@angular/core": { + "version": "22.1.7", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-22.1.7.tgz", + "integrity": "sha512-T9bt1PIgoN7n+TxGHTUgu0EsomlGMQ84YMXbMB+N6HhD8C1qZxn0uCbnAtCUjcecg1am8ioKxNTO0eII9ouioQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/compiler": "22.1.7", + "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": "22.1.7", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-22.1.7.tgz", + "integrity": "sha512-oc0DT39C3ZboJpDx8xKUCltgn56LHi0kbv+ThNK/dCSZLgjF2nd+muMMRYF+amdljQp2q7+hm2ORmhON3CNFog==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "tslib": "^2.3.0", + "zod": "^4.0.10" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/common": "22.1.7", + "@angular/core": "22.1.7", + "@angular/platform-browser": "22.1.7", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "22.1.7", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-22.1.7.tgz", + "integrity": "sha512-4dT3qGw3ZHVQUcHKALzMx9MTo+pxAMzHIPxc8HUESklqXfq6GRaIIfFMvE0RsquI9iqu6admD6lOAEzLWS8DxA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/animations": "22.1.7", + "@angular/common": "22.1.7", + "@angular/core": "22.1.7" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/router": { + "version": "22.1.7", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-22.1.7.tgz", + "integrity": "sha512-CxYa2Ym5L0WmqToHU2I0Z4VEpocdryLlvx5svLfo9M3uOaP3/9icB/gjS/vXPbbQxV8/GZ59E/7/LF14anIoRg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/common": "22.1.7", + "@angular/core": "22.1.7", + "@angular/platform-browser": "22.1.7", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.11.tgz", + "integrity": "sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/generational-cache": "^1.0.1", + "@csstools/css-calc": "^3.2.0", + "@csstools/css-color-parser": "^4.1.0", + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.8.1.tgz", + "integrity": "sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/nwsapi": "^2.3.9", + "bidi-js": "^1.0.3", + "css-tree": "^3.1.0", + "is-potential-custom-element-name": "^1.0.1", + "lru-cache": "^11.2.6" + } + }, + "node_modules/@asamuzakjp/generational-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/generational-cache/-/generational-cache-1.0.1.tgz", + "integrity": "sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/nwsapi": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", + "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/code-frame": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-8.0.0.tgz", + "integrity": "sha512-dYYg153EyN2Ekbqw2zAsbd6/JR+9N2SEoC7YV2GyyqMM7x9bLDTjBD6XBhSMLH0wtIVyJj03jWNriQhaN+eoCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^8.0.0", + "js-tokens": "^10.0.0" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-8.0.5.tgz", + "integrity": "sha512-YLsYoQMvL8l8WrGpN3Zj7O1wK5LEBN+cQtux7BcuHyxIXve724XG+zuJ1n3U1cUweRtTzQOA4IHbuQw3N34SZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/core": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-8.0.1.tgz", + "integrity": "sha512-5FgxM4dLQpMJHSiVATk8foW263dVHQHBVpXYiimNECVWG01f4nFyEbQixeT6Mwvg7TayREJ2gpKl3o2RoMdnqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^8.0.0", + "@babel/generator": "^8.0.0", + "@babel/helper-compilation-targets": "^8.0.0", + "@babel/helpers": "^8.0.0", + "@babel/parser": "^8.0.0", + "@babel/template": "^8.0.0", + "@babel/traverse": "^8.0.0", + "@babel/types": "^8.0.0", + "@types/gensync": "^1.0.5", + "convert-source-map": "^2.0.0", + "empathic": "^2.0.1", + "gensync": "^1.0.0-beta.2", + "import-meta-resolve": "^4.2.0", + "json5": "^2.2.3", + "obug": "^2.1.1", + "semver": "^7.7.3" + }, + "engines": { + "node": "^22.18.0 || >=24.11.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/generator": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-8.0.5.tgz", + "integrity": "sha512-f/TuhuMAxJqhwxEGNsJrswuG9VHmh0oNFoQoo6TbpgtFAz9wYZXcTAcWZMHfp7ljesr0RG04bp3Aos9GI59L7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^8.0.5", + "@babel/types": "^8.0.5", + "@jridgewell/gen-mapping": "0.4.0-beta.0", + "@jridgewell/trace-mapping": "^0.3.31", + "@types/jsesc": "^2.5.0", + "jsesc": "^3.0.2" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.4.0-beta.0", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.4.0-beta.0.tgz", + "integrity": "sha512-JdGNkbE4GlNPYQhM0L95fBQr7ctLZJ276QXQLTad4t1oSdnnCI3fDq9DW3BqYAWv8Wc3+HS+4Gsii1oPMCfz1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.6.0-beta.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-8.0.0.tgz", + "integrity": "sha512-NSpMkMsvvZqzThJ0p1B02cbtA2ObEyfBvq950bmNkyxsxvcxwhvvCB036rKhlEnuBBo30bOrk13u3FzlKSoRrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^8.0.0" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-8.0.5.tgz", + "integrity": "sha512-Qk8ahMGooH5mz6uuhoDvfZGkUf/Mf3RTBucVVl4MKx4LKMTv872TeW8O92h15iVtlN8wAROBIpI1aV6x1z0LCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^8.0.5", + "@babel/helper-validator-option": "^8.0.0", + "browserslist": "^4.24.0", + "lru-cache": "^11.0.0", + "verkit": "^0.3.2" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-8.0.0.tgz", + "integrity": "sha512-lLozHOM6sWWlxNo8CYqHy4MBZeTvHXNgVPBfPOGsjPKUzHC2Az9QwB6gxdQmpwHl6GlQtbGgS+lj5887guDiLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.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-split-export-declaration/node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration/node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-8.0.0.tgz", + "integrity": "sha512-6mJgmFFFIIO82vvoLt9XtRC7/TkzXfts1t/SpRX4IHSzMgqoPYCWesVu1udUPUWioAE/2fcG6WuI8zrkE1gwrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-8.0.4.tgz", + "integrity": "sha512-4wFaiLd0bVo4cIoTXI3zKI038NIWE/cr3jvBjejOVYVxV/m8Ltav1USiGzG1fmS5J2RhgEOgXNNK46cRPnRsrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-8.0.0.tgz", + "integrity": "sha512-U4Dybxh4WESWHt5XhBeExi4DrY0/DNK1aHpQbsrQXCUbFHuMweT0TpLEWKvaraV2Y6fS+ZXunsZ8zIuZIgvF2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/helpers": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-8.0.5.tgz", + "integrity": "sha512-fQtPOXjYOYv85PIdwotp2TJGVYOycX0PQq+l844fFAxOULtBy8BVF35GyeueX0r4KvDthqPH5xAI1clQPk/2uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^8.0.0", + "@babel/types": "^8.0.5" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/parser": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-8.0.5.tgz", + "integrity": "sha512-51RXvQNFakaS0bTpYiGkxNbUVwkPO4kONv6EVLorZABxsx+KZ6Z7uSYvi/wmKS/+X+rfj9RvOw0/ZNh+cmI0Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^8.0.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/template": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-8.0.0.tgz", + "integrity": "sha512-eAD0QW/AlbamBbw0FeGiwasbCVPq5ncW0HNVyLP3B9czqLyh4gvw+5JTSNt6le9+ziAU7mqDZsKTHf3jTb4chQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^8.0.0", + "@babel/parser": "^8.0.0", + "@babel/types": "^8.0.0" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/traverse": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-8.0.5.tgz", + "integrity": "sha512-XFfnuvapSc/vJOcUO7kwORSvpBIvraofKEZ2dhT0PjiF21BRCD7YbAFC8UEeDJNeLoQz82/gVqzgX5hCzkCbdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^8.0.0", + "@babel/generator": "^8.0.5", + "@babel/helper-globals": "^8.0.0", + "@babel/parser": "^8.0.5", + "@babel/template": "^8.0.0", + "@babel/types": "^8.0.5", + "obug": "^2.1.1" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/types": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-8.0.5.tgz", + "integrity": "sha512-eVdMqi3ej5aHhyQ2Si6yD2cAWeV8FJK9UrhK5aL0Sd8hu5GhT+YswhVNbVheOGVYMg8kuGuMaUpkB3stjj4z8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^8.0.0", + "@babel/helper-validator-identifier": "^8.0.4" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@bramus/specificity": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", + "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.0" + }, + "bin": { + "specificity": "bin/cli.js" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.1.1.tgz", + "integrity": "sha512-gLNsunvwf3mCi5u5o46/Z/JcJMnhbHSaZ69rkgPzNM3J4s8hWwpPUQB6/tt0EDFyCiWzxANlx+2LJwpYj4zS1w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@csstools/css-calc": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.4.0.tgz", + "integrity": "sha512-XQKj5B7QiZcHiegCOCAzcAOJdhGgWOHbbu62h5e5mkHnn8lWcfiJhllkqWmxu5zWR9jucPHuo1iTB56P033hcg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.2.3.tgz", + "integrity": "sha512-y4LpL+lmpuyKDiEFq2PnZUVFdAjsoB/qQJod79yLNokXyW7jewi+/WJ69EfItj8A2unWtxXnGjw6LYXgXu5ZjA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^6.1.1", + "@csstools/css-calc": "^3.4.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", + "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.14.tgz", + "integrity": "sha512-HpbVXyrofRXpHpgkNIjU/3EWR4WJvOkO3emNK/L6X/mTJU7bGUI3AkkpoTNXznQLp0KRjLHELTGeKI5dIkI9JQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "peerDependencies": { + "css-tree": "^3.2.1" + }, + "peerDependenciesMeta": { + "css-tree": { + "optional": true + } + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", + "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.2.tgz", + "integrity": "sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.2.tgz", + "integrity": "sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@exodus/bytes": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.1.tgz", + "integrity": "sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@noble/hashes": "^1.8.0 || ^2.0.0" + }, + "peerDependenciesMeta": { + "@noble/hashes": { + "optional": true + } + } + }, + "node_modules/@google/generative-ai": { + "version": "0.24.1", + "resolved": "https://registry.npmjs.org/@google/generative-ai/-/generative-ai-0.24.1.tgz", + "integrity": "sha512-MqO+MLfM6kjxcKoy0p1wRzG3b4ZZXtPI+z2IE26UogS2Cm/XHO+7gGRBh6gcJsOiIVoH93UwKvW4HdgiOZCy9Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@harperfast/extended-iterable": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@harperfast/extended-iterable/-/extended-iterable-1.0.3.tgz", + "integrity": "sha512-sSAYhQca3rDWtQUHSAPeO7axFIUJOI6hn1gjRC5APVE1a90tuyT8f5WIgRsFhhWA7htNkju2veB9eWL6YHi/Lw==", + "dev": true, + "license": "Apache-2.0", + "optional": true + }, + "node_modules/@hono/node-server": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.1.1.tgz", + "integrity": "sha512-ELuehkj5VCBdgEw9zs+ivkKwyzzUCSQuE96YmiPvn1ECBoZCczbFXJLeEGMTYjphP6gydh4pHMqEYPVMYUVgQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@inquirer/ansi": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.8.tgz", + "integrity": "sha512-WpQM+Ti6Z40EFwwt+uL2p4UabT+W179zHp6HhLVOzfbwnVn05IPO/eXIZXGNqcT1jbQ15SujNLzQ39k4QPPxBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.2.5.tgz", + "integrity": "sha512-bRt8J8m+Fot9CXv+zNQGXUq2ET0MggR1fPz7v6edN6MFYmsbfGnMmkmWZJEegMKqrAC8ej/o1sqisHZXZJMAfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/core": "^12.0.3", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/checkbox/node_modules/@inquirer/core": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.3.tgz", + "integrity": "sha512-wsSy0sznmXwkty+2PzZwx00Cazc/E0r0B7mAzdGROz2Ct+DFZXaK7WDjGZvgjRldxH5ZhFVfF2lgkYrqgOw2KA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.1.1.tgz", + "integrity": "sha512-eb8DBZcz/2qHWQda4rk2JiQk5h9QV/cVHi1yjt0f69WFZMRFn0sJTye3EAP8icut8UDMjQPsaH5KbcOogefrFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.2.1.tgz", + "integrity": "sha512-Qd6GJT1yVyrZZCfN8W2qKF5ApmqryXRhRKCuip8h01x2w/esJQ2XIYc6f9abMIHgKQdBfFTSOdbHRLAhuM09UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/figures": "^2.0.7", + "@inquirer/type": "^4.0.7", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.3.3.tgz", + "integrity": "sha512-YsKkS2q63IiLtaDK/9nqzdComN97SDQrmKiyNggN+ceP4ty+Z6VwyTz3FpjeUWeW1Efss2xHFKCC9sx7hnrsxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/external-editor": "^3.0.5", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor/node_modules/@inquirer/core": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.3.tgz", + "integrity": "sha512-wsSy0sznmXwkty+2PzZwx00Cazc/E0r0B7mAzdGROz2Ct+DFZXaK7WDjGZvgjRldxH5ZhFVfF2lgkYrqgOw2KA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.1.5.tgz", + "integrity": "sha512-uHuXLmXW+TtIfT/9vSBotypAkqn1n34Ul+CLGPos/xANyO4Ff5xZzkYhbKR4NEcfVK4a9mHQOpwVZzluSHFRGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand/node_modules/@inquirer/core": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.3.tgz", + "integrity": "sha512-wsSy0sznmXwkty+2PzZwx00Cazc/E0r0B7mAzdGROz2Ct+DFZXaK7WDjGZvgjRldxH5ZhFVfF2lgkYrqgOw2KA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-3.0.5.tgz", + "integrity": "sha512-f3QQJRIX5ZEneBHNUIuPjmbdzHnmRFJA8r2dkcb8q+OM5Uv5KtnuAttQumnrjcBVBM3mcTX1CkmtAkU58VRZxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.2" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.9.tgz", + "integrity": "sha512-EAWgUTGQ/Umgga51dE3B2PUHbufuXarDfg86uVgoSgNHNNQnyFKcOrQLWVqYMghuSyHh8+2HUH0Js9cTC1WAdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + } + }, + "node_modules/@inquirer/input": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.1.6.tgz", + "integrity": "sha512-HtcJhB2QFVXbLuJ5S3syhNbTUVxYvwqV4VRBDkQceBloC9bmTViUoRFP5PbSaDZb3HzfPmpuU/gG4ybVBz4FHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/input/node_modules/@inquirer/core": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.3.tgz", + "integrity": "sha512-wsSy0sznmXwkty+2PzZwx00Cazc/E0r0B7mAzdGROz2Ct+DFZXaK7WDjGZvgjRldxH5ZhFVfF2lgkYrqgOw2KA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.2.3.tgz", + "integrity": "sha512-6Yuwh1NGSbu1Lo4N1EWjXs1jKRntLg/ZCwhmeorEHde90v1XxAozdbd4Iu30eOQLW+6h1hp2O9ujNfLSbTPJnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number/node_modules/@inquirer/core": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.3.tgz", + "integrity": "sha512-wsSy0sznmXwkty+2PzZwx00Cazc/E0r0B7mAzdGROz2Ct+DFZXaK7WDjGZvgjRldxH5ZhFVfF2lgkYrqgOw2KA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.2.2.tgz", + "integrity": "sha512-W9zYdyzogK+6110mqwaSJWCBu2yA5Q/OfnGSjjZB1bNpHlmUozXxTl0+QOZBNeVd6Qo81/qT75gW05gLAtITxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password/node_modules/@inquirer/core": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.3.tgz", + "integrity": "sha512-wsSy0sznmXwkty+2PzZwx00Cazc/E0r0B7mAzdGROz2Ct+DFZXaK7WDjGZvgjRldxH5ZhFVfF2lgkYrqgOw2KA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.5.2.tgz", + "integrity": "sha512-IYR/3C/paEVVQYQvdDlFZVjRCJVYHHON0XXMH91KO9GSxs0TdKYWlUdvfQl2EfAHDxUaN3IBffkE/BDTh5nJ6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^5.2.1", + "@inquirer/confirm": "^6.1.1", + "@inquirer/editor": "^5.2.2", + "@inquirer/expand": "^5.1.1", + "@inquirer/input": "^5.1.2", + "@inquirer/number": "^4.1.1", + "@inquirer/password": "^5.1.1", + "@inquirer/rawlist": "^5.3.1", + "@inquirer/search": "^4.2.1", + "@inquirer/select": "^5.2.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.3.5.tgz", + "integrity": "sha512-1oHky1ONfCOwNrnkQGDE1oaSij/3fI6HFMSf2H/WsGO2lEyDX9My82iggITSy9ddSZ8yk8j9v41OI0fVoSIoaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist/node_modules/@inquirer/core": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.3.tgz", + "integrity": "sha512-wsSy0sznmXwkty+2PzZwx00Cazc/E0r0B7mAzdGROz2Ct+DFZXaK7WDjGZvgjRldxH5ZhFVfF2lgkYrqgOw2KA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.3.3.tgz", + "integrity": "sha512-fyuIU1Nbpvwlikjg3gXwJFDI11+EFjqQ7P+iByfmivIKQ1vmaykNrD/vy5unHuUqUpsOsnvJ25//tPF7E/RBRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search/node_modules/@inquirer/core": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.3.tgz", + "integrity": "sha512-wsSy0sznmXwkty+2PzZwx00Cazc/E0r0B7mAzdGROz2Ct+DFZXaK7WDjGZvgjRldxH5ZhFVfF2lgkYrqgOw2KA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.2.5.tgz", + "integrity": "sha512-9kc15hr8r/kI+3DO/xLog5nOzTz1jqsHXa6JBFzmQKhkoJ8Slda1I1L/uD8ZSZ9tF1yp79wwXe7mclvX1rqR2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/core": "^12.0.3", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select/node_modules/@inquirer/core": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.3.tgz", + "integrity": "sha512-wsSy0sznmXwkty+2PzZwx00Cazc/E0r0B7mAzdGROz2Ct+DFZXaK7WDjGZvgjRldxH5ZhFVfF2lgkYrqgOw2KA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.1.1.tgz", + "integrity": "sha512-yJoHYrMnxIsJZCY+0Vb66Dy3he3kL3e2wOBKhoSwWWAzZAY82emlxwgprCtp6yRixvNRNq9ztfRWQYPNr3Go7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "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.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "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": "4.2.5", + "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-4.2.5.tgz", + "integrity": "sha512-pYGy9dTdTwXdasPgyohkr0HoQ4FrkAzFnsUZl/gcnadDArbpZ8e+fgr+F9WBdNEl2y00mb9bCM4WgmoBkZJ27A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=22.13.0" + }, + "peerDependencies": { + "@inquirer/prompts": ">= 3 < 9", + "listr2": "11.0.0" + } + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.5.6.tgz", + "integrity": "sha512-mY5FG4TjPAkY4P0w+OhHaUka5mDh2TX2WKYIwuKzJ1zeW3VvRgxdam/lGJTquI+bthTx5CSHDW+BAQCnNAzkEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.5.6.tgz", + "integrity": "sha512-foa+pwitysO8k+xhs7psBFfTKnVgR69NlZRRTHaFVDqphh7AdGpLeyRzKw/ofatr/sN6TiHRRW6mmop0ZrrppQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.5.6.tgz", + "integrity": "sha512-QR4YRyR5h5Z8eGXrNQjiyo2NNDfqi3tCc9dQG5Is1blCt+qWw1ZoBWhlWAr5d+jshkifMIJjVHzHGKbkKzF8Tw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.5.6.tgz", + "integrity": "sha512-HmiyFFdJa38s1heCMSooSPaBSFTHJ3C+ERPp28xAPlDX1YiALJVOgbry065nXd8Y7KISWjnw05zpG1RX8IfftA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.5.6.tgz", + "integrity": "sha512-ADzCuCF2cTNiX9kDScqcz1fjnAkxPpQNneV3KFTdV3wWtVlI2sTGzySoMTgDpinkMMFj1NTJlxA6XR8fwc4hlA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-arm64": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.5.6.tgz", + "integrity": "sha512-J7A9aEQsQiv0TYtBGL7NDIPp2lOS8nnl+zm4sWZm1xlsTTaQ4PgD096Adzdrk27rw3UxCkDXdCUa4ax41oztBQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.5.6.tgz", + "integrity": "sha512-1g7G0knRX2iV/voDu54yxrGqw5Dk0w2oIYb7dgJq8IkOi+m7wbD8Q3QpPFjh0C01G58S88dqGn03len6UPCXsg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.30.0.tgz", + "integrity": "sha512-xKd8OIzlqNzcqcNumGAa6g+PW2kjD5vrpcKOnfldAUPP3j7lnqMPwlTXQm8gF+UwH72z0lqaRbjr9hqGz0eITA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@hono/node-server": "^1.19.9 || ^2.0.5", + "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.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" + }, + "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.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.4.tgz", + "integrity": "sha512-LCkGo6JDfaBhgST7UpPWgNgLINpcpabaHfyz5OBx75nUYxBsaEPxjnyNjWpeb/xBup/682QnBfRBy2/LvPutZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.4.tgz", + "integrity": "sha512-zExlW9zUJKZH/tOtVMttwjKa4Xm/3KcNjnE3dPN92uCktwavMxpgCA3MoJK/DOnTWsQgo224OaST27/mPNAf+w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.4.tgz", + "integrity": "sha512-Tg3yX65f5GbtXLkrYEHE5oibZG9epyYWas7FogTTEJeDEF9JlXJzKgXaNhT3UXlTOeA+AfZpYZYZ0uPj7Cfquw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.4.tgz", + "integrity": "sha512-dgX0P/9wGPJeHFBG+ZmhgE6bmtMt7NP5CRBGyyktpopdk/mW4POnrpQsSLtKI1dwpc+pPLuXHDh6vvskyQE/sw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.4.tgz", + "integrity": "sha512-8TNXMEjJc3QEy7R/x1INhgiU+XakDAFUzBhaz7+Rbrs8NH5UQeHQxxmzsSBJGyV6I1jW79undiQm8tOI+D+8FQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.4.tgz", + "integrity": "sha512-CmCXPQrkbwExx3j946/PtHWHbYJiCRBRDl4BlkRQcJB/YOwQxJRTpoo7aTsortjgoJ1x7opzTSxn7C+ASSLVjQ==", + "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, + "libc": [ + "glibc" + ], + "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, + "libc": [ + "musl" + ], + "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, + "libc": [ + "glibc" + ], + "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, + "libc": [ + "glibc" + ], + "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, + "libc": [ + "glibc" + ], + "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, + "libc": [ + "glibc" + ], + "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, + "libc": [ + "musl" + ], + "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.2.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.4.tgz", + "integrity": "sha512-AJxoUD2/15ESHbvpcyjU274nsAPLuOtPHCk0vKJM5pj//Fg/B1FXNWjPnXTT9PymCYYiHo4zPj0ZomXBKhoy7g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=23.5.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", + "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" + } + }, + "node_modules/@oxc-parser/binding-android-arm-eabi": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm-eabi/-/binding-android-arm-eabi-0.142.0.tgz", + "integrity": "sha512-ZiRGDutGsv1G6bL/ozy/koC0Sv39T1DqyoC4KD1DOy9ZoACm1O5UWhEK2c02Qdk+4lfLVkvFa/mQ0fm/4h1BtQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-android-arm64": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.142.0.tgz", + "integrity": "sha512-WZkvGRLNQTz8lR9zP5nLjUdlroRCopBu3g9zF1p/laE6DzT1UbQo8Rdz5MWhaJUPYg/6gp+jo7HUgsyKaN1FtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-darwin-arm64": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.142.0.tgz", + "integrity": "sha512-l4khS8LQOOVYsGRVARo1gSaCT/aBSceUVXgtovWc2+drnxVuDr082WA3OCHVdVzIz5JIrP/y9CWsSKxBDNmYGg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-darwin-x64": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.142.0.tgz", + "integrity": "sha512-QBsNF3nqlXmcH2B1YOPqQYmCJoy4HuIjUxGbBO/k5JAJUl68ghU2psRY2zPk+RyBaWqKP/qfL4oaFgEMCdwskA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-freebsd-x64": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.142.0.tgz", + "integrity": "sha512-b7Q7m4Cqc6XqNhri3R+QhU+GVy646Pn+bkdhrDdWym/Fdi0ZUa+d73H9dm5H91JtbtAQ/z1d8XKMW3oOV8a4tQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm-gnueabihf": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.142.0.tgz", + "integrity": "sha512-3riVS5IhdH3uCZj1Y9ftDQlR0dvLsIlw/edrRqk8JhgNd5K0XSs+UBtgh50N13CAlW9/TXj6sVGXaKNBocd0Yg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm-musleabihf": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.142.0.tgz", + "integrity": "sha512-NmXUOpgpTSkhl795TiXmWppTwmSJ92RC1qvD6e4XOF+slgmo3e6Ah+kEu+6AN8s7NAOEwqGmir58MgSQSWmBSA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm64-gnu": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.142.0.tgz", + "integrity": "sha512-gc0EXsKtXgerujmU2Bql3u1L1HsSQ2774R83idq/FoNMPVV/RY/1ErFsvnit7KoiP/sLvzQixeUo4Ut0ic0wmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm64-musl": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.142.0.tgz", + "integrity": "sha512-F2XvmWSE0uWpie+jHKKIFgdVOe9ypGhkEZxKx5DuW215K6cbAC274yYaPkcM7EqY4Df3Weyhpcz3lsURyH2LVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-ppc64-gnu": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.142.0.tgz", + "integrity": "sha512-wLMbT21U/QxknQsk+VvNF0b9D2/aGWhcaQQQ+VYlE8FwD5+GoWZIPPXNzyHmkYyhm0KB3itL+TBavjMatqNnYA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-riscv64-gnu": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.142.0.tgz", + "integrity": "sha512-+G8F/4ckwT7FCJV4H2bt09xEzJbjNCfuL4Sp1AYNaFtFMVtgIGMuJlteT82U+K0UIZ/DzAR/LDlMFnEuajG7Kw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-riscv64-musl": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.142.0.tgz", + "integrity": "sha512-hTsHtTLxMAfCo+rpF5K3qZJKW2NpPN/CHd4mYB3y7XlSdspHkd2gehDIofP64AacA9nWQw2tY3O7wR6UY8IVOA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-s390x-gnu": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.142.0.tgz", + "integrity": "sha512-6y7qYY3TCUDYjqswImdTGl92y+KA/80twALegQPN27kfY+bG7Ib1+L3jbmrCZQx6wrVnai9IPsEZp07I0hx7JQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-x64-gnu": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.142.0.tgz", + "integrity": "sha512-i69kAWU+2LgoH5bR+zWiiu+UzAw7Oxkwv7COeJTeY19pn4e70nKQcr9Pm6cL2Z0Z54d+gl9qADlK/0yyuCPiBA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-x64-musl": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.142.0.tgz", + "integrity": "sha512-4SQs678MmjYVrmhAgCWD4o0vpaFszXw9xLX5p2Z9MMFcltxiLkA88wQjh80YHjPrXtpyZ2CWI5m+1yNKM0m2Pw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-openharmony-arm64": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-openharmony-arm64/-/binding-openharmony-arm64-0.142.0.tgz", + "integrity": "sha512-YHpx9N7Ln3a++Tc8rv+H7mrK1zyJQOAwCFg8LZ3lTs1T5afGWeZrLPhPT9HLnIwSjCyJqPWVMIrMxbjcmBr2oQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-wasm32-wasi": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.142.0.tgz", + "integrity": "sha512-3pLDyY3+oogW73RM5uehNgAiR/Xfb7fvO2Q1Z1gIqZ2+50XDVQmBVlRkHXZTU4gKnQHpwETNsYQVsJ3joVB2iA==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.2", + "@emnapi/runtime": "1.11.2", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-win32-arm64-msvc": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.142.0.tgz", + "integrity": "sha512-Had/VeVY28Oyb0K+Q4FV8KCzoBycIh93oDK6pCbya9lkzdq+ikMHMgBubsdqqlybjJmQRawCQRrnBRHyQwYvcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-win32-ia32-msvc": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.142.0.tgz", + "integrity": "sha512-GGi3+YphVHavvgs6gum2UXoNCqzHAmPt/nXkn8ZQZstV2Q1qZD1Mn8fz/nWrDkefHQtrG/+1/XrbMxsBTo6Svw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-win32-x64-msvc": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.142.0.tgz", + "integrity": "sha512-Ny/Wv4Us1LGC/ljwNTp+Hx3r/pH15EFfeDF0p+n898gt+TtRd6C9SccHcuUhDiNTb8s5tt7jdeAMDRQZ4Vq6hg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.142.0.tgz", + "integrity": "sha512-7W+2q5AKQVU36fkaryontrHn3YDt1RyUYXatw9i5H8ocYe2sPKSFB6eS8WNPeRKiN1qAWWZUPm7gwFzJGrccqQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz", + "integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.6.0", + "@parcel/watcher-darwin-arm64": "2.6.0", + "@parcel/watcher-darwin-x64": "2.6.0", + "@parcel/watcher-freebsd-x64": "2.6.0", + "@parcel/watcher-linux-arm-glibc": "2.6.0", + "@parcel/watcher-linux-arm-musl": "2.6.0", + "@parcel/watcher-linux-arm64-glibc": "2.6.0", + "@parcel/watcher-linux-arm64-musl": "2.6.0", + "@parcel/watcher-linux-x64-glibc": "2.6.0", + "@parcel/watcher-linux-x64-musl": "2.6.0", + "@parcel/watcher-win32-arm64": "2.6.0", + "@parcel/watcher-win32-x64": "2.6.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz", + "integrity": "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==", + "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.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz", + "integrity": "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==", + "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.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz", + "integrity": "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==", + "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.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz", + "integrity": "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==", + "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.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz", + "integrity": "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "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.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz", + "integrity": "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "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.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz", + "integrity": "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "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.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz", + "integrity": "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "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.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz", + "integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "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.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz", + "integrity": "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "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.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz", + "integrity": "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==", + "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-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz", + "integrity": "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==", + "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/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/@primeicons/angular": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@primeicons/angular/-/angular-8.0.1.tgz", + "integrity": "sha512-Wu6xWzyt3VPIWj9vr9NFkUwUDY2VblQ7cg6N2bYS3CZkK/sbs9xiJMZE3SwHgosRnyh1ourGW3rn8IMF0YyxWA==", + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "@primeicons/core": "8.0.1", + "@primeuix/utils": "^0.8.0", + "tslib": "^2" + }, + "peerDependencies": { + "@angular/core": ">=21" + } + }, + "node_modules/@primeicons/core": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@primeicons/core/-/core-8.0.1.tgz", + "integrity": "sha512-KJ5j8h4KVbl7lX0UosENk8d8N43GGj7H7ICyCUV8re+VdduE69bYlxfaCtM2KRdpoy45eu4JiZgT5P1Mh2JNpg==", + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "@primeuix/utils": "^0.8.0" + } + }, + "node_modules/@primeui/license-manager": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@primeui/license-manager/-/license-manager-1.1.0.tgz", + "integrity": "sha512-irjhOGs6Xjwh1JhMyXtdUsYCsve6kBySZzDUhS/mWxsjwQm/wSN7oulyP/f5huJKdhZSzaN6rVApwpp4nDWE1g==", + "license": "SEE LICENSE IN LICENSE.md" + }, + "node_modules/@primeuix/motion": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@primeuix/motion/-/motion-1.0.0.tgz", + "integrity": "sha512-rqpFRKmUVp9BI3YQKdok0rLUwzYShXzuuxy72Kq74xYRV14eR+4+XrIXOdyVs7j7CYV0ajYowiRpJCrVgdrq6A==", + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "@primeuix/utils": "^0.8.0" + }, + "engines": { + "node": ">=12.11.0" + } + }, + "node_modules/@primeuix/styled": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@primeuix/styled/-/styled-1.0.0.tgz", + "integrity": "sha512-6SXoeQWwKswSqTv1ygaXNfY7otHo6Rb9mxbKJK5WF8adWlZ6CtwmlNfIP+p8cH/zGccsei/5Bu7IetXlMoZGjQ==", + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "@primeui/license-manager": "^1.0.0", + "@primeuix/utils": "^0.8.0" + }, + "engines": { + "node": ">=12.11.0" + } + }, + "node_modules/@primeuix/styles": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@primeuix/styles/-/styles-3.0.1.tgz", + "integrity": "sha512-imoAB/1DxoqKyo7WpML78VVNgNeuSranI9JNSwLD/BhtLZrXh4FLZz0uGLK2lM85opUPJ5cS2ZmBD/+dJ2sm5A==", + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "@primeuix/styled": "^1.0.0" + } + }, + "node_modules/@primeuix/themes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@primeuix/themes/-/themes-3.0.1.tgz", + "integrity": "sha512-UmHzvA16DKb3dcE+2J8NbgK6eI5zFJQbCaNBW1YyY+ADZEVId4H275TPTcwlZ/8ywt0AFpunEPiyLQE1oub9pA==", + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "@primeuix/styled": "^1.0.0" + } + }, + "node_modules/@primeuix/utils": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/@primeuix/utils/-/utils-0.8.2.tgz", + "integrity": "sha512-4Cz5HY1XHqJwhq1ieml6l5IDkWt41Amdw/t2rAQxNXv7WwAhgb8QrnjJM6scW9h1D0PjQgm9Z3RgNlWCU+WZng==", + "license": "SEE LICENSE IN LICENSE.md", + "engines": { + "node": ">=12.11.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.0.tgz", + "integrity": "sha512-9yB1l95IrJuNGDFdOYe79vdApdz6WWBCObE+rQ2LUliYUlcyFwSYIb2xb5/Ifw7dAtMy2ZqNyd8QTSOc7duAKw==", + "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.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.0.tgz", + "integrity": "sha512-pexNaW9ACLUOaBITOpU6qVu4VrsOFIjTv6bzgu0YUATo4eUJx0V605PxwZfndpPOn0ilqGqvGQ0M8UW0IE24jg==", + "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.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.0.tgz", + "integrity": "sha512-NqKYaq0355ZmNMG4QGpxtEDxsc7tGDhjhCm4PpE0cwnBW+5Il95LJyq414niEiaKLVjnVHBEjSo1wngKxJNiFw==", + "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.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.0.tgz", + "integrity": "sha512-3vPoHzh6eBTz9IbB0/qZdSr0Qeks2echn+I4cHu2joV74VriPDdldswksEDzrl1mBB+oPRi+67+3Ib59paxIPQ==", + "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.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.0.tgz", + "integrity": "sha512-E6NNefZ1bUVmKJq2tJkf45J4Zyczj7qm9rUT7NY+Xo2474Y13qWAwc2tvBt0BAVbmtXR1llkxXg0Ou1jbDf2SQ==", + "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.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.0.tgz", + "integrity": "sha512-D+TgkdgM1vu+7/Fpf8+v0ARW+RXEP9Ccazgm8zQ4JFFd9Q7SrYQ2TakU5S5ihazQDgpKyAgZDOcIFsvoHmTZ8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.0.tgz", + "integrity": "sha512-wUqdwJBbAv0APN87GecstdMUtLjjNTs0hBALpxETD73mccFxdmt/XeizXDtN5RAlBwNKmI+Tg+blect2G+8IeQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.0.tgz", + "integrity": "sha512-9DtF35qR9/NrfhM4oxLplCzVVjE+KKm8Pjemi0i/sdhAWkUasjmSo8WTTubNJClhSHCfyk2yeyoXDQEDPtDAAw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.0.tgz", + "integrity": "sha512-RzuHrBh8X8Hntd2N4VR02QGEciq/9JhcZoTpR/Cee6otRrlILGCf3cg2ygHuih+ZebUnWmMrDX6ITI85btO6rQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.0.tgz", + "integrity": "sha512-MK7L0018jjh1jR3mh21G2j1zAVcpscJBlPo2z19pRjv2XOYGRhaV4LyiD8HO6nCDdZln9IFgCMIV5yt4E3klGQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.0.tgz", + "integrity": "sha512-gyrxLQ9NfGb/9LoVnC4kb9miUghw1mghnkfYvNHSnVIXriabnfgGPUP4RLcJm87q3KgYz4FYUG8IDiWUT+CpSw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.0.tgz", + "integrity": "sha512-/6VFMQGRmrhP77KXDC+StIxGzcNp5JOIyYtw0CQ8gPlzhpiIRucYfoM5FaFamHd5BJYIdH86yfP46l1p3WdrFA==", + "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.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.2.0.tgz", + "integrity": "sha512-rwdbUL465kisF24WEJLvP3JrEG6E5GRuIHt5wpMwHGERtHe4Wm2CIvtf5gTBgr2tGOHKh5NdKEAFS2VkOPE91g==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.2", + "@emnapi/runtime": "1.11.2", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.0.tgz", + "integrity": "sha512-+5suHwRiKGmhwyUaNT8a5QbrBvLFh2DbO910TEmGRH1aSxwrCezodvGQnulv4uiWEIv1Kq4ypRsJ5+O+ry1DiA==", + "cpu": [ + "arm64" + ], + "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.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.0.tgz", + "integrity": "sha512-WfFv6/qGufotqBSBzBYwgpCkJBk8Nj7697LL9vTz/XWc67e0r3oewu8iMRwQj3AUL45GVD7wVsPjCsAAtW66Wg==", + "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.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@schematics/angular": { + "version": "22.1.8", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-22.1.8.tgz", + "integrity": "sha512-V37T9uHOQVHyxxOqwcJ9xjSIW/mW9UuSfjOc7WJE4V8+3zj0abDJLHuoxDZKe0icYGapgOcvHyYjtNOjSeSivw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "22.1.8", + "@angular-devkit/schematics": "22.1.8", + "jsonc-parser": "3.3.1", + "typescript": "6.0.3" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.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/@tailwindcss/node": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.3.tgz", + "integrity": "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.24.1", + "jiti": "^2.7.0", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.3" + } + }, + "node_modules/@tailwindcss/node/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/@tailwindcss/oxide": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.3.tgz", + "integrity": "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-x64": "4.3.3", + "@tailwindcss/oxide-freebsd-x64": "4.3.3", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.3", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-x64-musl": "4.3.3", + "@tailwindcss/oxide-wasm32-wasi": "4.3.3", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.3.tgz", + "integrity": "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.3.tgz", + "integrity": "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.3.tgz", + "integrity": "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.3.tgz", + "integrity": "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.3.tgz", + "integrity": "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.3.tgz", + "integrity": "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.3.tgz", + "integrity": "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.3.tgz", + "integrity": "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.3.tgz", + "integrity": "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.3.tgz", + "integrity": "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.11.1", + "@emnapi/runtime": "^1.11.1", + "@emnapi/wasi-threads": "^1.2.2", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.2", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz", + "integrity": "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.3.tgz", + "integrity": "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.3.3.tgz", + "integrity": "sha512-JTSZZGQi1AyKirbLN3azmjVzef92tcX7h+iSqPdaeStyFpGpDlKvvpxeOE8njhbUanbRwr3z8DyzhICWnMtQeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.3.3", + "@tailwindcss/oxide": "4.3.3", + "postcss": "^8.5.16", + "tailwindcss": "4.3.3" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.4.tgz", + "integrity": "sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/gensync": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/gensync/-/gensync-1.0.5.tgz", + "integrity": "sha512-MbsRCT7mTikHwKZ0X+LVUTLRrZZRLipTuXEO9qOYO+zmjMVk81axyClMROf6uoPD9MRVu46bx8zoR0Ad9q3NAg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jsesc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@types/jsesc/-/jsesc-2.5.1.tgz", + "integrity": "sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.3.0.tgz", + "integrity": "sha512-bdyo8rB3NnQbikdMpHaML9Z1OZPBu6fFOBo+OtxsBlvMJtysWskmBcnbIDhUqgC8tcxNv/a+BcV5U+2nQMm1OQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@vitest/expect": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.11.tgz", + "integrity": "sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.11", + "@vitest/utils": "4.1.11", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.11.tgz", + "integrity": "sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.11", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker/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/@vitest/pretty-format": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.11.tgz", + "integrity": "sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.11.tgz", + "integrity": "sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.11", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.11.tgz", + "integrity": "sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.11", + "@vitest/utils": "4.1.11", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/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/@vitest/spy": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.11.tgz", + "integrity": "sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.11.tgz", + "integrity": "sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.11", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils/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/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/agent-base": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-9.0.0.tgz", + "integrity": "sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "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/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "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.3.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", + "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", + "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/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.24", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.24.tgz", + "integrity": "sha512-hYrgxie335U08WqICoGqKRzV1HFXv6zdxwJE4ekCb80CM9a0SVVsN4QPwT67RraRo+9h8IATk6uxHJw7QSkdOg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/beasties": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.4.3.tgz", + "integrity": "sha512-fIIeLOcbAB/K1kb1HBVJoiq1alHL4RCYBSo5e7HzrNkkgMggXR1Vqt/Z9JWnkfe/qdCo66Ux3QRwZioAIBdWRA==", + "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", + "postcss-safe-parser": "^7.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/bidi-js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.1.0.tgz", + "integrity": "sha512-fX1Onk0tdVPC7obPWB5EbJ1z7NVhLq4m2xZLq2YXBkxzMXIGRpNMU88n0EPgWseKl12J7zXs7qrDxPK4sRs2fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/body-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^2.0.0", + "debug": "^4.4.3", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", + "on-finished": "^2.4.1", + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "dev": true, + "license": "MIT", + "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/browserslist": { + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.0.tgz", + "integrity": "sha512-3GSvyjvDI4Dur1Meg2BekJquu5uF+9R9a1+5M1Mde192eZoXbeXjzgOsgqPS2V8D5wrrip0gR5Hf/GhWQ9ZzaA==", + "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": { + "baseline-browser-mapping": "^2.11.23", + "caniuse-lite": "^1.0.30001810", + "electron-to-chromium": "^1.5.427", + "node-releases": "^2.0.55", + "update-browserslist-db": "^1.3.3" + }, + "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/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.30001810", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", + "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==", + "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/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.2.0.tgz", + "integrity": "sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "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.4.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.4.0.tgz", + "integrity": "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-6.1.1.tgz", + "integrity": "sha512-06p9vyLahLa4zkGcgsGxU6iEkSOiuI4fhCH6Emhe2lPAcoUv73n72DnODsnHA+5wwXGnV0n9M9/qOQJSjYhFhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^9.0.0", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=22" + }, + "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/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "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/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.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/cssstyle": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-6.2.0.tgz", + "integrity": "sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^5.0.1", + "@csstools/css-syntax-patches-for-csstree": "^1.0.28", + "css-tree": "^3.1.0", + "lru-cache": "^11.2.6" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/data-urls": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", + "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "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/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "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/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", + "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/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.430", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.430.tgz", + "integrity": "sha512-e1QEj72Y4zd8RlNZVmoTg+iCOSVwpk05IOiiQwdrkwCSVlZfPthevErhE+nckGd2YbsXfp1SkisznhGVIXP2NQ==", + "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/empathic": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.1.tgz", + "integrity": "sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "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/enhanced-resolve": { + "version": "5.25.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.25.1.tgz", + "integrity": "sha512-nGXts5znJzmWPu+mIE9izCOzdg63oJca2mDzGWWTth7sr4aCToKcoyFVBQwN75Ij5Pf6p510EwkTqViTRzDV+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.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/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/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-module-lexer": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz", + "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" + } + }, + "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": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "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/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.1.1", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.1.tgz", + "integrity": "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.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", + "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": "8.7.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.7.0.tgz", + "integrity": "sha512-hOwV7WOxXfjRpAM1DSJWZDXx3GhplwD8IfwuwvogD8i1Qnkgosw/H45s4ZnFAUHDAhPjlY9hLBvJhKmGMyY26g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "ip-address": "^10.2.0" + }, + "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-string-truncated-width": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", + "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-string-width": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz", + "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-string-truncated-width": "^3.0.2" + } + }, + "node_modules/fast-uri": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz", + "integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fast-wrap-ansi": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz", + "integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-string-width": "^3.0.2" + } + }, + "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/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/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/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.7.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.7.0.tgz", + "integrity": "sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==", + "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/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.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hono": { + "version": "4.13.8", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.8.tgz", + "integrity": "sha512-/Gng7NfoykZl2pjukW5Z6+8Yxm3BPRf86GTbQnt0SbySkvax4fyL4H3HhY1cCpBGmiW9XDRFzRV+CXK2W8QudQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/hosted-git-info": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-10.1.1.tgz", + "integrity": "sha512-DeOnSPAvOndYKfw075gt8yZzQ7S2hNztw34zBTfhIzLhmBTswIBg5/y+pqu/VD5cYWm5goAFTusDmUEmKZ0PEQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^11.1.0" + }, + "engines": { + "node": "^22.22.2 || ^24.15.0 || >=26.0.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", + "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.6.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "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.2", + "entities": "^7.0.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "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/http-proxy-agent/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/https-proxy-agent": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-9.1.0.tgz", + "integrity": "sha512-ag87y7cJJ9/3+GxFr8Oy4O5faDsGRGnBGsJj/YjOSsSx/5eadKLYTMPlzuR6obgoCDDm0abAAZitXXQkMOPSpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4", + "proxy-agent-negotiate": "1.1.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "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/immutable": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", + "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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/ip-address": { + "version": "10.7.2", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.2.tgz", + "integrity": "sha512-7H/2gFSIitxc0hG3nOI1glS8QLo/EHBFFLk8vEUjXY/xu0AdL8jZ9U1IzO2PUm0d2D/ofQcAifb0g6OBkt8U7w==", + "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-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-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "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/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/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/jose": { + "version": "6.2.12", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.12.tgz", + "integrity": "sha512-9NiFmJEex0sy2Dk58j2UGBSHgUs2ypF9eZSu4L6vjOX3Dp96Sw1F3uL+H+D1sx02jZZdzUT0HgvCy59CuvXcWw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-tokens": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", + "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-28.1.0.tgz", + "integrity": "sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@acemir/cssom": "^0.9.31", + "@asamuzakjp/dom-selector": "^6.8.1", + "@bramus/specificity": "^2.4.2", + "@exodus/bytes": "^1.11.0", + "cssstyle": "^6.0.1", + "data-urls": "^7.0.0", + "decimal.js": "^10.6.0", + "html-encoding-sniffer": "^6.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "parse5": "^8.0.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^6.0.0", + "undici": "^7.21.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^8.0.1", + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/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/jsdom/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/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-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/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "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/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/listr2": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-11.0.0.tgz", + "integrity": "sha512-8K88S0aSrcSXdJfiZtEy5BQMnR+TyjrCGLcgAvQs6ta0NEnIm0RJ72/Pv67Jvg07cfBhDbuN74V81lSSVYEFEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^6.1.1", + "log-update": "^8.0.0", + "wrap-ansi": "^10.0.0" + }, + "engines": { + "node": ">=22.13.0" + } + }, + "node_modules/lmdb": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.5.6.tgz", + "integrity": "sha512-j3uE8ReKNyUWDjhfEFSJqE/1DLtfTR5Z8yFzVHvBjAk37wNg7HdScjcv8ttPHRvrdgPQMPWxFFI0SsdBzI5lBw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@harperfast/extended-iterable": "^1.0.3", + "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.5.6", + "@lmdb/lmdb-darwin-x64": "3.5.6", + "@lmdb/lmdb-linux-arm": "3.5.6", + "@lmdb/lmdb-linux-arm64": "3.5.6", + "@lmdb/lmdb-linux-x64": "3.5.6", + "@lmdb/lmdb-win32-arm64": "3.5.6", + "@lmdb/lmdb-win32-x64": "3.5.6" + } + }, + "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": "8.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-8.0.0.tgz", + "integrity": "sha512-lddSgOt3bPASrylL54ZSpy8nBHns+vBVSoILlVOx+dei300pnLRN958rj/EdlVLKuWlSESU3qdnDZdAI7FXYGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.3.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^9.0.0", + "string-width": "^8.2.0", + "strip-ansi": "^7.2.0", + "wrap-ansi": "^10.0.0" + }, + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/magic-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.0.0.tgz", + "integrity": "sha512-CGvjzMN08iv6w1mm4/x3Gh1hLb4VnyRUA15FFpl6CsCIGGoe36k7kY5KNz9QDbSBN5I/fWHM6ZlIkUTa5xdUEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "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.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz", + "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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/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/moment": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.31.0.tgz", + "integrity": "sha512-0acOTfMiWOheYS4eoWb80yYMb/JLvVv9SHbs2PehaDzfUG0Bw855SKyk0IKTnPGa5+U2bmi3W68l1+sGLX/pvw==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "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.12.1", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.12.1.tgz", + "integrity": "sha512-4EUH9tQHnMmEgzW/MdAP0KIfa1T9AF+htl0ffe2n5vb2EKn9y2co8ccpgWko6S52Jy1PQZKwRnx5/KkYjtd9MQ==", + "dev": true, + "license": "MIT", + "optional": true, + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.4.tgz", + "integrity": "sha512-4kmO/MdyUIkLIvTPr8VHLil4AtoKIoniWPIEk5+CDy0xnWC84azhSFmuJ7PxZdsYtiP5kEeQsORAVIeMgxT+Hw==", + "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.4", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.4", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.4", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.4", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.4", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.4" + } + }, + "node_modules/mute-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-3.0.0.tgz", + "integrity": "sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.19", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", + "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", + "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/negotiator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.1.0.tgz", + "integrity": "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/negotiator/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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-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-releases": { + "version": "2.0.55", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.55.tgz", + "integrity": "sha512-mIrE/Cw9y+9Au6dS5vDKDhQza9YvG6w+ZrS6X+ZzA7yFW/soAeaups4Qzn1bL6g5FVy8WtP79+0j82oPIbqRjQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm-package-arg": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-14.0.0.tgz", + "integrity": "sha512-69XQh3k+dtGa1p+7RaR57IuG3rCko96xr/nUfN4yDYBXbTYICiWcOpsFKLN2GtGE9cyIljE+f1exnaYt9MvM+Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^10.1.0", + "proc-log": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^8.0.0" + }, + "engines": { + "node": "^22.22.2 || ^24.15.0 || >=26.0.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/obug": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.2.1.tgz", + "integrity": "sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "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.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-9.4.1.tgz", + "integrity": "sha512-6VlU9MLXbjVQD04AZCMX28hVtA5bUoadvUqO76MUCVA0ilwJbMiHsITRPfyVm6p/BC0Av/BXMujx39WCe1LEqw==", + "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.3.2", + "string-width": "^8.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ordered-binary": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.1.tgz", + "integrity": "sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/oxc-parser": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.142.0.tgz", + "integrity": "sha512-kKR+jPiRJYJDexVoziIg/FVGvr1fT1FZSSJOk6tVoMKKSlsf1Cso+cgGCJkOEDWOP174vRntCPFKg+AS7InWvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "^0.142.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxc-parser/binding-android-arm-eabi": "0.142.0", + "@oxc-parser/binding-android-arm64": "0.142.0", + "@oxc-parser/binding-darwin-arm64": "0.142.0", + "@oxc-parser/binding-darwin-x64": "0.142.0", + "@oxc-parser/binding-freebsd-x64": "0.142.0", + "@oxc-parser/binding-linux-arm-gnueabihf": "0.142.0", + "@oxc-parser/binding-linux-arm-musleabihf": "0.142.0", + "@oxc-parser/binding-linux-arm64-gnu": "0.142.0", + "@oxc-parser/binding-linux-arm64-musl": "0.142.0", + "@oxc-parser/binding-linux-ppc64-gnu": "0.142.0", + "@oxc-parser/binding-linux-riscv64-gnu": "0.142.0", + "@oxc-parser/binding-linux-riscv64-musl": "0.142.0", + "@oxc-parser/binding-linux-s390x-gnu": "0.142.0", + "@oxc-parser/binding-linux-x64-gnu": "0.142.0", + "@oxc-parser/binding-linux-x64-musl": "0.142.0", + "@oxc-parser/binding-openharmony-arm64": "0.142.0", + "@oxc-parser/binding-wasm32-wasi": "0.142.0", + "@oxc-parser/binding-win32-arm64-msvc": "0.142.0", + "@oxc-parser/binding-win32-ia32-msvc": "0.142.0", + "@oxc-parser/binding-win32-x64-msvc": "0.142.0" + } + }, + "node_modules/parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "license": "MIT", + "dependencies": { + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-8.0.1.tgz", + "integrity": "sha512-NaRku2aMpUN1Sh1Gyk1KWUh2A7EJx2c6qYzvwsPtqhoHoaURshdrceYK3LunVCm3WHhm6FS7Vcczbvdh3/UIVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^8.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": "8.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.1.0.tgz", + "integrity": "sha512-kxL7msIffSuh9aaFAMD7rxAIuTRMAHMeBtgHW2yUdWw732ZNh4MehkF2gdjvtdmikkaIP9bFDDJOPlsvm7avrA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "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": "8.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.1.0.tgz", + "integrity": "sha512-kxL7msIffSuh9aaFAMD7rxAIuTRMAHMeBtgHW2yUdWw732ZNh4MehkF2gdjvtdmikkaIP9bFDDJOPlsvm7avrA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "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-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "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.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/piscina": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.2.0.tgz", + "integrity": "sha512-DszUCKeVN/5G5QKo6jAVHL8fmKnkJvQ0ACiVgY7YGCq3TUB2oznAOayvZPIAdEThvhczkXR+qm3IHsNXpFCYfA==", + "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/postcss": { + "version": "8.5.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", + "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "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.18", + "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/postcss-safe-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.1.0.tgz", + "integrity": "sha512-1WzZxRLaAFwEh6Do+zyGpjWV3nGJNxxhuh7Ubu/q1ICImMgZJnLwhoaEpRbG4pJppp2Y1ncL9ffA2f+LhrefQg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/prettier": { + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.7.tgz", + "integrity": "sha512-T3mF5P7HFzZVLDQuCUNtJj6WK1pcpLMweMNUVwGb01bLNkH9AkKxtZvmInw8K6bnn2O3d6/5RHl6zSHiBAD0Og==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/primeng": { + "version": "22.1.1", + "resolved": "https://registry.npmjs.org/primeng/-/primeng-22.1.1.tgz", + "integrity": "sha512-8dHx4EfBmcw4alCH14JottEwwt5nQkT5/IZYW7zMWLECrVkE54ydEPwRCb7hXQ4rS/vbsLtSWFQxIlBP/Pbtkg==", + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "@primeicons/angular": "^8.0.0", + "@primeui/license-manager": "^1.0.0", + "@primeuix/motion": "^1.0.0", + "@primeuix/styled": "^1.0.0", + "@primeuix/styles": "^3.0.0", + "@primeuix/utils": "^0.8.0", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/cdk": "^22.1.0", + "@angular/common": "^22.1.0", + "@angular/core": "^22.1.0", + "@angular/forms": "^22.1.0", + "@angular/platform-browser": "^22.1.0", + "@angular/router": "^22.1.0", + "rxjs": "^6.0.0 || ^7.8.1" + } + }, + "node_modules/proc-log": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-7.0.0.tgz", + "integrity": "sha512-FYgfaA69XZ93zaXLoMNQ+ViDXGGBgR8aLh03txzcFhV+9xOXx7+8DLCULrKKpR9+GsH9ZfHm82aSUPpozX0Ztg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^22.22.2 || ^24.15.0 || >=26.0.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz", + "integrity": "sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/proxy-agent-negotiate": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-agent-negotiate/-/proxy-agent-negotiate-1.1.0.tgz", + "integrity": "sha512-N8IBcM3UgCVzz2L2Lqv8DVntDnnC8/hiV4nEDUPkqq72TPUgYWjQc+bdZlBPZK9LzPAvOY//gAt0S0DApoOXWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "kerberos": "^2.0.0" + }, + "peerDependenciesMeta": { + "kerberos": { + "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.16.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.0.tgz", + "integrity": "sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.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/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/rolldown": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.0.tgz", + "integrity": "sha512-u7tgm5l4Yw1iTqUL4EcYOAt7fFvCgQMLeidrnD4GALlC6aOznCjezYajgxeyKw27u0Q5N7fwgCzjVyPIWzwuBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.140.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.2.0", + "@rolldown/binding-darwin-arm64": "1.2.0", + "@rolldown/binding-darwin-x64": "1.2.0", + "@rolldown/binding-freebsd-x64": "1.2.0", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.0", + "@rolldown/binding-linux-arm64-gnu": "1.2.0", + "@rolldown/binding-linux-arm64-musl": "1.2.0", + "@rolldown/binding-linux-ppc64-gnu": "1.2.0", + "@rolldown/binding-linux-s390x-gnu": "1.2.0", + "@rolldown/binding-linux-x64-gnu": "1.2.0", + "@rolldown/binding-linux-x64-musl": "1.2.0", + "@rolldown/binding-openharmony-arm64": "1.2.0", + "@rolldown/binding-wasm32-wasi": "1.2.0", + "@rolldown/binding-win32-arm64-msvc": "1.2.0", + "@rolldown/binding-win32-x64-msvc": "1.2.0" + } + }, + "node_modules/rolldown/node_modules/@oxc-project/types": { + "version": "0.140.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.140.0.tgz", + "integrity": "sha512-h5LUOzGArYemnW1NMz/DuuQhBi96J6JL2Bk8zE4kvqxB5Sg3jxmCiH4uyOWHDkiKSt5vWlG4FIwCR/DbstcNRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "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", + "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.101.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.101.0.tgz", + "integrity": "sha512-OL3GoQyoUdDt843DpVmDO6y2k1sc5IhUDSpu8XucEI+35neq5QivZ1iuegnpraEVTJXlQGK1gl27zKcTLEPbQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^5.0.0", + "immutable": "^5.1.5", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=20.19.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "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.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "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.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "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/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "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/slice-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-9.0.0.tgz", + "integrity": "sha512-SO/3iYL5S3W57LLEniscOGPZgOqZUPCx6d3dB+52B80yJ0XstzsC/eV8gnA4tM3MHDrKz+OCFSLNjswdSC+/bA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" + }, + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "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/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.2.0.tgz", + "integrity": "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==", + "dev": true, + "license": "MIT" + }, + "node_modules/stdin-discarder": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.2.tgz", + "integrity": "sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", + "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tailwindcss": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz", + "integrity": "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.1.tgz", + "integrity": "sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyrainbow": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.1.tgz", + "integrity": "sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "7.4.13", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.13.tgz", + "integrity": "sha512-iHtaIWWIbMDkCeJdTBzZFGgbluE5J+oHlb2g7+oAz1S1gpuVpabRZdQyd471Vl8UUkcz2vXSL8xZH2kyCe8tfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^7.4.13" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.4.13", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.13.tgz", + "integrity": "sha512-mbYsrih5FRtGxs3Usvl/PqwJsNpp+jsmrdFviiK02teHDG0/HebBG/pqCylje3kzgXYzuLoHJF/0mz9W53t8Xg==", + "dev": true, + "license": "MIT" + }, + "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/tough-cookie": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.2.tgz", + "integrity": "sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", + "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/type-is/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.1.tgz", + "integrity": "sha512-RYONW2MeafgYlkVOKYKkA/Ag7BmXqgIWCa8t1m0JcxrQg9pI9lEqRhAOruOBCbAohOa/gkCF+iPi9hrgvTzu6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "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.3.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz", + "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==", + "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-name": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-8.0.0.tgz", + "integrity": "sha512-SCv6OOV6Xj2/3cXy3dGmADluJTNcL3o7hZAglNPTe+WYuEuvxgJzxPrSDLZhF+CwyQOubqgecjMmTJGMVLWjYQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^22.22.2 || ^24.15.0 || >=26.0.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/verkit": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/verkit/-/verkit-0.3.2.tgz", + "integrity": "sha512-zj/ob3UsvJGN0whEAKFp53REA5X66hvffVqoCtVQAakJKnKlH+/PcOfMoFwIG/o4rElqLv/ycAFlx8ZlXUorCg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/vite": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.5.tgz", + "integrity": "sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.5", + "postcss": "^8.5.17", + "rolldown": "~1.1.5", + "tinyglobby": "^0.2.17" + }, + "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", + "@vitejs/devtools": "^0.3.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/vite/node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/vite/node_modules/@oxc-project/types": { + "version": "0.139.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.139.0.tgz", + "integrity": "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-android-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.5.tgz", + "integrity": "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.5.tgz", + "integrity": "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-darwin-x64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.5.tgz", + "integrity": "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.5.tgz", + "integrity": "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.5.tgz", + "integrity": "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.5.tgz", + "integrity": "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.5.tgz", + "integrity": "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.5.tgz", + "integrity": "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.5.tgz", + "integrity": "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.5.tgz", + "integrity": "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.5.tgz", + "integrity": "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.5.tgz", + "integrity": "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.5.tgz", + "integrity": "sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.5.tgz", + "integrity": "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.5.tgz", + "integrity": "sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/rolldown": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.5.tgz", + "integrity": "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.139.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.1.5", + "@rolldown/binding-darwin-arm64": "1.1.5", + "@rolldown/binding-darwin-x64": "1.1.5", + "@rolldown/binding-freebsd-x64": "1.1.5", + "@rolldown/binding-linux-arm-gnueabihf": "1.1.5", + "@rolldown/binding-linux-arm64-gnu": "1.1.5", + "@rolldown/binding-linux-arm64-musl": "1.1.5", + "@rolldown/binding-linux-ppc64-gnu": "1.1.5", + "@rolldown/binding-linux-s390x-gnu": "1.1.5", + "@rolldown/binding-linux-x64-gnu": "1.1.5", + "@rolldown/binding-linux-x64-musl": "1.1.5", + "@rolldown/binding-openharmony-arm64": "1.1.5", + "@rolldown/binding-wasm32-wasi": "1.1.5", + "@rolldown/binding-win32-arm64-msvc": "1.1.5", + "@rolldown/binding-win32-x64-msvc": "1.1.5" + } + }, + "node_modules/vitest": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.11.tgz", + "integrity": "sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.1.11", + "@vitest/mocker": "4.1.11", + "@vitest/pretty-format": "4.1.11", + "@vitest/runner": "4.1.11", + "@vitest/snapshot": "4.1.11", + "@vitest/spy": "4.1.11", + "@vitest/utils": "4.1.11", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.11", + "@vitest/browser-preview": "4.1.11", + "@vitest/browser-webdriverio": "4.1.11", + "@vitest/coverage-istanbul": "4.1.11", + "@vitest/coverage-v8": "4.1.11", + "@vitest/ui": "4.1.11", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } + } + }, + "node_modules/vitest/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/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/watchpack": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz", + "integrity": "sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "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/webidl-conversions": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz", + "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-mimetype": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", + "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-url": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-16.0.1.tgz", + "integrity": "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.11.0", + "tr46": "^6.0.0", + "webidl-conversions": "^8.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-10.0.1.tgz", + "integrity": "sha512-M0N4xzyzosiIok3svYlEo1sdLZts/8FPgYH/GPC3wvlmPoRvnoManGMrE54waYj3tISA8w6lsdesfVv67qSr8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.3", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?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==", + "dev": true, + "license": "ISC" + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "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/yargs": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.1.0.tgz", + "integrity": "sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^8.2.1", + "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/yoctocolors": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.2.0.tgz", + "integrity": "sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "zod": "^3.25.28 || ^4" + } + } + } +} diff --git a/U22/package.json b/U22/package.json new file mode 100644 index 0000000..c7a2ce3 --- /dev/null +++ b/U22/package.json @@ -0,0 +1,40 @@ +{ + "name": "carparkvalidation", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test" + }, + "private": true, + "packageManager": "npm@11.12.1", + "dependencies": { + "@angular/common": "^22.1.0", + "@angular/compiler": "^22.1.0", + "@angular/core": "^22.1.0", + "@angular/forms": "^22.1.0", + "@angular/platform-browser": "^22.1.0", + "@angular/router": "^22.1.0", + "@google/generative-ai": "^0.24.1", + "@primeicons/angular": "^8.0.1", + "@primeuix/themes": "^3.0.1", + "moment": "^2.31.0", + "primeng": "^22.1.1", + "rxjs": "~7.8.0", + "tslib": "^2.3.0" + }, + "devDependencies": { + "@angular/build": "^22.1.6", + "@angular/cli": "^22.1.6", + "@angular/compiler-cli": "^22.1.0", + "@tailwindcss/postcss": "^4.1.12", + "jsdom": "^28.0.0", + "postcss": "^8.5.3", + "prettier": "^3.8.1", + "tailwindcss": "^4.1.12", + "typescript": "~6.0.2", + "vitest": "^4.0.8" + } +} diff --git a/U22/public/config/appsetting.json b/U22/public/config/appsetting.json new file mode 100644 index 0000000..fc840bb --- /dev/null +++ b/U22/public/config/appsetting.json @@ -0,0 +1,10 @@ +{ + "baseUrl4": "http://localhost:5100", + "baseUrl": "http://nephmdb-sql007/CarParkValidationAPI", + "loginUrl": "api/login", + "updatePersonUrl": "api/updatePerson", + "getAllUrl": "api/v1/Users/GetAllUsers", + "authenticateUrl": "api/v1/Users/Authenticate", + "validationPoint": "api/v1/ValidationPoint", + "adminEmail": "NBMLHD-parking@health.nsw.gov.au" +} \ No newline at end of file diff --git a/U22/public/favicon.ico b/U22/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..57614f9c967596fad0a3989bec2b1deff33034f6 GIT binary patch literal 15086 zcmd^G33O9Omi+`8$@{|M-I6TH3wzF-p5CV8o}7f~KxR60LK+ApEFB<$bcciv%@SmA zV{n>g85YMFFeU*Uvl=i4v)C*qgnb;$GQ=3XTe9{Y%c`mO%su)noNCCQ*@t1WXn|B(hQ7i~ zrUK8|pUkD6#lNo!bt$6)jR!&C?`P5G(`e((P($RaLeq+o0Vd~f11;qB05kdbAOm?r zXv~GYr_sibQO9NGTCdT;+G(!{4Xs@4fPak8#L8PjgJwcs-Mm#nR_Z0s&u?nDX5^~@ z+A6?}g0|=4e_LoE69pPFO`yCD@BCjgKpzMH0O4Xs{Ahc?K3HC5;l=f zg>}alhBXX&);z$E-wai+9TTRtBX-bWYY@cl$@YN#gMd~tM_5lj6W%8ah4;uZ;jP@Q zVbuel1rPA?2@x9Y+u?e`l{Z4ngfG5q5BLH5QsEu4GVpt{KIp1?U)=3+KQ;%7ec8l* zdV=zZgN5>O3G(3L2fqj3;oBbZZw$Ij@`Juz@?+yy#OPw)>#wsTewVgTK9BGt5AbZ&?K&B3GVF&yu?@(Xj3fR3n+ZP0%+wo)D9_xp>Z$`A4 zfV>}NWjO#3lqumR0`gvnffd9Ka}JJMuHS&|55-*mCD#8e^anA<+sFZVaJe7{=p*oX zE_Uv?1>e~ga=seYzh{9P+n5<+7&9}&(kwqSaz;1aD|YM3HBiy<))4~QJSIryyqp| z8nGc(8>3(_nEI4n)n7j(&d4idW1tVLjZ7QbNLXg;LB ziHsS5pXHEjGJZb59KcvS~wv;uZR-+4qEqow`;JCfB*+b^UL^3!?;-^F%yt=VjU|v z39SSqKcRu_NVvz!zJzL0CceJaS6%!(eMshPv_0U5G`~!a#I$qI5Ic(>IONej@aH=f z)($TAT#1I{iCS4f{D2+ApS=$3E7}5=+y(rA9mM#;Cky%b*Gi0KfFA`ofKTzu`AV-9 znW|y@19rrZ*!N2AvDi<_ZeR3O2R{#dh1#3-d%$k${Rx42h+i&GZo5!C^dSL34*AKp z27mTd>k>?V&X;Nl%GZ(>0s`1UN~Hfyj>KPjtnc|)xM@{H_B9rNr~LuH`Gr5_am&Ep zTjZA8hljNj5H1Ipm-uD9rC}U{-vR!eay5&6x6FkfupdpT*84MVwGpdd(}ib)zZ3Ky z7C$pnjc82(W_y_F{PhYj?o!@3__UUvpX)v69aBSzYj3 zdi}YQkKs^SyXyFG2LTRz9{(w}y~!`{EuAaUr6G1M{*%c+kP1olW9z23dSH!G4_HSK zzae-DF$OGR{ofP*!$a(r^5Go>I3SObVI6FLY)N@o<*gl0&kLo-OT{Tl*7nCz>Iq=? zcigIDHtj|H;6sR?or8Wd_a4996GI*CXGU}o;D9`^FM!AT1pBY~?|4h^61BY#_yIfO zKO?E0 zJ{Pc`9rVEI&$xxXu`<5E)&+m(7zX^v0rqofLs&bnQT(1baQkAr^kEsk)15vlzAZ-l z@OO9RF<+IiJ*O@HE256gCt!bF=NM*vh|WVWmjVawcNoksRTMvR03H{p@cjwKh(CL4 z7_PB(dM=kO)!s4fW!1p0f93YN@?ZSG` z$B!JaAJCtW$B97}HNO9(x-t30&E}Mo1UPi@Av%uHj~?T|!4JLwV;KCx8xO#b9IlUW zI6+{a@Wj|<2Y=U;a@vXbxqZNngH8^}LleE_4*0&O7#3iGxfJ%Id>+sb;7{L=aIic8 z|EW|{{S)J-wr@;3PmlxRXU8!e2gm_%s|ReH!reFcY8%$Hl4M5>;6^UDUUae?kOy#h zk~6Ee_@ZAn48Bab__^bNmQ~+k=02jz)e0d9Z3>G?RGG!65?d1>9}7iG17?P*=GUV-#SbLRw)Hu{zx*azHxWkGNTWl@HeWjA?39Ia|sCi{e;!^`1Oec zb>Z|b65OM*;eC=ZLSy?_fg$&^2xI>qSLA2G*$nA3GEnp3$N-)46`|36m*sc#4%C|h zBN<2U;7k>&G_wL4=Ve5z`ubVD&*Hxi)r@{4RCDw7U_D`lbC(9&pG5C*z#W>8>HU)h z!h3g?2UL&sS!oY5$3?VlA0Me9W5e~V;2jds*fz^updz#AJ%G8w2V}AEE?E^=MK%Xt z__Bx1cr7+DQmuHmzn*|hh%~eEc9@m05@clWfpEFcr+06%0&dZJH&@8^&@*$qR@}o3 z@Tuuh2FsLz^zH+dN&T&?0G3I?MpmYJ;GP$J!EzjeM#YLJ!W$}MVNb0^HfOA>5Fe~UNn%Zk(PT@~9}1dt)1UQ zU*B5K?Dl#G74qmg|2>^>0WtLX#Jz{lO4NT`NYB*(L#D|5IpXr9v&7a@YsGp3vLR7L zHYGHZg7{ie6n~2p$6Yz>=^cEg7tEgk-1YRl%-s7^cbqFb(U7&Dp78+&ut5!Tn(hER z|Gp4Ed@CnOPeAe|N>U(dB;SZ?NU^AzoD^UAH_vamp6Ws}{|mSq`^+VP1g~2B{%N-!mWz<`)G)>V-<`9`L4?3dM%Qh6<@kba+m`JS{Ya@9Fq*m6$$ zA1%Ogc~VRH33|S9l%CNb4zM%k^EIpqY}@h{w(aBcJ9c05oiZx#SK9t->5lSI`=&l~ z+-Ic)a{FbBhXV$Xt!WRd`R#Jk-$+_Z52rS>?Vpt2IK<84|E-SBEoIw>cs=a{BlQ7O z-?{Fy_M&84&9|KM5wt~)*!~i~E=(6m8(uCO)I=)M?)&sRbzH$9Rovzd?ZEY}GqX+~ zFbEbLz`BZ49=2Yh-|<`waK-_4!7`ro@zlC|r&I4fc4oyb+m=|c8)8%tZ-z5FwhzDt zL5kB@u53`d@%nHl0Sp)Dw`(QU&>vujEn?GPEXUW!Wi<+4e%BORl&BIH+SwRcbS}X@ z01Pk|vA%OdJKAs17zSXtO55k!;%m9>1eW9LnyAX4uj7@${O6cfii`49qTNItzny5J zH&Gj`e}o}?xjQ}r?LrI%FjUd@xflT3|7LA|ka%Q3i}a8gVm<`HIWoJGH=$EGClX^C0lysQJ>UO(q&;`T#8txuoQ_{l^kEV9CAdXuU1Ghg8 zN_6hHFuy&1x24q5-(Z7;!poYdt*`UTdrQOIQ!2O7_+AHV2hgXaEz7)>$LEdG z<8vE^Tw$|YwZHZDPM!SNOAWG$?J)MdmEk{U!!$M#fp7*Wo}jJ$Q(=8>R`Ats?e|VU?Zt7Cdh%AdnfyN3MBWw{ z$OnREvPf7%z6`#2##_7id|H%Y{vV^vWXb?5d5?a_y&t3@p9t$ncHj-NBdo&X{wrfJ zamN)VMYROYh_SvjJ=Xd!Ga?PY_$;*L=SxFte!4O6%0HEh%iZ4=gvns7IWIyJHa|hT z2;1+e)`TvbNb3-0z&DD_)Jomsg-7p_Uh`wjGnU1urmv1_oVqRg#=C?e?!7DgtqojU zWoAB($&53;TsXu^@2;8M`#z{=rPy?JqgYM0CDf4v@z=ZD|ItJ&8%_7A#K?S{wjxgd z?xA6JdJojrWpB7fr2p_MSsU4(R7=XGS0+Eg#xR=j>`H@R9{XjwBmqAiOxOL` zt?XK-iTEOWV}f>Pz3H-s*>W z4~8C&Xq25UQ^xH6H9kY_RM1$ch+%YLF72AA7^b{~VNTG}Tj#qZltz5Q=qxR`&oIlW Nr__JTFzvMr^FKp4S3v*( literal 0 HcmV?d00001 diff --git a/U22/public/images/NBMLHD-LogoWhite.png b/U22/public/images/NBMLHD-LogoWhite.png new file mode 100644 index 0000000000000000000000000000000000000000..4d501c493b9e71017073eb65b0439f19a8fb760b GIT binary patch literal 47661 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 Nk-n)OUgt{We*ggED7pXu literal 0 HcmV?d00001 diff --git a/U22/public/images/application_image.png b/U22/public/images/application_image.png new file mode 100644 index 0000000000000000000000000000000000000000..362d675c1e0ed7c10def4422c16e2b4323d6922e GIT binary patch literal 20253 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 a@N-n#Go>MXiigsq1lqgD*W;mENW$MIwRJH7 literal 0 HcmV?d00001 diff --git a/U22/public/images/application_image_od.png b/U22/public/images/application_image_od.png new file mode 100644 index 0000000000000000000000000000000000000000..18b9f9bbb6f34f61f457b0e6152508afe8447f01 GIT binary patch literal 76167 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 P9pI-Vr!HF~Z4vT6pR{7m literal 0 HcmV?d00001 diff --git a/U22/src/app/adminuser/adminuser.component.css b/U22/src/app/adminuser/adminuser.component.css new file mode 100644 index 0000000..3db3368 --- /dev/null +++ b/U22/src/app/adminuser/adminuser.component.css @@ -0,0 +1,12 @@ +table { + width: 100%; +} + +.mat-form-field { + font-size: 14px; + width: 100%; +} +td.mat-column-edit, .mat-column-delete { + width: 35px; + padding-right: 2px; +} diff --git a/U22/src/app/adminuser/adminuser.component.html b/U22/src/app/adminuser/adminuser.component.html new file mode 100644 index 0000000..184468c --- /dev/null +++ b/U22/src/app/adminuser/adminuser.component.html @@ -0,0 +1,56 @@ +
+

Application Administrators

+ + + + Add User + + + +
+ + + + + + +
+ + + + + + Stafflink Id + Name + Role + Validation Point + Active + Edit + + + + + {{ item.stafflinkNo }} + {{ item.name }} + {{ item.roleType }} + {{ item.validationPoint }} + + @if(item.active == true) { + + } + @else { + + } + + + + + + + + +
\ No newline at end of file diff --git a/U22/src/app/adminuser/adminuser.component.ts b/U22/src/app/adminuser/adminuser.component.ts new file mode 100644 index 0000000..a5ff7c3 --- /dev/null +++ b/U22/src/app/adminuser/adminuser.component.ts @@ -0,0 +1,96 @@ +import { Component, OnInit, signal, OnDestroy } from '@angular/core'; + +import { AdminUserView } from '../models'; + + +import { take } from 'rxjs/operators'; +import { Subscription } from 'rxjs'; +import { Router, RouterModule } from '@angular/router'; +import { AdminUserService } from './adminuser.service'; +import { MessageService } from 'primeng/api'; +import { TableModule } from 'primeng/table'; +import { Check } from '@primeicons/angular/check'; +import { Times } from '@primeicons/angular/times'; +import { Pencil } from '@primeicons/angular/pencil'; +import { Search } from '@primeicons/angular/search'; +import { IconFieldModule } from 'primeng/iconfield'; +import { InputIconModule } from 'primeng/inputicon'; +import { InputTextModule } from 'primeng/inputtext'; +@Component({ + selector: 'adminuser-list', + templateUrl: './adminuser.component.html', + imports: [TableModule, RouterModule, Times, Check, Pencil, InputIconModule, IconFieldModule, Search, InputTextModule], + styleUrls: ['./adminuser.component.css'] +}) +export class AdminUserComponent implements OnInit, OnDestroy { + dataSource = signal([]); + private subscription: Subscription = new Subscription(); + displayedColumns: string[] = ['stafflinkNo', 'name', 'roleType', 'validationPoint', 'active', 'edit']; + msg = "[AdminUser component]"; + + + /* + private store: Store + */ + constructor( + private adminUserService: AdminUserService, + private router: Router, + private messageService: MessageService, + ) { + + + } + //KeyboardEvent + applyFilter(event: Event) { + const filterValue = (event.target as HTMLInputElement).value; + //this.dataSource.filter = filterValue.trim().toLowerCase(); + } + + ngOnInit(): void { + this.subscription.add( + this.adminUserService.loadAdminusers().subscribe(result => { + // console.log(this.msg + "onInit load Data", result); + this.dataSource.set(result.data); + }, error => { + + console.log("error ", error); + }) + + ); + + /* + this.store.dispatch(validationActions.LoadValidationpoints()); + this.store.pipe(select(validationSelector.getAllValidations)).subscribe(result => this.dataSource.data = result); + */ + } + + + showEdit(item: AdminUserView) { + console.log(this.msg + "on row click", item); + this.router.navigate(['/adminuser/' + item.id], { queryParams: { returnUrl: '/adminuser' } }); + } + deleteItem(id: number): void { + + this.adminUserService.deleteAdminuser(id) + .pipe(take(1)) + .subscribe({ + next: result => { + console.log(this.msg + " deleteItem success", result); + let data = this.dataSource(); + let index: number = data.findIndex(d => d.id === id); + console.log(this.msg + "delete from datasource"); + data.splice(index, 1) + this.dataSource.set(data); + }, + error: e => console.error('error loading', e) + }); + console.log(this.msg + "click button to delete"); + + } + ngOnDestroy() { + this.subscription.unsubscribe(); + } +} + + + diff --git a/U22/src/app/adminuser/adminuser.edit.component.css b/U22/src/app/adminuser/adminuser.edit.component.css new file mode 100644 index 0000000..3db3368 --- /dev/null +++ b/U22/src/app/adminuser/adminuser.edit.component.css @@ -0,0 +1,12 @@ +table { + width: 100%; +} + +.mat-form-field { + font-size: 14px; + width: 100%; +} +td.mat-column-edit, .mat-column-delete { + width: 35px; + padding-right: 2px; +} diff --git a/U22/src/app/adminuser/adminuser.edit.component.html b/U22/src/app/adminuser/adminuser.edit.component.html new file mode 100644 index 0000000..b47f1ea --- /dev/null +++ b/U22/src/app/adminuser/adminuser.edit.component.html @@ -0,0 +1,48 @@ +
+
+ {{getEditText()}} +
+
+
+
+ + +
+
+ + +
+
+ + + + + +
+
+ + + + +
+
+ + + + +
+ +
+
+ + +
+
+ +
\ No newline at end of file diff --git a/U22/src/app/adminuser/adminuser.edit.component.ts b/U22/src/app/adminuser/adminuser.edit.component.ts new file mode 100644 index 0000000..e9881c6 --- /dev/null +++ b/U22/src/app/adminuser/adminuser.edit.component.ts @@ -0,0 +1,203 @@ +import { Component, inject, OnDestroy, OnInit, signal, ViewChild } from '@angular/core'; +import { Router, ActivatedRoute } from '@angular/router'; +import { FormGroup, Validators, ReactiveFormsModule, FormBuilder, FormControl } from '@angular/forms'; +import { Subject, pipe, Subscription, single } from 'rxjs'; + +import { AdminUser, Lookup, userRole } from '../models'; +import { LookupService, Utils } from '../shares'; +import { AdminUserService } from './adminuser.service'; +import { MessageService } from 'primeng/api'; +import { InputTextModule } from 'primeng/inputtext'; +import { SelectModule } from 'primeng/select'; +import { ButtonModule } from 'primeng/button'; +import { CheckboxModule } from 'primeng/checkbox'; +@Component({ + templateUrl: 'adminuser.edit.component.html', + imports: [InputTextModule, ButtonModule, ReactiveFormsModule, SelectModule, CheckboxModule], + selector: 'adminuser-edit', + styleUrls: ['adminuser.edit.component.css'] +}) +export class AdminUserEditComponent implements OnInit, OnDestroy { + returnUrl = ''; + loginUser = ''; + _id = -1; + Roles = signal([]); + validationPoints = signal([]); + msg = "[adminUser Component] "; + //for focus input + // @ViewChild('mystaffid') mystaffNo!: MatInput; + isChange = true; // disable use false//true for not disable. make sure it true is disable button. + private subscription: Subscription = new Subscription(); + subChanged$ = new Subject(); + private formBuilder = inject(FormBuilder); + private adminUserService = inject(AdminUserService); + private messageService = inject(MessageService); + private lookupService = inject(LookupService); + adminuserForm = this.formBuilder.group({ + id: [0], //Validators.required + stafflinkNo: [''], //Validators.required + name: [''], //Validators.required + addedBy: [''], //Validators.required + addedOn: new FormControl(null), //Validators.required + active: [false], //Validators.required + roleType: [0, Validators.required], + validationPointId: [0, Validators.required] + }); + constructor( + private router: Router, private route: ActivatedRoute, + ) { + + + const roles = []; + let item: Lookup = { id: userRole.Admin, categoryId: userRole.Admin, description: 'Admin' }; + roles.push(item); + item = { id: userRole.Normal, categoryId: userRole.Normal, description: 'Normal' }; + roles.push(item); + this.Roles.set(roles); + + } + loadData(id: number): void { + this.subscription.add( + this.lookupService.loadValidationPoint() + .subscribe({ + next: x => { + this.validationPoints.set(x.data); + if (id > 0) { + this.subscription.add( + this.adminUserService.loadAdminuserById(id) + .subscribe({ + next: x => this.assignValue(x.data), + error: e => console.error("error ", e.message) + })); + } + }, + error: e => console.error("error ", e) + } + )); + } + ngOnInit(): void { + this.returnUrl = this.route.snapshot.queryParams['returnUrl'] || '/adminuser'; + const id = Number(this.route.snapshot.paramMap.get('id')); + // now load thing up + const user = Utils.getCurrentUser(); + // console.log(this.msg + "current login user ", user); + if (user.username === '') + alert("you are not login."); + else + this.loginUser = user.firstName; + this._id = id; + //console.log(this.msg + " " + id ); + this.subscription.add(this.adminuserForm.valueChanges.subscribe(x => this.isChange = false)); + this.subscription.add(this.subChanged$.subscribe(x => this.isChange = x)); + this.loadData(id); + + } + getEditText(): string { + if (this._id > 0) + return "Edit Admin User"; + else + return "New Admin User"; + } + // this for disable submit button + get isFieldsChange() { + const chan = this.isChange || !this.adminuserForm.valid; // this disable so need true valid = true not + //console.log(this.msg + 'is fields change', chan); + return chan; + } + searchUser(): void { + const staffid = this.adminuserForm.controls["stafflinkNo"].value ?? ''; + // console.log(this.msg + " the staffid is ", staffid); + if (staffid != '') { + //this.form.controls['your form control name'].value + this.adminUserService.getStaffLinkId(staffid).subscribe( + { + next: x => { + //console.log(this.msg + " this is stafflink no ", x); + // now get current user. + + if (x.data) { + //this.error = true; + const fname = x.data.firstName + " " + x.data.lastName; + this.adminuserForm.patchValue({ name: fname, addedBy: this.loginUser }); + + } + else { + + this.messageService.add({ severity: 'error', summary: 'Error', detail: "can not find stafflinkNo:" + staffid }); + // this.adminuserForm.patchValue({name:x.data.firstName + " " + x.data.lastName + } + }, + error: e => { + + console.log("error ", e); + } + }); + } + else { + + this.messageService.add({ severity: 'error', summary: 'Error', detail: "please enter staff link no" }); + } + } + assignValue(adminuser: AdminUser): void { + this.adminuserForm.patchValue({ + id: adminuser.id, + stafflinkNo: adminuser.stafflinkNo, + name: adminuser.name, + addedBy: adminuser.addedBy, + addedOn: adminuser.addedOn, + active: adminuser.active, + roleType: adminuser.roleType, + validationPointId: adminuser.validationPointId + }); + // disable use false//true for not disable. + this.subChanged$.next(true); + } + + // convenience getter for easy access in form fields + get f() { return this.adminuserForm.controls; } + + onSubmit(): void { + // if form valid then go save + //make sure + const okToSave = this.adminuserForm.valid; + if (okToSave) { + let adminuserValue = this.adminuserForm.value; + + let adminuser: AdminUser = { + id: adminuserValue.id ?? -1, + stafflinkNo: adminuserValue.stafflinkNo ?? '', + name: adminuserValue.name ?? '', + addedBy: adminuserValue.addedBy ?? '', + addedOn: new Date(), + active: adminuserValue.active ?? false, + roleType: adminuserValue.roleType ?? 0, + validationPointId: adminuserValue.validationPointId ?? 0, + }; + this.subscription.add( + this.adminUserService.saveAdminuser(adminuser).subscribe(x => { + if (x.statusCode >= 1) { + this.messageService.add({ severity: 'success', summary: 'Success', detail: "Save is OK" }); + this.router.navigate([this.returnUrl]); + } + else { + + this.messageService.add({ severity: 'error', summary: 'Error', detail: "Fail to save" }); + } + + }, + error => { + + console.log("error ", error); + } + ) + ); + } + } + goBack(): void { + console.log("the return url", this.returnUrl); + this.router.navigate([this.returnUrl]); + } + ngOnDestroy() { + this.subscription.unsubscribe(); + } +} diff --git a/U22/src/app/adminuser/adminuser.service.ts b/U22/src/app/adminuser/adminuser.service.ts new file mode 100644 index 0000000..c9f6fa1 --- /dev/null +++ b/U22/src/app/adminuser/adminuser.service.ts @@ -0,0 +1,51 @@ + +import { Injectable, Inject } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { AdminUser, AdminUserView, ResultModel,ConfigureUrl,User } from '../models'; +import { AppSettingService } from '../shares'; + +@Injectable({ providedIn: 'root' }) +export class AdminUserService { + + constructor(private http: HttpClient, + private appSetting :AppSettingService + ) {} + loadAdminusers(): Observable> { + let config = { headers : { 'Content-Type': 'application/json' } }; + //const baseUrl = ConfigureUrl.baseUrl + "/"+ ConfigureUrl.adminUserUrl; + const baseUrl = this.appSetting.appSetting.baseUrl + "/"+ ConfigureUrl.adminUserUrl; + return this.http.get>(baseUrl); + } + getStaffLinkId(staffid:string) :Observable>{ + const userUrl = this.appSetting.appSetting.baseUrl + "/" + ConfigureUrl.userByStaffIdUrl; + let params = new HttpParams().set("stafflinkNo", ""+staffid); + let headers = new HttpHeaders().set('Content-Type', 'application/json'); + let options = { + headers: headers, + params: params + }; + return this.http.get>(userUrl, options); + } + loadAdminuserById(id:number): Observable> { + const baseUrl = this.appSetting.appSetting.baseUrl + "/"+ ConfigureUrl.adminUserUrl; + let params = new HttpParams().set("id", ""+id); + let headers = new HttpHeaders().set('Content-Type', 'application/json'); + let options = { + headers: headers, + params: params + }; + //return this.http.get(this.baseUrl + 'api/Adminuser/LoadAdminuserById',options); + return this.http.get>(baseUrl + "/" + id); + } + saveAdminuser(jsData:AdminUser): Observable> { //insert Adminuser + let config = { headers : { 'Content-Type': 'application/json' } }; + const baseUrl = this.appSetting.appSetting.baseUrl + "/"+ ConfigureUrl.adminUserUrl; + return this.http.post>(baseUrl, jsData, config); + } + deleteAdminuser(id:number): Observable>{ + const baseUrl = this.appSetting.appSetting.baseUrl + "/"+ ConfigureUrl.adminUserUrl; + let config = { headers : { 'Content-Type': 'application/json' } }; + return this.http.delete>(baseUrl + "/" + id); + } +} diff --git a/U22/src/app/adminuser/index.ts b/U22/src/app/adminuser/index.ts new file mode 100644 index 0000000..c65e6d6 --- /dev/null +++ b/U22/src/app/adminuser/index.ts @@ -0,0 +1,4 @@ +export * from './adminuser.component'; +export * from './adminuser.edit.component'; +export * from './adminuser.service'; + diff --git a/U22/src/app/app.config.ts b/U22/src/app/app.config.ts new file mode 100644 index 0000000..15ce9bb --- /dev/null +++ b/U22/src/app/app.config.ts @@ -0,0 +1,48 @@ +import { ApplicationConfig, inject, provideAppInitializer, provideBrowserGlobalErrorListeners } from '@angular/core'; +import { provideRouter } from '@angular/router'; +import { routes } from './app.routes'; +import { PrimeNG, providePrimeNG } from 'primeng/config'; +import { ConfirmationService, MessageService } from 'primeng/api'; +import { provideHttpClient, withInterceptors, withXhr } from '@angular/common/http'; +import { AppSettingService, ErrorInterceptor, initializeApp, JwtInterceptor } from './shares'; +import MyPreset from './mytheme_aura'; + +export const appConfig: ApplicationConfig = { + providers: [ + MessageService, + ConfirmationService, + provideAppInitializer(() => { + const primeNG = inject(PrimeNG); + const appSettingService = inject(AppSettingService); + const loadAppSetting = initializeApp(); + + // Return the promise chain so Angular blocks app loading until the request completes + return loadAppSetting().then((result) => { + // Read the setting directly from the populated service instance + const settings = appSettingService.appSetting; + console.log('Loaded app settings:', settings, result); + + const licenseKey = settings?.primeNGLicense || ''; + console.log("primeng license", licenseKey); + + // Apply configuration to PrimeNG + primeNG.setConfig({ + license: licenseKey, + theme: { + preset: MyPreset, + options: { + cssLayer: { + name: 'primeng', + order: 'theme, base, primeng' + } + } + } + }); + }); + }), + + provideHttpClient(withXhr(), withInterceptors([JwtInterceptor, ErrorInterceptor])), + provideBrowserGlobalErrorListeners(), + provideRouter(routes) + ] +}; diff --git a/U22/src/app/app.css b/U22/src/app/app.css new file mode 100644 index 0000000..e69de29 diff --git a/U22/src/app/app.html b/U22/src/app/app.html new file mode 100644 index 0000000..b43326e --- /dev/null +++ b/U22/src/app/app.html @@ -0,0 +1,6 @@ +@if (isAuth() == true) { + +} + + + \ No newline at end of file diff --git a/U22/src/app/app.routes.ts b/U22/src/app/app.routes.ts new file mode 100644 index 0000000..f6a3cab --- /dev/null +++ b/U22/src/app/app.routes.ts @@ -0,0 +1,28 @@ +import { Routes } from '@angular/router'; +import { AuthGuard } from './route-guard'; +import { AdminUserComponent, AdminUserEditComponent } from './adminuser'; +import { LoginComponent } from './login'; +import { ConcessionTypeComponent, ConcessiontypeEditComponent } from './concessiontype'; +import { ValidationPointComponent, ValidationpointEditComponent } from './validationPoint'; +import { ConcessionValidationComponent, ConcessionValidationEditComponent } from './concessionValidation'; +import { ConcessionvalidationReportComponent } from './concessionvalidationreport'; + +export const routes: Routes = [ + { path: 'login', component: LoginComponent }, + { path: 'adminuser', component: AdminUserComponent, canActivate: [AuthGuard], data: { roleAllowed: 'Admin' } }, + + { path: 'adminuser/:id', component: AdminUserEditComponent, canActivate: [AuthGuard], data: { roleAllowed: 'Admin' } }, + { path: 'concessiontype', component: ConcessionTypeComponent, canActivate: [AuthGuard], data: { roleAllowed: 'Admin' } }, + { path: 'concessiontype/:id', component: ConcessiontypeEditComponent, canActivate: [AuthGuard], data: { roleAllowed: 'Admin' } }, + + { path: 'validationpoint', component: ValidationPointComponent, canActivate: [AuthGuard], data: { roleAllowed: 'Admin' } }, + { path: 'validationpoint/:id', component: ValidationpointEditComponent, canActivate: [AuthGuard], data: { roleAllowed: 'Admin' } }, + + { path: 'concessionvalidation', component: ConcessionValidationComponent, canActivate: [AuthGuard] }, + { path: 'concessionvalidation/:id', component: ConcessionValidationEditComponent, canActivate: [AuthGuard] }, + + { path: 'app-concessionvalidation-report', component: ConcessionvalidationReportComponent, canActivate: [AuthGuard], data: { roleAllowed: 'Admin' } }, + + { path: '', redirectTo: 'login', pathMatch: 'full' }, + { path: '**', redirectTo: 'login' }, +]; diff --git a/U22/src/app/app.ts b/U22/src/app/app.ts new file mode 100644 index 0000000..8e2a885 --- /dev/null +++ b/U22/src/app/app.ts @@ -0,0 +1,19 @@ +import { Component, computed, inject, signal, viewChild } from '@angular/core'; +import { RouterOutlet } from '@angular/router'; +import { ConfirmDialogModule } from 'primeng/confirmdialog'; +import { ToastModule } from 'primeng/toast'; +import { NavToolarComponent } from './nav-toolbar/nav-toolbar.component'; +import { AuthenticationService } from './user-services'; +@Component({ + imports: [RouterOutlet, ConfirmDialogModule, ToastModule, NavToolarComponent], + selector: 'app-root', + styleUrl: './app.css', + templateUrl: './app.html', +}) +export class App { + authService = inject(AuthenticationService); + protected readonly title = signal('carparkvalidation'); + isAuth = computed(() => this.authService.authChange().firstName != ''); + + +} diff --git a/U22/src/app/concessionValidation/concessionvalidation.component.css b/U22/src/app/concessionValidation/concessionvalidation.component.css new file mode 100644 index 0000000..3db3368 --- /dev/null +++ b/U22/src/app/concessionValidation/concessionvalidation.component.css @@ -0,0 +1,12 @@ +table { + width: 100%; +} + +.mat-form-field { + font-size: 14px; + width: 100%; +} +td.mat-column-edit, .mat-column-delete { + width: 35px; + padding-right: 2px; +} diff --git a/U22/src/app/concessionValidation/concessionvalidation.component.html b/U22/src/app/concessionValidation/concessionvalidation.component.html new file mode 100644 index 0000000..9efbf9b --- /dev/null +++ b/U22/src/app/concessionValidation/concessionvalidation.component.html @@ -0,0 +1,99 @@ +
+

Concession Validation

+ @if (isAdmin) { +
+
+ + + + + + + + + + +
+ +
+ } + + + + + Date + Concession Type + Concession Card Number + Concession Holder Name + Validation Point + Expiry date checked + + @if(isAdmin) { + Staff Name + Delete + } + Edit + + + + + {{element.validateDate | date: 'dd/MM/yyyy HH:mm'}} + + {{element.concessionType}} + + + {{element.concessionCard}} + + + {{element.concessionHolder}} + + + {{element.validationPoint}} + + + + @if (element.concessionExpiry == true) + { + + } + @else { + + } + + + + + + + @if(isAdmin) { + + {{element.staffFirstName}} {{element.staffLastName}} + + + + + + + + } + + + + + + + diff --git a/U22/src/app/concessionValidation/concessionvalidation.component.ts b/U22/src/app/concessionValidation/concessionvalidation.component.ts new file mode 100644 index 0000000..856823a --- /dev/null +++ b/U22/src/app/concessionValidation/concessionvalidation.component.ts @@ -0,0 +1,149 @@ +import { Component, OnInit, OnDestroy, signal, inject } from '@angular/core'; + +import { ConcessionValidation } from '../models'; + +import { Utils } from '../shares'; + +import { Router, RouterModule } from '@angular/router'; +import { Subscription } from 'rxjs'; +import { ConcessionValidationService } from './concessionvalidation.service'; + +import { DatePickerModule } from 'primeng/datepicker'; +import { ConfirmationService, MessageService } from 'primeng/api'; +import { TableModule } from 'primeng/table'; +import { ButtonModule } from 'primeng/button'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { Pencil } from '@primeicons/angular/pencil'; +import { Times } from '@primeicons/angular/times'; +import { Check } from '@primeicons/angular/check'; + + +@Component({ + selector: 'concessionvalidation-list', + templateUrl: './concessionvalidation.component.html', + imports: [TableModule, ButtonModule, CommonModule, FormsModule, Check, Times, Pencil, DatePickerModule, RouterModule], + styleUrls: ['./concessionvalidation.component.css'] +}) +export class ConcessionValidationComponent implements OnInit, OnDestroy { + private concessionValidationService = inject(ConcessionValidationService); + private router = inject(Router); + private messageService = inject(MessageService); + private confirmationService = inject(ConfirmationService); + dataSource = signal([]); + isAdmin = false; + isAllowFilter = true; + fromDate = new Date(); + toDate = new Date(); + username = ''; + private subscription: Subscription = new Subscription(); + + msg = "[ConcessionValidation component]"; + + + /* + private store: Store + */ + constructor( + + + ) { + + this.isAdmin = Utils.getIsAdmin(); + } + //KeyboardEvent + applyFilter(event: Event) { + const filterValue = (event.target as HTMLInputElement).value; + // this.dataSource.filter = filterValue.trim().toLowerCase(); + } + ngOnInit(): void { + const user = Utils.getCurrentUser(); + // console.log(this.msg + "current login user ", user); + if (user.username === "") { + user.username = "60249360"; + this.messageService.add({ severity: 'error', summary: 'Error', detail: "you are not login! using my number " + user.username }); + } + this.username = user.username; + if (this.isAdmin) + this.username = ''; + const dateRange = this.concessionValidationService.getDate(); + // console.log("the date range for now ", dateRange); + if (dateRange.fromDate != '') + this.fromDate = dateRange.fromDate; + if (dateRange.toDate != '') + this.toDate = dateRange.toDate; + this.onLoad(); + /* + this.store.dispatch(validationActions.LoadValidationpoints()); + this.store.pipe(select(validationSelector.getAllValidations)).subscribe(result => this.dataSource.data = result); + */ + } + + + onLoad(): void { + const cDate = this.fromDate; + const tDate = this.toDate; + + this.subscription.add( + this.concessionValidationService.loadConcessionvalidationByStaffId(this.username, cDate, tDate) + .subscribe({ + next: result => { + //console.log(this.msg + "onInit load Data by staffId "+ this.username, result); + this.dataSource.set(result.data); + }, error: e => console.error("error in loading concession validation", e) + }) + ); + + //this.dataList$ = this.concessionValidationService.loadConcessionvalidationByStaffId(this.username, cDate, tDate) + // .pipe(catchError(err => {this.toastr.error(err.message); return EMPTY})); + } + setDate(): void { + this.concessionValidationService.setDateRange(this.fromDate, this.toDate); + } + showEdit(item: ConcessionValidation) { + // console.log(this.msg + "on row click", item); + this.setDate(); + this.router.navigate(['/concessionvalidation/' + item.id], { queryParams: { returnUrl: '/concessionvalidation' } }); + } + + deleteItem(id: number): void { + const message = "Are you sure you want to delete this?"; + const title = " Confirmation"; + this.confirmationService.confirm({ + + message: message, + header: title, + icon: 'pi pi-exclamation-triangle', + + accept: () => { + this.concessionValidationService.deleteConcessionvalidation(id) + .subscribe(result => { + console.log(this.msg + " deleteItem success", result); + let data = this.dataSource(); + let index: number = data.findIndex(d => d.id === id); + console.log(this.msg + "delete from datasource"); + data.splice(index, 1) + this.dataSource.set(data); + }, + error => { + + + console.log("error ", error); + } + ); + }, + reject: () => { + console.log(this.msg + "click on No to delete"); + } + }); + + } + + ngOnDestroy() { + this.subscription.unsubscribe(); + } + +} + + + diff --git a/U22/src/app/concessionValidation/concessionvalidation.edit.component.css b/U22/src/app/concessionValidation/concessionvalidation.edit.component.css new file mode 100644 index 0000000..3db3368 --- /dev/null +++ b/U22/src/app/concessionValidation/concessionvalidation.edit.component.css @@ -0,0 +1,12 @@ +table { + width: 100%; +} + +.mat-form-field { + font-size: 14px; + width: 100%; +} +td.mat-column-edit, .mat-column-delete { + width: 35px; + padding-right: 2px; +} diff --git a/U22/src/app/concessionValidation/concessionvalidation.edit.component.html b/U22/src/app/concessionValidation/concessionvalidation.edit.component.html new file mode 100644 index 0000000..d02ce91 --- /dev/null +++ b/U22/src/app/concessionValidation/concessionvalidation.edit.component.html @@ -0,0 +1,68 @@ +
+
+ {{getEditText()}} +
+
+
+ +
+ + + + +
+ @if(isAdmin) { +
+ + + +
+ } + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + @if(isAdmin) { +
+ + + + + + +
+ } +
+ +
+ +
+ + +
+
+ +
\ No newline at end of file diff --git a/U22/src/app/concessionValidation/concessionvalidation.edit.component.ts b/U22/src/app/concessionValidation/concessionvalidation.edit.component.ts new file mode 100644 index 0000000..545e2fb --- /dev/null +++ b/U22/src/app/concessionValidation/concessionvalidation.edit.component.ts @@ -0,0 +1,296 @@ +import { Component, inject, OnDestroy, OnInit, signal, ViewChild } from '@angular/core'; +import { Router, ActivatedRoute } from '@angular/router'; +import { FormGroup, Validators, ReactiveFormsModule, FormBuilder, FormControl } from '@angular/forms'; + +import { ConcessionValidation, Lookup, ResultModel } from '../models'; +import { Subject, Subscription } from 'rxjs'; +import { LookupService } from '../shares'; +import { ConcessionValidationService } from './concessionvalidation.service'; +import { Utils } from '../shares'; + +import moment from 'moment'; +import { ConfirmationService, MessageService } from 'primeng/api'; +import { ButtonModule } from 'primeng/button'; +import { InputTextModule } from 'primeng/inputtext'; +import { CheckboxModule } from 'primeng/checkbox'; +import { DatePickerModule } from 'primeng/datepicker'; +import { SelectModule } from 'primeng/select'; + +@Component({ + templateUrl: 'concessionvalidation.edit.component.html', + selector: 'concessionvalidation-edit', + imports: [ButtonModule, InputTextModule, CheckboxModule, DatePickerModule, + SelectModule, ReactiveFormsModule], + styleUrls: ['concessionvalidation.edit.component.css'] +}) +export class ConcessionValidationEditComponent implements OnInit, OnDestroy { + returnUrl = ""; + private formBuilder = inject(FormBuilder); + private lookupService = inject(LookupService); + private concessionValidationService = inject(ConcessionValidationService); + private router = inject(Router); + + private confirmationService = inject(ConfirmationService); + private messageService = inject(MessageService); + private route = inject(ActivatedRoute); + msg = "[concessionvalidation edit Component] " + isChange = true; // disable use false//true for not disable. make sure it true is disable button. + subChanged$ = new Subject(); + _id = -1; + isAdmin = false; + concessionTypes = signal([]); + validationPoints = signal([]); + + + private subscription: Subscription = new Subscription(); + concessionvalidationForm = this.formBuilder.group({ + id: [0], //Validators.required + validateDate: new FormControl(null), //Validators.required + concessionCard: ['', Validators.required], + concessionHolder: ['', Validators.required], + concessionExpiry: [false, Validators.required], //Validators.required + concessionTypeId: [-1, Validators.min(1)], + stafflinkNo: [''], //Validators.required + validationPointId: [-1, Validators.min(1)], + validationPoint: [''], //Validators.required + staffFirstName: [''], //Validators.required + staffLastName: [''], //Validators.required + staffEmail: [''], //Validators.required + active: [false], //Validators.required + }); + constructor() { + /* + this.concessionTypes = []; + let item:Lookup = {id:1,categoryId:0, description:'Health Care Card'}; + this.concessionTypes.push(item); + item = {id:3,categoryId:1, description:'Gold Veterans Affairs Card'}; + this.concessionTypes.push(item); + item = {id:3,categoryId:1, description:'Pensioner Concession Card'}; + this.concessionTypes.push(item); + */ + + } + searchCard(): void { + const cardNo = this.concessionvalidationForm.controls["concessionCard"].value ?? ''; + if (cardNo != "") { + const card$ = this.concessionValidationService.loadConcessionvalidationByCard(cardNo); + this.subscription.add(card$.subscribe({ + next: x => { + if (x.statusCode == 1) { + const data = x.data; + this.concessionvalidationForm.patchValue({ + concessionHolder: data.concessionHolder, + concessionTypeId: data.concessionTypeId, + + + }); + } + } + }) + ); + } + } + + ngOnInit(): void { + + this.returnUrl = this.route.snapshot.queryParams['returnUrl'] || '/'; + const id = Number(this.route.snapshot.paramMap.get('id')); + + // now load thing up + this._id = id; + + this.isAdmin = Utils.getIsAdmin(); + + this.subscription.add(this.lookupService.loadConcessionType().subscribe({ + next: x => this.concessionTypes.set(x.data), + error: e => console.error("error loading concession type", e) + } + )); + this.subscription.add( + this.lookupService.loadValidationPoint().subscribe({ + next: x => this.validationPoints.set(x.data), + error: e => console.error("error validation Point", e) + }) + + ); + this.subscription.add(this.concessionvalidationForm.valueChanges.subscribe(x => this.isChange = false)); + this.subscription.add(this.subChanged$.subscribe(x => this.isChange = x)); + const user = Utils.getCurrentUser(); + + console.log(this.msg + "current login user ", user); + if (user.username === "") { + user.username = "60249360"; + this.messageService.add({ severity: 'error', summary: 'Error', detail: "you are not login! using my number " + user.username }); + } + + if (this._id < 1) { + this.concessionvalidationForm.patchValue({ + validateDate: new Date(), + stafflinkNo: user.username, + staffFirstName: user.firstName, + staffLastName: user.lastName, + staffEmail: user.email, + validationPointId: user.validationPointId, + active: true + }); + } + else { + this.subscription.add( + this.concessionValidationService.loadConcessionvalidationById(id) + .subscribe({ + next: x => this.assignValue(x.data), + error: e => console.log(e.message) + })); + // console.log(this.msg + " load from db"+id); + + } + + } + + + get isFieldsChange() { + const chan = this.isChange || !this.concessionvalidationForm.valid; // this disable so need true valid = true not + const fvalid = this.concessionvalidationForm.valid; + // console.log(this.msg + "is fields change is valid: " + fvalid , chan,); + return chan; + } + getEditText(): string { + if (this._id > 0) + return "Edit Concession Validation"; + else + return "New Concession Validation"; + } + onChangeValidation($event: Event) { + //$event.target.value + //this.selectedCar = (event.target as HTMLSelectElement).value; + var val = ($event.target as HTMLSelectElement).value; + // console.log("the log for val " , val); + } + + assignValue(concessionvalidation: ConcessionValidation): void { + this.concessionvalidationForm.patchValue({ + id: concessionvalidation.id, + validateDate: moment(concessionvalidation.validateDate).toDate(), + concessionCard: concessionvalidation.concessionCard, + concessionHolder: concessionvalidation.concessionHolder, + concessionExpiry: concessionvalidation.concessionExpiry, + concessionTypeId: concessionvalidation.concessionTypeId, + stafflinkNo: concessionvalidation.stafflinkNo, + staffFirstName: concessionvalidation.staffFirstName, + staffLastName: concessionvalidation.staffLastName, + staffEmail: concessionvalidation.staffEmail, + validationPointId: concessionvalidation.validationPointId, + active: concessionvalidation.active, + }); + // disable use false//true for not disable. + this.subChanged$.next(true); + + } + + // convenience getter for easy access in form fields + get f() { return this.concessionvalidationForm.controls; } + + onSubmit(): void { + const OkToSave = this.concessionvalidationForm.valid; + + const checkActive = this.concessionvalidationForm.value.concessionExpiry ?? false; + console.log("onsubmit value", checkActive, this.concessionvalidationForm.value); + if (checkActive == false) { + this.messageService.add({ severity: 'error', summary: 'Check Concession Expiry', detail: 'Not Check Concession Expiry' }); + return; + } + if (OkToSave) { + const concessionvalidationValue = this.concessionvalidationForm.value; + const concessionvalidation: ConcessionValidation = { + id: concessionvalidationValue.id ?? 0, + validateDate: moment(concessionvalidationValue.validateDate).toDate(), + concessionCard: concessionvalidationValue.concessionCard ?? '', + concessionHolder: concessionvalidationValue.concessionHolder ?? '', + concessionExpiry: concessionvalidationValue.concessionExpiry ?? false, + concessionTypeId: concessionvalidationValue.concessionTypeId ?? 0, + stafflinkNo: concessionvalidationValue.stafflinkNo ?? '', + staffFirstName: concessionvalidationValue.staffFirstName ?? '', + staffLastName: concessionvalidationValue.staffLastName ?? '', + staffEmail: concessionvalidationValue.staffEmail ?? '', + validationPointId: concessionvalidationValue.validationPointId ?? 0, + active: concessionvalidationValue.active ?? false, + }; + // console.log(this.msg + "this is OKTOsave", concessionvalidation); + //if edit mode just save it don't check + if (concessionvalidation.id > 0) { + this.saveConcession(concessionvalidation); + } + else { + //check first only if new + this.checkAndSave(concessionvalidation); + } + } + else { + // console.log(this.msg + "this is NOT OKTOsave"); + this.messageService.add({ severity: 'error', summary: 'Error', detail: "please fill in the required fields" }); + + } + } + + checkAndSave(concessionvalidation: ConcessionValidation): void { + const currentDate = moment(concessionvalidation.validateDate).format("YYYY-MM-DD"); + const id = concessionvalidation.id; + this.subscription.add( + this.concessionValidationService.checkConcessionValidationByStaff(concessionvalidation.stafflinkNo, + concessionvalidation.concessionCard, currentDate, id) + .subscribe(x => { + let okTo = true; + if (x.data < 0) { + const message = "This card was used earlier today. Is it Ok to continue?"; + const title = "Alert"; + this.confirmationService.confirm({ + message: message, + header: 'Confirmation', + icon: 'pi pi-exclamation-triangle', + accept: () => { + this.saveConcession(concessionvalidation); + }, + reject: () => { + this.router.navigate([this.returnUrl]); + } + }); + + } + else { + this.saveConcession(concessionvalidation); + } + }) + ); + } + + saveConcession(concessionvalidation: ConcessionValidation): void { + //console.log(this.msg + " Save Concession validation to server"); + this.subscription.add( + this.concessionValidationService.saveConcessionvalidation(concessionvalidation) + .subscribe({ + next: x => { + if (x.statusCode >= 1) { + this.messageService.add({ severity: 'success', summary: 'Success', detail: "Save is OK" }); + this.router.navigate([this.returnUrl]); + } + else + this.messageService.add({ severity: 'error', summary: 'Fail to Save', detail: x.message }); + + }, error: e => { + const message = e || e.message; + this.messageService.add({ severity: 'error', summary: 'Fail to Save', detail: message }); + console.log("error ", e); + } + } + )); + } + + goBack(): void { + this.router.navigate([this.returnUrl]); + } + + ngOnDestroy() { + this.subscription.unsubscribe(); + } + +} diff --git a/U22/src/app/concessionValidation/concessionvalidation.service.ts b/U22/src/app/concessionValidation/concessionvalidation.service.ts new file mode 100644 index 0000000..7cba1a8 --- /dev/null +++ b/U22/src/app/concessionValidation/concessionvalidation.service.ts @@ -0,0 +1,102 @@ +import { Injectable, Inject } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { ConcessionValidation, ResultModel, ConfigureUrl } from '../models'; +import moment from 'moment'; +import { AppSettingService } from '../shares'; +@Injectable({ providedIn: 'root' }) +export class ConcessionValidationService { + private dateRange: any; + constructor(private http: HttpClient, + private appSetting: AppSettingService + ) { + this.dateRange = {}; + this.dateRange.fromDate = ''; + this.dateRange.toDate = ''; + console.log("constructor concessionValidationService daterange", this.dateRange); + } + public setDateRange(fromDate: any, toDate: any) { + this.dateRange.fromDate = moment(fromDate).toDate(); + this.dateRange.toDate = moment(toDate).toDate(); + // console.log("concessionValidationService setdaterange", this.dateRange); + } + public getDate(): any { + // console.log("concessionValidationService getdaterange", this.dateRange); + return this.dateRange; + } + loadConcessionvalidations(): Observable> { + const baseUrl = this.appSetting.appSetting.baseUrl + "/" + ConfigureUrl.concessionValidationUrl; + let config = { headers: { 'Content-Type': 'application/json' } }; + // console.log("the concession", baseUrl); + return this.http.get>(baseUrl); + } + loadConcessionvalidationByStaffId(staffLinkId: string, fromDate: Date, toDate: Date): Observable> { + this.setDateRange(fromDate, toDate); + const strDate = moment(fromDate).format("YYYY-MM-DD"); + const strtoDate = moment(toDate).format("YYYY-MM-DD"); + const url = this.appSetting.appSetting.baseUrl + "/" + ConfigureUrl.concessionValidationByIdUrl; + const params = new HttpParams().set("staffLinkNo", staffLinkId) + .set("fromDate", strDate) + .set("toDate", strtoDate); + const headers = new HttpHeaders().set('Content-Type', 'application/json'); + const options = { + headers: headers, + params: params + }; + //console.log("loadConcessionvalidationByStaffId url", url); + return this.http.get>(url, options); + } + loadConcessionvalidationById(id: number): Observable> { + let params = new HttpParams().set("id", "" + id); + const baseUrl = this.appSetting.appSetting.baseUrl + "/" + ConfigureUrl.concessionValidationUrl; + let headers = new HttpHeaders().set('Content-Type', 'application/json'); + let options = { + headers: headers, + params: params + }; + //return this.http.get(this.baseUrl + 'api/Concessionvalidation/LoadConcessionvalidationById',options); + return this.http.get>(baseUrl + "/" + id); + } + loadConcessionvalidationByCard(cardNo: string): Observable> { + const data = { cardNo }; + const baseUrl = this.appSetting.appSetting.baseUrl + "/" + ConfigureUrl.concessionValidationUrl + "/GetConcessionCard"; + /* + let params = new HttpParams().set("id", "" + id); + + let headers = new HttpHeaders().set('Content-Type', 'application/json'); + let options = { + headers: headers, + params: params + }; + */ + //return this.http.get(this.baseUrl + 'api/Concessionvalidation/LoadConcessionvalidationById',options); + return this.http.post>(baseUrl, data); + } + checkConcessionValidationByStaff(staffLinkNo: string, concessionCard: string, currentDate: string, id: number): Observable> { + let params = new HttpParams().set("staffLinkNo", staffLinkNo) + .set("concessionCard", concessionCard) + .set("currentDate", currentDate) + .set("id", "" + id); + + let headers = new HttpHeaders().set('Content-Type', 'application/json'); + let options = { + headers: headers, + params: params + }; + const baseUrl = this.appSetting.appSetting.baseUrl; + const url = baseUrl + "/" + ConfigureUrl.CheckConcessionValidationByStaffUrl; + //return this.http.get(this.baseUrl + 'api/Concessionvalidation/LoadConcessionvalidationById',options); + return this.http.get>(url, options); + } + saveConcessionvalidation(item: ConcessionValidation): Observable> { //insert Concessionvalidation + let config = { headers: { 'Content-Type': 'application/json' } }; + const baseUrl = this.appSetting.appSetting.baseUrl + "/" + ConfigureUrl.concessionValidationUrl; + return this.http.post>(baseUrl, item, config); + } + deleteConcessionvalidation(Id: number): Observable> { + let config = { headers: { 'Content-Type': 'application/json' } }; + const baseUrl = this.appSetting.appSetting.baseUrl + "/" + ConfigureUrl.concessionValidationUrl; + return this.http.delete>(baseUrl + "/" + Id); + } +} + diff --git a/U22/src/app/concessionValidation/index.ts b/U22/src/app/concessionValidation/index.ts new file mode 100644 index 0000000..208fad4 --- /dev/null +++ b/U22/src/app/concessionValidation/index.ts @@ -0,0 +1,4 @@ +export * from './concessionvalidation.component'; +export * from './concessionvalidation.edit.component'; +export * from './concessionvalidation.service'; + diff --git a/U22/src/app/concessiontype/concessiontype.component.css b/U22/src/app/concessiontype/concessiontype.component.css new file mode 100644 index 0000000..3db3368 --- /dev/null +++ b/U22/src/app/concessiontype/concessiontype.component.css @@ -0,0 +1,12 @@ +table { + width: 100%; +} + +.mat-form-field { + font-size: 14px; + width: 100%; +} +td.mat-column-edit, .mat-column-delete { + width: 35px; + padding-right: 2px; +} diff --git a/U22/src/app/concessiontype/concessiontype.component.html b/U22/src/app/concessiontype/concessiontype.component.html new file mode 100644 index 0000000..c953727 --- /dev/null +++ b/U22/src/app/concessiontype/concessiontype.component.html @@ -0,0 +1,45 @@ +
+

Concession Type

+ + + + + + + + Description + Display + Active + Edit + + + + + {{ item.description }} + {{item.display}} + + @if(item.active == true) { + + } + @else { + + } + + + + + + + + + + +
\ No newline at end of file diff --git a/U22/src/app/concessiontype/concessiontype.component.ts b/U22/src/app/concessiontype/concessiontype.component.ts new file mode 100644 index 0000000..47c7067 --- /dev/null +++ b/U22/src/app/concessiontype/concessiontype.component.ts @@ -0,0 +1,99 @@ +import { Component, OnInit, OnDestroy, signal, inject } from '@angular/core'; +import { ConcessionTypeService } from './concessiontype.service'; +import { ConcessionType } from '../models'; + + +import { take } from 'rxjs/operators'; +import { Router, RouterModule } from '@angular/router'; +import { Subscription } from 'rxjs'; +import { MessageService } from 'primeng/api'; +import { ButtonModule } from 'primeng/button'; +import { Pencil } from '@primeicons/angular/pencil'; +import { TableModule } from 'primeng/table'; +import { Check } from '@primeicons/angular/check'; +import { Times } from '@primeicons/angular/times'; + +@Component({ + selector: 'concessiontype-list', + templateUrl: './concessiontype.component.html', + imports: [ButtonModule, TableModule, RouterModule, Pencil, Check, Times], + styleUrls: ['./concessiontype.component.css'] +}) +export class ConcessionTypeComponent implements OnInit, OnDestroy { + private concessionTypeService = inject(ConcessionTypeService); + private messageService = inject(MessageService); + private router = inject(Router); + dataSource = signal([]); + + private subscription: Subscription = new Subscription(); + + + msg = "[concessionType.com]"; + + + /* + private store: Store + */ + constructor( + + ) { + + } + /* + applyFilter($event:any) { + const filterValue = $event.target.value; + this.dataSource.filter = filterValue.trim().toLowerCase(); + } + */ + ngOnInit(): void { + this.subscription.add( + this.concessionTypeService.loadConcessiontypes().subscribe( + { + next: result => { + // console.log(this.msg + "onInit", result); + this.dataSource.set(result.data); + }, error: e => { + + console.log("error ", e); + } + } + ) + ); + + /* + this.store.dispatch(validationActions.LoadValidationpoints()); + this.store.pipe(select(validationSelector.getAllValidations)).subscribe(result => this.dataSource.data = result); + */ + } + + + showEdit(item: ConcessionType) { + console.log(this.msg + "on row click", item); + this.router.navigate(['/concessiontype/' + item.id], { queryParams: { returnUrl: '/concessiontype' } }); + } + deleteItem(id: number): void { + + this.concessionTypeService.deleteConcessiontype(id) + .pipe(take(1)) + .subscribe(result => { + // console.log(this.msg + " deleteItem success", result); + let data = this.dataSource(); + let index: number = data.findIndex(d => d.id === id); + // console.log(this.msg + "delete from datasource"); + data.splice(index, 1) + this.dataSource.set(data); + }, + error => { + + console.log("error ", error); + } + ); + + } + ngOnDestroy() { + this.subscription.unsubscribe(); + } +} + + + diff --git a/U22/src/app/concessiontype/concessiontype.edit.component.css b/U22/src/app/concessiontype/concessiontype.edit.component.css new file mode 100644 index 0000000..3db3368 --- /dev/null +++ b/U22/src/app/concessiontype/concessiontype.edit.component.css @@ -0,0 +1,12 @@ +table { + width: 100%; +} + +.mat-form-field { + font-size: 14px; + width: 100%; +} +td.mat-column-edit, .mat-column-delete { + width: 35px; + padding-right: 2px; +} diff --git a/U22/src/app/concessiontype/concessiontype.edit.component.html b/U22/src/app/concessiontype/concessiontype.edit.component.html new file mode 100644 index 0000000..7ff5bda --- /dev/null +++ b/U22/src/app/concessiontype/concessiontype.edit.component.html @@ -0,0 +1,34 @@ +
+
{{getEditText()}}
+
+
+ + +
+ + + + +
+
+ + + + +
+
+ + +
+ +
+
+ + +
+
+ +
\ No newline at end of file diff --git a/U22/src/app/concessiontype/concessiontype.edit.component.ts b/U22/src/app/concessiontype/concessiontype.edit.component.ts new file mode 100644 index 0000000..346efc6 --- /dev/null +++ b/U22/src/app/concessiontype/concessiontype.edit.component.ts @@ -0,0 +1,122 @@ +import { Component, inject, OnInit, ViewChild } from '@angular/core'; +import { UntypedFormBuilder, FormGroup, Validators, ReactiveFormsModule, FormBuilder } from '@angular/forms'; +import { Router, ActivatedRoute } from '@angular/router'; + +import { ConcessionType } from '../models'; +import { Subject, pipe, Subscription } from 'rxjs'; +import { ConcessionTypeService } from './concessiontype.service'; +import { MessageService } from 'primeng/api'; +import { ButtonModule } from 'primeng/button'; +import { CheckboxModule } from 'primeng/checkbox'; +import { InputTextModule } from 'primeng/inputtext'; + +@Component({ + templateUrl: 'concessiontype.edit.component.html', + selector: 'concessiontype-edit', + imports: [ButtonModule, CheckboxModule, ReactiveFormsModule, InputTextModule], + styleUrls: ['concessiontype.edit.component.css'] +}) +export class ConcessiontypeEditComponent implements OnInit { + private formBuilder = inject(FormBuilder); + private messageService = inject(MessageService); + private concessionTypeService = inject(ConcessionTypeService); + private route = inject(ActivatedRoute); + private router = inject(Router); + returnUrl = ''; + _id = -1; + msg = "[Concession type edit Component] "; + isChange = true; // disable use false//true for not disable. make sure it true is disable button. + private subscription: Subscription = new Subscription(); + subChanged$ = new Subject(); + concessiontypeForm = this.formBuilder.group({ + id: [0], //Validators.required + description: [''], //Validators.required + display: [''], //Validators.required + active: [false], //Validators.required + }); + constructor() { } + ngOnInit(): void { + this.returnUrl = this.route.snapshot.queryParams['returnUrl'] || '/'; + const id = Number(this.route.snapshot.paramMap.get('id')); + // now load thing up + this.subscription.add(this.concessiontypeForm.valueChanges.subscribe(x => this.isChange = false)); + this.subscription.add(this.subChanged$.subscribe(x => this.isChange = x)); + if (id > 0) { + this.subscription.add( + this.concessionTypeService.loadConcessiontypeById(id).subscribe({ + next: x => { + this.assignValue(x.data) + }, error: e => { + + console.log("error ", e); + } + } + ) + ); + } + } + getEditText(): string { + if (this._id > 0) + return "Edit Concession Type"; + else + return "New Concession Type"; + } + // this for disable submit button + get isFieldsChange() { + const chan = this.isChange || !this.concessiontypeForm.valid; // this disable so need true valid = true not + //console.log(this.msg + 'is fields change', chan); + return chan; + } + assignValue(concessiontype: ConcessionType): void { + this.concessiontypeForm.patchValue({ + id: concessiontype.id, + description: concessiontype.description, + display: concessiontype.display, + active: concessiontype.active, + }); + // disable use false//true for not disable. + this.subChanged$.next(true); + + } + + // convenience getter for easy access in form fields + get f() { return this.concessiontypeForm.controls; } + + onSubmit(): void { + // if form valid then go save + //make sure + const okToSave = this.concessiontypeForm.valid; + if (okToSave) { + let concessiontypeValue = this.concessiontypeForm.value; + let concessiontype: ConcessionType = { + id: concessiontypeValue.id ?? 0, + description: concessiontypeValue.description ?? '', + display: concessiontypeValue.display ?? '', + active: concessiontypeValue.active ?? false, + }; + + this.subscription.add(this.concessionTypeService.saveConcessiontype(concessiontype).subscribe(x => { + //console.log("after save return is", x); + if (x.statusCode > 0) { + //alert("save ok"); + + this.messageService.add({ severity: 'success', summary: 'Success', detail: "Save is OK" }); + this.router.navigate([this.returnUrl]); + //this.router.navigate(['/home/concessiontype']) + } + }, + error => { + + console.log("error ", error); + } + )); + } + } + goBack(): void { + this.router.navigate([this.returnUrl]); + } + ngOnDestroy() { + this.subscription.unsubscribe(); + } + +} diff --git a/U22/src/app/concessiontype/concessiontype.service.ts b/U22/src/app/concessiontype/concessiontype.service.ts new file mode 100644 index 0000000..75ba971 --- /dev/null +++ b/U22/src/app/concessiontype/concessiontype.service.ts @@ -0,0 +1,40 @@ + +import { Injectable, Inject } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { ConcessionType, ResultModel, ConfigureUrl } from '../models'; +import { AppSettingService } from '../shares'; + +@Injectable({ providedIn: 'root' }) +export class ConcessionTypeService { + + constructor(private http: HttpClient, + private appSetting :AppSettingService + ) {} + loadConcessiontypes(): Observable > { + const baseUrl = this.appSetting.appSetting.baseUrl + "/" +ConfigureUrl.concessionTypeUrl; + let config = { headers : { 'Content-Type': 'application/json' } }; + return this.http.get>(baseUrl); + } + loadConcessiontypeById(id:number): Observable> { + const baseUrl = this.appSetting.appSetting.baseUrl + "/" +ConfigureUrl.concessionTypeUrl; + let params = new HttpParams().set("id", ""+id); + let headers = new HttpHeaders().set('Content-Type', 'application/json'); + let options = { + headers: headers, + params: params + }; + + return this.http.get>(baseUrl +"/"+id); + } + saveConcessiontype(concessType:ConcessionType): Observable> { //insert Concessiontype + const baseUrl = this.appSetting.appSetting.baseUrl + "/" +ConfigureUrl.concessionTypeUrl; + let config = { headers : { 'Content-Type': 'application/json' } }; + return this.http.post>(baseUrl , concessType, config); + } + deleteConcessiontype(id:number): Observable>{ + const baseUrl = this.appSetting.appSetting.baseUrl + "/" +ConfigureUrl.concessionTypeUrl; + let config = { headers : { 'Content-Type': 'application/json' } }; + return this.http.delete>(baseUrl +"/" + id); + } +} diff --git a/U22/src/app/concessiontype/index.ts b/U22/src/app/concessiontype/index.ts new file mode 100644 index 0000000..3e6671c --- /dev/null +++ b/U22/src/app/concessiontype/index.ts @@ -0,0 +1,4 @@ +export * from './concessiontype.component'; +export * from './concessiontype.edit.component'; +export * from './concessiontype.service'; + diff --git a/U22/src/app/concessionvalidationreport/concessionvalidationreport.component.css b/U22/src/app/concessionvalidationreport/concessionvalidationreport.component.css new file mode 100644 index 0000000..e69de29 diff --git a/U22/src/app/concessionvalidationreport/concessionvalidationreport.component.html b/U22/src/app/concessionvalidationreport/concessionvalidationreport.component.html new file mode 100644 index 0000000..c0c2749 --- /dev/null +++ b/U22/src/app/concessionvalidationreport/concessionvalidationreport.component.html @@ -0,0 +1,24 @@ +
+

Concession Validation Report

+
+
+ + + +
+
+ + + +
+
+ +
+
+
+

User Report

+
+ +
+
+
\ No newline at end of file diff --git a/U22/src/app/concessionvalidationreport/concessionvalidationreport.component.ts b/U22/src/app/concessionvalidationreport/concessionvalidationreport.component.ts new file mode 100644 index 0000000..5c4edc2 --- /dev/null +++ b/U22/src/app/concessionvalidationreport/concessionvalidationreport.component.ts @@ -0,0 +1,96 @@ +import { Component, inject, OnInit } from '@angular/core'; +import { ReactiveFormsModule, UntypedFormBuilder, Validators } from '@angular/forms'; +import moment from 'moment'; +import { HttpUtility, CommonUtilities } from '../shares'; +import { catchError, finalize } from 'rxjs/operators'; +import { EMPTY } from 'rxjs'; + +import { HttpResponse } from '@angular/common/http'; +import { ActivatedRoute, Router } from '@angular/router'; +import { MessageService } from 'primeng/api'; +import { ButtonModule } from 'primeng/button'; +import { DatePickerModule } from 'primeng/datepicker'; + +@Component({ + selector: 'app-concessionvalidation-report', + templateUrl: './concessionvalidationreport.component.html', + imports: [ReactiveFormsModule, ButtonModule, DatePickerModule], + styleUrls: ['./concessionvalidationreport.component.css'] +}) +export class ConcessionvalidationReportComponent implements OnInit { + private formBuilder = inject(UntypedFormBuilder); + private http = inject(HttpUtility); + + private route = inject(ActivatedRoute); + private messageService = inject(MessageService); + msg = "[concessionvalidation] "; + returnUrl = ""; + concessionvalidationreportForm = this.formBuilder.group({ + + fromDate: [new Date()], //Validators.required + toDate: [new Date(), Validators.required], + + }); + + constructor( + + ) { + + } + + onDownload(): void { + + const constDate = this.concessionvalidationreportForm.value; + const fromDate = moment(constDate.fromDate).format("YYYY-MM-DD"); + const toDate = moment(constDate.toDate).format("YYYY-MM-DD"); + console.log(this.msg + "click on download", fromDate); + + //GetReportFile + this.http.getFileResponse(`api/v1/ConcessionValidation/GetReportFile?fromDate=${fromDate}&toDate=${toDate}`).pipe( + catchError(err => { + + return EMPTY; + }), + finalize(() => { + + this.messageService.add({ severity: 'success', summary: 'Success', detail: "download completed ok to view now" }); + })).subscribe((response: HttpResponse) => { + if (response) { + console.log("the download report response", response); + CommonUtilities.downloadFile(response, 'report.xlsx'); + } + }); + + } + + onDownloadUser(): void { + //GetReportFile + this.http.getFileResponse(`api/v1/Users/GetReportFile`).pipe( + catchError(err => { + + return EMPTY; + }), + finalize(() => { + this.messageService.add({ severity: 'success', summary: 'Success', detail: "download completed ok to view now" }); + })).subscribe((response: HttpResponse) => { + if (response) { + console.log("the download user report response", response); + CommonUtilities.downloadFile(response, 'UserReport.xlsx'); + } + }); + } + + ngOnInit(): void { + this.returnUrl = this.route.snapshot.queryParams['returnUrl'] || '/'; + this.assignValue(); + } + + assignValue(): void { + this.concessionvalidationreportForm.patchValue({ + fromDate: new Date(), + toDate: moment(new Date()).add(30, 'd') + + }); + } + +} diff --git a/U22/src/app/concessionvalidationreport/index.ts b/U22/src/app/concessionvalidationreport/index.ts new file mode 100644 index 0000000..a6cea44 --- /dev/null +++ b/U22/src/app/concessionvalidationreport/index.ts @@ -0,0 +1 @@ +export * from './concessionvalidationreport.component'; \ No newline at end of file diff --git a/U22/src/app/login/index.ts b/U22/src/app/login/index.ts new file mode 100644 index 0000000..22d615d --- /dev/null +++ b/U22/src/app/login/index.ts @@ -0,0 +1,2 @@ +export * from './login.component'; + diff --git a/U22/src/app/login/login.component.css b/U22/src/app/login/login.component.css new file mode 100644 index 0000000..f93262f --- /dev/null +++ b/U22/src/app/login/login.component.css @@ -0,0 +1,5 @@ +.btnloginRigh { + display: flex; + flex-direction:reverse; + justify-content:flex-end; +} diff --git a/U22/src/app/login/login.component.html b/U22/src/app/login/login.component.html new file mode 100644 index 0000000..92eb0b0 --- /dev/null +++ b/U22/src/app/login/login.component.html @@ -0,0 +1,47 @@ +
+
+ + Nepean Car Park Validation +
+

Please Login to Continue

+
+ + + + + + + + +
+
+ +
+ +
+
+

+ Please NOTE access to this database is restricted to approved employees for parking validations only. + If you require access to this database or further information, please email +

+ {{adminEmail}} + + +
+
+ @if(error) { +
{{error}}
+ } +
+ +
+
\ No newline at end of file diff --git a/U22/src/app/login/login.component.ts b/U22/src/app/login/login.component.ts new file mode 100644 index 0000000..ef985cb --- /dev/null +++ b/U22/src/app/login/login.component.ts @@ -0,0 +1,82 @@ +import { Component, inject, OnInit, signal } from '@angular/core'; +import { Router, ActivatedRoute } from '@angular/router'; +import { Validators, FormBuilder, ReactiveFormsModule } from '@angular/forms'; +import { first } from 'rxjs/operators'; + +import { AuthenticationService } from '../user-services'; +import { AppSettingService } from '../shares'; +import { CardModule } from 'primeng/card'; +import { InputTextModule } from 'primeng/inputtext'; +import { CommonModule } from '@angular/common'; +import { ButtonModule } from 'primeng/button'; +@Component({ + templateUrl: './login.component.html', + styleUrls: ['./login.component.css'], + imports: [CardModule, ButtonModule, InputTextModule, ReactiveFormsModule, CommonModule], + selector: 'login' +}) +export class LoginComponent implements OnInit { + private formBuilder = inject(FormBuilder); + private route = inject(ActivatedRoute); + private router = inject(Router); + private appSetting = inject(AppSettingService); + private authenticationService = inject(AuthenticationService); + loginForm = this.formBuilder.group({ + username: ['', Validators.required], + password: ['', Validators.required] + }); + + loading = signal(false); + + adminEmail = ""; + // get return url from route parameters or default to '/' + returnUrl = this.route.snapshot.queryParams['returnUrl'] || '/concessionvalidation'; + error = ''; + + constructor( + ) { + this.adminEmail = this.appSetting.appSetting.adminEmail; + } + + ngOnInit() { + + // reset login status + this.authenticationService.logout(); + + + } + + // convenience getter for easy access to form fields + get f() { return this.loginForm.controls; } + + onSubmit() { + + + // stop here if form is invalid + if (this.loginForm.invalid) { + return; + } + + this.loading.set(true); + this.authenticationService.login(this.f.username.value ?? '', this.f.password.value ?? '') + .pipe(first()) + .subscribe({ + next: data => { + this.loading.set(false); + console.log("login result ", data); + if (data == 1) + this.router.navigate([this.returnUrl]); + else { + this.loginForm.patchValue({ password: '' }); + alert("Invalid Username or Password. Please try again."); + + } + }, + error: er => { + console.log("error in login", er); + this.error = er.message; + this.loading.set(false); + } + }); + } +} diff --git a/U22/src/app/models/adminuser.ts b/U22/src/app/models/adminuser.ts new file mode 100644 index 0000000..c99fa8b --- /dev/null +++ b/U22/src/app/models/adminuser.ts @@ -0,0 +1,21 @@ +export interface AdminUser { + id: number, + stafflinkNo: string, + name: string, + addedBy: string, + addedOn: Date, + active: boolean, + roleType: number, + validationPointId: number, +} + +export interface AdminUserView { + id: number, + stafflinkNo: string, + name: string, + addedBy: string, + addedOn: Date, + active: boolean, + roleType: string, + validationPoint: string, +} \ No newline at end of file diff --git a/U22/src/app/models/concessiontype.ts b/U22/src/app/models/concessiontype.ts new file mode 100644 index 0000000..247ef14 --- /dev/null +++ b/U22/src/app/models/concessiontype.ts @@ -0,0 +1,6 @@ +export interface ConcessionType { + id: number, + description: string, + display: string, + active: boolean, +} diff --git a/U22/src/app/models/concessionvalidation.ts b/U22/src/app/models/concessionvalidation.ts new file mode 100644 index 0000000..6bf2089 --- /dev/null +++ b/U22/src/app/models/concessionvalidation.ts @@ -0,0 +1,14 @@ +export interface ConcessionValidation { + id: number, + validateDate: Date, + concessionCard: string, + concessionHolder: string, + concessionExpiry: boolean, + concessionTypeId: number, + stafflinkNo: string, + staffFirstName:string, + staffLastName:string, + staffEmail:string, + validationPointId: number, + active: boolean, +} diff --git a/U22/src/app/models/configureUrl.ts b/U22/src/app/models/configureUrl.ts new file mode 100644 index 0000000..da09464 --- /dev/null +++ b/U22/src/app/models/configureUrl.ts @@ -0,0 +1,17 @@ +export enum ConfigureUrl +{ + //baseUrl = "http://localhost:61744", + + authenticateUrl = "api/v1/Users/Authenticate", //no use anymore + loginADUrl = "api/v1/Users/LoginAD", + loginApiUrl = "api/v1/Users/LoginApiAD", + validationPoint = "api/v1/ValidationPoint", //no "/" at the front + adminUserUrl = "api/v1/AdminUser", + concessionValidationUrl = "api/v1/ConcessionValidation", + concessionValidationByIdUrl = "api/v1/ConcessionValidation/ConcessionValidationByStaff", + CheckConcessionValidationByStaffUrl = "api/v1/ConcessionValidation/CheckConcessionValidationByStaff", + concessionTypeUrl = "api/v1/ConcessionType", + userByStaffIdUrl = "api/v1/Users/SearchApiStaff", + luConcessionTypeUrl = "api/v1/LookupCode/ConcessionTypes", + luValidationPointUrl = "api/v1/LookupCode/ValidationPoints", +} \ No newline at end of file diff --git a/U22/src/app/models/enum.ts b/U22/src/app/models/enum.ts new file mode 100644 index 0000000..126dd1c --- /dev/null +++ b/U22/src/app/models/enum.ts @@ -0,0 +1,44 @@ +export const MIMEType = { + png: 'image/png', + jpg: 'image/jpg', + jpeg: 'image/jpeg', + gif: 'image/gif', + txt: 'text/plain', + pdf: 'application/pdf' +}; + + +//for status of object 0 no change, 1 changed , -1 is deleted. +export enum mState { + Delete = -1, + NoChange = 0, + Modified = 1, + New =2, +}; + +export enum PickListType { + Ok =0, + BodyPart = 16, // Body Part + Location = 17, + Equipment = 18, + LocationType = 19, + CheckList = 20, + Company = 21, + NonConformance = 22, + Occupation = 23, + IncidentType = 24, + InvestigationAgency = 25, + OutCome = 26, + Visibility = 27, + Surface = 28, + Lighting = 29, + Weather = 30, + CauseOfPrimaryInjury = 31, + ContributingFactor = 32, + HazardControlType = 33, +} + +export enum userRole { + Normal = 1, + Admin = 2, +}; diff --git a/U22/src/app/models/index.ts b/U22/src/app/models/index.ts new file mode 100644 index 0000000..3b5f555 --- /dev/null +++ b/U22/src/app/models/index.ts @@ -0,0 +1,9 @@ +export * from './user'; +export * from './validationpoint'; +export * from './enum'; +export * from './resultmodel'; +export * from './adminuser'; +export * from './configureUrl'; +export * from './concessionvalidation'; +export * from './lookup'; +export * from './concessiontype'; \ No newline at end of file diff --git a/U22/src/app/models/lookup.ts b/U22/src/app/models/lookup.ts new file mode 100644 index 0000000..0fe80ed --- /dev/null +++ b/U22/src/app/models/lookup.ts @@ -0,0 +1,7 @@ + +export interface Lookup { + id: number; + categoryId: number; + description: string; +}; + diff --git a/U22/src/app/models/lookupcode.ts b/U22/src/app/models/lookupcode.ts new file mode 100644 index 0000000..6b51e42 --- /dev/null +++ b/U22/src/app/models/lookupcode.ts @@ -0,0 +1,44 @@ +export interface treeLookupCode { + id: number; + code: string; + description: string; + canCheck: number; // 0 no 1 is yes + hasChild: number; // 0 no 1 is yes +} + +export interface LookupCode { + id: number; + code: string; + description: string; +} + +export interface LookupEnumContainer { + enumId: number; + list: LookupCode[]; +} + +export interface BusinessUnitLookup { + id: number; + abbreviation: string; + levelID: number; + name: string; + parentID: number; +} + +export interface LookupBUData { + allowMultiSelect: boolean; + pickListTitle: string; + lookupList: BusinessUnitLookup[]; +} + + +export interface LookupData { + allowMultiSelect:boolean; + pickListTitle: string; + lookupList: LookupCode[]; +}; + +export interface LookupCodeContainer { + list: LookupCode[]; + totalPages: number; +} diff --git a/U22/src/app/models/pagequery.ts b/U22/src/app/models/pagequery.ts new file mode 100644 index 0000000..f14dbf6 --- /dev/null +++ b/U22/src/app/models/pagequery.ts @@ -0,0 +1,7 @@ + +export interface PageQuery { + pageIndex: number; + pageSize: number; + search: string; +}; + diff --git a/U22/src/app/models/person.ts b/U22/src/app/models/person.ts new file mode 100644 index 0000000..5697d39 --- /dev/null +++ b/U22/src/app/models/person.ts @@ -0,0 +1,80 @@ +import { Lookup } from './lookup'; + +export interface SharePersonContainer { + list: PersonLite[]; + totalPages: number; +} +export interface PersonLite { + id: number; + firstName: string; + surname: string; + referenceNo: string; + payrollNo: number; + email: string; + phoneNo: string; +} + +export interface PersonLookup { + categorys: Lookup[]; + title: Lookup[]; ///for source + positions: Lookup[]; ///for source + companys: Lookup[]; + personStatus: Lookup[]; + englishLevel: Lookup[]; + yesNoPickList: Lookup[]; + language: Lookup[]; + residence: Lookup[]; + nationality: Lookup[]; + gender: Lookup[]; + +} + +export interface PersonContainer { + person: Person; + +} + +export class Person { + id: number =0; + titleId: number =0; + firstName: string = ''; + surname: string = ''; + referenceNo: string = ''; + workNo: string = ''; + email: string = ''; + categoryId: number = 0; + statusId: number = 0; + statusDate: string = ''; + businessUnitId: number = 0; + businessUnitDesc: string = ''; +} + +export interface PersonDetail { + street: string; + postCode: string; + suburb: string; + state: string; + country: string; + home: string; + fax: string; + mobile: string; + work: string; + email: string; + + mailStreetPostCode: string; + mailPostCode: string; + mailSuburb: string; + mailState: string; + mailCountry: string; + + dateOfBirth: string; + genderId: number; + nationalityId: number; + residenceId: number; + englishLevelId: number; + interpretRequired: number; + + languageSpokenId: string; + driverLicenceNo: string; + expiryDate: string; +} diff --git a/U22/src/app/models/picklist.ts b/U22/src/app/models/picklist.ts new file mode 100644 index 0000000..c14b719 --- /dev/null +++ b/U22/src/app/models/picklist.ts @@ -0,0 +1,45 @@ +import { BehaviorSubject } from 'rxjs'; +import { treeLookupCode } from './lookupcode'; + +enum EnumLookup { + BodyPart = 16, + Location = 17, + Equipment = 18, + LocationType = 19, + CheckList = 20 +} + +export class DataNode { + loaded: boolean = false; + name: string =''; + id: number = 0; + children: DataNode[] =[]; + +} + +export class UIDataNode { + allowMultiSelect: boolean = false; + pickListTitle: string = ''; + enumPickType: number = 0; + children: treeLookupCode[] = []; +} + +/** Nested node */ +export class DataNode$ { + childrenChange = new BehaviorSubject([]); + expanable = new BehaviorSubject(true); + + + get children(): DataNode$[] { + return this.childrenChange.value; + } + get isExpanable(): boolean { + return this.expanable.value; + } + constructor(public id: number, + public name: string, + public canCheck: boolean, + public hasChildren: boolean, + public parentId: number, + public loadMoreParentItem: number | null = null) { } +} diff --git a/U22/src/app/models/resultmodel.ts b/U22/src/app/models/resultmodel.ts new file mode 100644 index 0000000..1ea43e3 --- /dev/null +++ b/U22/src/app/models/resultmodel.ts @@ -0,0 +1,5 @@ +export interface ResultModel { + data: T; + message: string; + statusCode:number; +} \ No newline at end of file diff --git a/U22/src/app/models/user.ts b/U22/src/app/models/user.ts new file mode 100644 index 0000000..ec75deb --- /dev/null +++ b/U22/src/app/models/user.ts @@ -0,0 +1,10 @@ +export class User { + id: number = 0; + username: string = ''; + role: number = -1; + firstName: string = ''; + lastName: string = ''; + email:string = ''; + token:string =''; + validationPointId:number = 0; +} diff --git a/U22/src/app/models/validationpoint.ts b/U22/src/app/models/validationpoint.ts new file mode 100644 index 0000000..21e7f70 --- /dev/null +++ b/U22/src/app/models/validationpoint.ts @@ -0,0 +1,6 @@ +export interface ValidationPoint { + id: number, + description: string, + display: string, + active: boolean, +} diff --git a/U22/src/app/mytheme_aura.ts b/U22/src/app/mytheme_aura.ts new file mode 100644 index 0000000..2d8fb89 --- /dev/null +++ b/U22/src/app/mytheme_aura.ts @@ -0,0 +1,5235 @@ + +import Aura from "@primeuix/themes/aura"; +import { definePreset } from "@primeuix/themes"; +const MyPreset = definePreset(Aura, { + primitive: { + borderRadius: { + none: "0", + xs: "2px", + sm: "4px", + md: "6px", + lg: "8px", + xl: "12px" + }, + emerald: { + 50: "#ecfdf5", + 100: "#d1fae5", + 200: "#a7f3d0", + 300: "#6ee7b7", + 400: "#34d399", + 500: "#10b981", + 600: "#059669", + 700: "#047857", + 800: "#065f46", + 900: "#064e3b", + 950: "#022c22" + }, + green: { + 50: "#f0fdf4", + 100: "#dcfce7", + 200: "#bbf7d0", + 300: "#86efac", + 400: "#4ade80", + 500: "#22c55e", + 600: "#16a34a", + 700: "#15803d", + 800: "#166534", + 900: "#14532d", + 950: "#052e16" + }, + lime: { + 50: "#f7fee7", + 100: "#ecfccb", + 200: "#d9f99d", + 300: "#bef264", + 400: "#a3e635", + 500: "#84cc16", + 600: "#65a30d", + 700: "#4d7c0f", + 800: "#3f6212", + 900: "#365314", + 950: "#1a2e05" + }, + red: { + 50: "#fef2f2", + 100: "#fee2e2", + 200: "#fecaca", + 300: "#fca5a5", + 400: "#f87171", + 500: "#ef4444", + 600: "#dc2626", + 700: "#b91c1c", + 800: "#991b1b", + 900: "#7f1d1d", + 950: "#450a0a" + }, + orange: { + 50: "#fff7ed", + 100: "#ffedd5", + 200: "#fed7aa", + 300: "#fdba74", + 400: "#fb923c", + 500: "#f97316", + 600: "#ea580c", + 700: "#c2410c", + 800: "#9a3412", + 900: "#7c2d12", + 950: "#431407" + }, + amber: { + 50: "#fffbeb", + 100: "#fef3c7", + 200: "#fde68a", + 300: "#fcd34d", + 400: "#fbbf24", + 500: "#f59e0b", + 600: "#d97706", + 700: "#b45309", + 800: "#92400e", + 900: "#78350f", + 950: "#451a03" + }, + yellow: { + 50: "#fefce8", + 100: "#fef9c3", + 200: "#fef08a", + 300: "#fde047", + 400: "#facc15", + 500: "#eab308", + 600: "#ca8a04", + 700: "#a16207", + 800: "#854d0e", + 900: "#713f12", + 950: "#422006" + }, + teal: { + 50: "#f0fdfa", + 100: "#ccfbf1", + 200: "#99f6e4", + 300: "#5eead4", + 400: "#2dd4bf", + 500: "#14b8a6", + 600: "#0d9488", + 700: "#0f766e", + 800: "#115e59", + 900: "#134e4a", + 950: "#042f2e" + }, + cyan: { + 50: "#ecfeff", + 100: "#cffafe", + 200: "#a5f3fc", + 300: "#67e8f9", + 400: "#22d3ee", + 500: "#06b6d4", + 600: "#0891b2", + 700: "#0e7490", + 800: "#155e75", + 900: "#164e63", + 950: "#083344" + }, + sky: { + 50: "#f0f9ff", + 100: "#e0f2fe", + 200: "#bae6fd", + 300: "#7dd3fc", + 400: "#38bdf8", + 500: "#0ea5e9", + 600: "#0284c7", + 700: "#0369a1", + 800: "#075985", + 900: "#0c4a6e", + 950: "#082f49" + }, + blue: { + 50: "#eff6ff", + 100: "#dbeafe", + 200: "#bfdbfe", + 300: "#93c5fd", + 400: "#60a5fa", + 500: "#3b82f6", + 600: "#2563eb", + 700: "#1d4ed8", + 800: "#1e40af", + 900: "#1e3a8a", + 950: "#172554" + }, + indigo: { + 50: "#eef2ff", + 100: "#e0e7ff", + 200: "#c7d2fe", + 300: "#a5b4fc", + 400: "#818cf8", + 500: "#6366f1", + 600: "#4f46e5", + 700: "#4338ca", + 800: "#3730a3", + 900: "#312e81", + 950: "#1e1b4b" + }, + violet: { + 50: "#f5f3ff", + 100: "#ede9fe", + 200: "#ddd6fe", + 300: "#c4b5fd", + 400: "#a78bfa", + 500: "#8b5cf6", + 600: "#7c3aed", + 700: "#6d28d9", + 800: "#5b21b6", + 900: "#4c1d95", + 950: "#2e1065" + }, + purple: { + 50: "#faf5ff", + 100: "#f3e8ff", + 200: "#e9d5ff", + 300: "#d8b4fe", + 400: "#c084fc", + 500: "#a855f7", + 600: "#9333ea", + 700: "#7e22ce", + 800: "#6b21a8", + 900: "#581c87", + 950: "#3b0764" + }, + fuchsia: { + 50: "#fdf4ff", + 100: "#fae8ff", + 200: "#f5d0fe", + 300: "#f0abfc", + 400: "#e879f9", + 500: "#d946ef", + 600: "#c026d3", + 700: "#a21caf", + 800: "#86198f", + 900: "#701a75", + 950: "#4a044e" + }, + pink: { + 50: "#fdf2f8", + 100: "#fce7f3", + 200: "#fbcfe8", + 300: "#f9a8d4", + 400: "#f472b6", + 500: "#ec4899", + 600: "#db2777", + 700: "#be185d", + 800: "#9d174d", + 900: "#831843", + 950: "#500724" + }, + rose: { + 50: "#fff1f2", + 100: "#ffe4e6", + 200: "#fecdd3", + 300: "#fda4af", + 400: "#fb7185", + 500: "#f43f5e", + 600: "#e11d48", + 700: "#be123c", + 800: "#9f1239", + 900: "#881337", + 950: "#4c0519" + }, + slate: { + 50: "#f8fafc", + 100: "#f1f5f9", + 200: "#e2e8f0", + 300: "#cbd5e1", + 400: "#94a3b8", + 500: "#64748b", + 600: "#475569", + 700: "#334155", + 800: "#1e293b", + 900: "#0f172a", + 950: "#020617" + }, + gray: { + 50: "#f9fafb", + 100: "#f3f4f6", + 200: "#e5e7eb", + 300: "#d1d5db", + 400: "#9ca3af", + 500: "#6b7280", + 600: "#4b5563", + 700: "#374151", + 800: "#1f2937", + 900: "#111827", + 950: "#030712" + }, + zinc: { + 50: "#fafafa", + 100: "#f4f4f5", + 200: "#e4e4e7", + 300: "#d4d4d8", + 400: "#a1a1aa", + 500: "#71717a", + 600: "#52525b", + 700: "#3f3f46", + 800: "#27272a", + 900: "#18181b", + 950: "#09090b" + }, + neutral: { + 50: "#fafafa", + 100: "#f5f5f5", + 200: "#e5e5e5", + 300: "#d4d4d4", + 400: "#a3a3a3", + 500: "#737373", + 600: "#525252", + 700: "#404040", + 800: "#262626", + 900: "#171717", + 950: "#0a0a0a" + }, + stone: { + 50: "#fafaf9", + 100: "#f5f5f4", + 200: "#e7e5e4", + 300: "#d6d3d1", + 400: "#a8a29e", + 500: "#78716c", + 600: "#57534e", + 700: "#44403c", + 800: "#292524", + 900: "#1c1917", + 950: "#0c0a09" + } + }, + semantic: { + transitionDuration: "0.2s", + focusRing: { + width: "1px", + style: "solid", + color: "{primary.color}", + offset: "2px", + shadow: "none" + }, + disabledOpacity: "0.6", + iconSize: "1rem", + anchorGutter: "2px", + primary: { + 50: "#f4f7fd", + 100: "#cad9f6", + 200: "#a1bbf0", + 300: "#779de9", + 400: "#4e7fe2", + 500: "#2461db", + 600: "#1f52ba", + 700: "#194499", + 800: "#143578", + 900: "#0e2758", + 950: "#091837" + }, + formField: { + paddingX: "0.75rem", + paddingY: "0.5rem", + sm: { + fontSize: "0.875rem", + paddingX: "0.625rem", + paddingY: "0.375rem" + }, + lg: { + fontSize: "1.125rem", + paddingX: "0.875rem", + paddingY: "0.625rem" + }, + borderRadius: "{border.radius.md}", + focusRing: { + width: "0", + style: "none", + color: "transparent", + offset: "0", + shadow: "none" + }, + transitionDuration: "{transition.duration}" + }, + list: { + padding: "0.25rem 0.25rem", + gap: "2px", + header: { + padding: "0.5rem 1rem 0.25rem 1rem" + }, + option: { + padding: "0.5rem 0.75rem", + borderRadius: "{border.radius.sm}" + }, + optionGroup: { + padding: "0.5rem 0.75rem", + fontWeight: "600" + } + }, + content: { + borderRadius: "{border.radius.md}" + }, + mask: { + transitionDuration: "0.15s" + }, + navigation: { + list: { + padding: "0.25rem 0.25rem", + gap: "2px" + }, + item: { + padding: "0.5rem 0.75rem", + borderRadius: "{border.radius.sm}", + gap: "0.5rem" + }, + submenuLabel: { + padding: "0.5rem 0.75rem", + fontWeight: "600" + }, + submenuIcon: { + size: "0.875rem" + } + }, + overlay: { + select: { + borderRadius: "{border.radius.md}", + shadow: "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)" + }, + popover: { + borderRadius: "{border.radius.md}", + padding: "0.75rem", + shadow: "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)" + }, + modal: { + borderRadius: "{border.radius.xl}", + padding: "1.25rem", + shadow: "0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1)" + }, + navigation: { + shadow: "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)" + } + }, + colorScheme: { + light: { + surface: { + 0: "#ffffff", + 50: "#f8fafc", + 100: "#f1f5f9", + 200: "#e2e8f0", + 300: "#cbd5e1", + 400: "#94a3b8", + 500: "#64748b", + 600: "#475569", + 700: "#334155", + 800: "#1e293b", + 900: "#0f172a", + 950: "#020617" + }, + primary: { + color: "{primary.500}", + contrastColor: "#ffffff", + hoverColor: "{primary.600}", + activeColor: "{primary.700}" + }, + highlight: { + background: "{primary.50}", + focusBackground: "{primary.100}", + color: "{primary.700}", + focusColor: "{primary.800}" + }, + mask: { + background: "rgba(0,0,0,0.4)", + color: "{surface.200}" + }, + formField: { + background: "{surface.0}", + disabledBackground: "{surface.200}", + filledBackground: "{surface.50}", + filledHoverBackground: "{surface.50}", + filledFocusBackground: "{surface.50}", + borderColor: "{surface.300}", + hoverBorderColor: "{surface.400}", + focusBorderColor: "{primary.color}", + invalidBorderColor: "{red.400}", + color: "{surface.700}", + disabledColor: "{surface.500}", + placeholderColor: "{surface.500}", + invalidPlaceholderColor: "{red.600}", + floatLabelColor: "{surface.500}", + floatLabelFocusColor: "{primary.600}", + floatLabelActiveColor: "{surface.500}", + floatLabelInvalidColor: "{form.field.invalid.placeholder.color}", + iconColor: "{surface.400}", + shadow: "0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05)" + }, + text: { + color: "{surface.700}", + hoverColor: "{surface.800}", + mutedColor: "{surface.500}", + hoverMutedColor: "{surface.600}" + }, + content: { + background: "{surface.0}", + hoverBackground: "{surface.100}", + borderColor: "{surface.200}", + color: "{text.color}", + hoverColor: "{text.hover.color}" + }, + overlay: { + select: { + background: "{surface.0}", + borderColor: "{surface.200}", + color: "{text.color}" + }, + popover: { + background: "{surface.0}", + borderColor: "{surface.200}", + color: "{text.color}" + }, + modal: { + background: "{surface.0}", + borderColor: "{surface.200}", + color: "{text.color}" + } + }, + list: { + option: { + focusBackground: "{surface.100}", + selectedBackground: "{highlight.background}", + selectedFocusBackground: "{highlight.focus.background}", + color: "{text.color}", + focusColor: "{text.hover.color}", + selectedColor: "{highlight.color}", + selectedFocusColor: "{highlight.focus.color}", + icon: { + color: "{surface.400}", + focusColor: "{surface.500}" + } + }, + optionGroup: { + background: "transparent", + color: "{text.muted.color}" + } + }, + navigation: { + item: { + focusBackground: "{surface.100}", + activeBackground: "{surface.100}", + color: "{text.color}", + focusColor: "{text.hover.color}", + activeColor: "{text.hover.color}", + icon: { + color: "{surface.400}", + focusColor: "{surface.500}", + activeColor: "{surface.500}" + } + }, + submenuLabel: { + background: "transparent", + color: "{text.muted.color}" + }, + submenuIcon: { + color: "{surface.400}", + focusColor: "{surface.500}", + activeColor: "{surface.500}" + } + } + }, + dark: { + surface: { + 0: "#ffffff", + 50: "#fafafa", + 100: "#f4f4f5", + 200: "#e4e4e7", + 300: "#d4d4d8", + 400: "#a1a1aa", + 500: "#71717a", + 600: "#52525b", + 700: "#3f3f46", + 800: "#27272a", + 900: "#18181b", + 950: "#09090b" + }, + primary: { + color: "{primary.400}", + contrastColor: "{surface.900}", + hoverColor: "{primary.300}", + activeColor: "{primary.200}" + }, + highlight: { + background: "color-mix(in srgb, {primary.400}, transparent 84%)", + focusBackground: "color-mix(in srgb, {primary.400}, transparent 76%)", + color: "rgba(255,255,255,.87)", + focusColor: "rgba(255,255,255,.87)" + }, + mask: { + background: "rgba(0,0,0,0.6)", + color: "{surface.200}" + }, + formField: { + background: "{surface.950}", + disabledBackground: "{surface.700}", + filledBackground: "{surface.800}", + filledHoverBackground: "{surface.800}", + filledFocusBackground: "{surface.800}", + borderColor: "{surface.600}", + hoverBorderColor: "{surface.500}", + focusBorderColor: "{primary.color}", + invalidBorderColor: "{red.300}", + color: "{surface.0}", + disabledColor: "{surface.400}", + placeholderColor: "{surface.400}", + invalidPlaceholderColor: "{red.400}", + floatLabelColor: "{surface.400}", + floatLabelFocusColor: "{primary.color}", + floatLabelActiveColor: "{surface.400}", + floatLabelInvalidColor: "{form.field.invalid.placeholder.color}", + iconColor: "{surface.400}", + shadow: "0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05)" + }, + text: { + color: "{surface.0}", + hoverColor: "{surface.0}", + mutedColor: "{surface.400}", + hoverMutedColor: "{surface.300}" + }, + content: { + background: "{surface.900}", + hoverBackground: "{surface.800}", + borderColor: "{surface.700}", + color: "{text.color}", + hoverColor: "{text.hover.color}" + }, + overlay: { + select: { + background: "{surface.900}", + borderColor: "{surface.700}", + color: "{text.color}" + }, + popover: { + background: "{surface.900}", + borderColor: "{surface.700}", + color: "{text.color}" + }, + modal: { + background: "{surface.900}", + borderColor: "{surface.700}", + color: "{text.color}" + } + }, + list: { + option: { + focusBackground: "{surface.800}", + selectedBackground: "{highlight.background}", + selectedFocusBackground: "{highlight.focus.background}", + color: "{text.color}", + focusColor: "{text.hover.color}", + selectedColor: "{highlight.color}", + selectedFocusColor: "{highlight.focus.color}", + icon: { + color: "{surface.500}", + focusColor: "{surface.400}" + } + }, + optionGroup: { + background: "transparent", + color: "{text.muted.color}" + } + }, + navigation: { + item: { + focusBackground: "{surface.800}", + activeBackground: "{surface.800}", + color: "{text.color}", + focusColor: "{text.hover.color}", + activeColor: "{text.hover.color}", + icon: { + color: "{surface.500}", + focusColor: "{surface.400}", + activeColor: "{surface.400}" + } + }, + submenuLabel: { + background: "transparent", + color: "{text.muted.color}" + }, + submenuIcon: { + color: "{surface.500}", + focusColor: "{surface.400}", + activeColor: "{surface.400}" + } + } + } + } + }, + components: { + accordion: { + root: { + transitionDuration: "{transition.duration}" + }, + panel: { + borderWidth: "0 0 1px 0", + borderColor: "{content.border.color}" + }, + header: { + color: "{text.muted.color}", + hoverColor: "{text.color}", + activeColor: "{text.color}", + padding: "1.125rem", + fontWeight: "600", + borderRadius: "0", + borderWidth: "0", + borderColor: "{content.border.color}", + background: "{content.background}", + hoverBackground: "{content.background}", + activeBackground: "{content.background}", + activeHoverBackground: "{content.background}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "-1px", + shadow: "{focus.ring.shadow}" + }, + toggleIcon: { + color: "{text.muted.color}", + hoverColor: "{text.color}", + activeColor: "{text.color}", + activeHoverColor: "{text.color}" + }, + first: { + topBorderRadius: "{content.border.radius}", + borderWidth: "0" + }, + last: { + bottomBorderRadius: "{content.border.radius}", + activeBottomBorderRadius: "0" + } + }, + content: { + borderWidth: "0", + borderColor: "{content.border.color}", + background: "{content.background}", + color: "{text.color}", + padding: "0 1.125rem 1.125rem 1.125rem" + } + }, + autocomplete: { + root: { + background: "{form.field.background}", + disabledBackground: "{form.field.disabled.background}", + filledBackground: "{form.field.filled.background}", + filledHoverBackground: "{form.field.filled.hover.background}", + filledFocusBackground: "{form.field.filled.focus.background}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.hover.border.color}", + focusBorderColor: "{form.field.focus.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + color: "{form.field.color}", + disabledColor: "{form.field.disabled.color}", + placeholderColor: "{form.field.placeholder.color}", + invalidPlaceholderColor: "{form.field.invalid.placeholder.color}", + shadow: "{form.field.shadow}", + paddingX: "{form.field.padding.x}", + paddingY: "{form.field.padding.y}", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{form.field.focus.ring.width}", + style: "{form.field.focus.ring.style}", + color: "{form.field.focus.ring.color}", + offset: "{form.field.focus.ring.offset}", + shadow: "{form.field.focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}" + }, + overlay: { + background: "{overlay.select.background}", + borderColor: "{overlay.select.border.color}", + borderRadius: "{overlay.select.border.radius}", + color: "{overlay.select.color}", + shadow: "{overlay.select.shadow}" + }, + list: { + padding: "{list.padding}", + gap: "{list.gap}" + }, + option: { + focusBackground: "{list.option.focus.background}", + selectedBackground: "{list.option.selected.background}", + selectedFocusBackground: "{list.option.selected.focus.background}", + color: "{list.option.color}", + focusColor: "{list.option.focus.color}", + selectedColor: "{list.option.selected.color}", + selectedFocusColor: "{list.option.selected.focus.color}", + padding: "{list.option.padding}", + borderRadius: "{list.option.border.radius}" + }, + optionGroup: { + background: "{list.option.group.background}", + color: "{list.option.group.color}", + fontWeight: "{list.option.group.font.weight}", + padding: "{list.option.group.padding}" + }, + dropdown: { + width: "2.5rem", + sm: { + width: "2rem" + }, + lg: { + width: "3rem" + }, + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.border.color}", + activeBorderColor: "{form.field.border.color}", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + chip: { + borderRadius: "{border.radius.sm}" + }, + emptyMessage: { + padding: "{list.option.padding}" + }, + colorScheme: { + light: { + chip: { + focusBackground: "{surface.200}", + focusColor: "{surface.800}" + }, + dropdown: { + background: "{surface.100}", + hoverBackground: "{surface.200}", + activeBackground: "{surface.300}", + color: "{surface.600}", + hoverColor: "{surface.700}", + activeColor: "{surface.800}" + } + }, + dark: { + chip: { + focusBackground: "{surface.700}", + focusColor: "{surface.0}" + }, + dropdown: { + background: "{surface.800}", + hoverBackground: "{surface.700}", + activeBackground: "{surface.600}", + color: "{surface.300}", + hoverColor: "{surface.200}", + activeColor: "{surface.100}" + } + } + } + }, + avatar: { + root: { + width: "2rem", + height: "2rem", + fontSize: "1rem", + background: "{content.border.color}", + color: "{content.color}", + borderRadius: "{content.border.radius}" + }, + icon: { + size: "1rem" + }, + group: { + borderColor: "{content.background}", + offset: "-0.75rem" + }, + lg: { + width: "3rem", + height: "3rem", + fontSize: "1.5rem", + icon: { + size: "1.5rem" + }, + group: { + offset: "-1rem" + } + }, + xl: { + width: "4rem", + height: "4rem", + fontSize: "2rem", + icon: { + size: "2rem" + }, + group: { + offset: "-1.5rem" + } + } + }, + badge: { + root: { + borderRadius: "{border.radius.md}", + padding: "0 0.5rem", + fontSize: "0.75rem", + fontWeight: "700", + minWidth: "1.5rem", + height: "1.5rem" + }, + dot: { + size: "0.5rem" + }, + sm: { + fontSize: "0.625rem", + minWidth: "1.25rem", + height: "1.25rem" + }, + lg: { + fontSize: "0.875rem", + minWidth: "1.75rem", + height: "1.75rem" + }, + xl: { + fontSize: "1rem", + minWidth: "2rem", + height: "2rem" + }, + colorScheme: { + light: { + primary: { + background: "{primary.color}", + color: "{primary.contrast.color}" + }, + secondary: { + background: "{surface.100}", + color: "{surface.600}" + }, + success: { + background: "{green.500}", + color: "{surface.0}" + }, + info: { + background: "{sky.500}", + color: "{surface.0}" + }, + warn: { + background: "{orange.500}", + color: "{surface.0}" + }, + danger: { + background: "{red.500}", + color: "{surface.0}" + }, + contrast: { + background: "{surface.950}", + color: "{surface.0}" + } + }, + dark: { + primary: { + background: "{primary.color}", + color: "{primary.contrast.color}" + }, + secondary: { + background: "{surface.800}", + color: "{surface.300}" + }, + success: { + background: "{green.400}", + color: "{green.950}" + }, + info: { + background: "{sky.400}", + color: "{sky.950}" + }, + warn: { + background: "{orange.400}", + color: "{orange.950}" + }, + danger: { + background: "{red.400}", + color: "{red.950}" + }, + contrast: { + background: "{surface.0}", + color: "{surface.950}" + } + } + } + }, + blockui: { + root: { + borderRadius: "{content.border.radius}" + } + }, + breadcrumb: { + root: { + padding: "1rem", + background: "{content.background}", + gap: "0.5rem", + transitionDuration: "{transition.duration}" + }, + item: { + color: "{text.muted.color}", + hoverColor: "{text.color}", + borderRadius: "{content.border.radius}", + gap: "{navigation.item.gap}", + icon: { + color: "{navigation.item.icon.color}", + hoverColor: "{navigation.item.icon.focus.color}" + }, + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + separator: { + color: "{navigation.item.icon.color}" + } + }, + button: { + root: { + borderRadius: "{form.field.border.radius}", + roundedBorderRadius: "2rem", + gap: "0.5rem", + paddingX: "{form.field.padding.x}", + paddingY: "{form.field.padding.y}", + iconOnlyWidth: "2.5rem", + sm: { + fontSize: "{form.field.sm.font.size}", + paddingX: "{form.field.sm.padding.x}", + paddingY: "{form.field.sm.padding.y}" + }, + lg: { + fontSize: "{form.field.lg.font.size}", + paddingX: "{form.field.lg.padding.x}", + paddingY: "{form.field.lg.padding.y}" + }, + label: { + fontWeight: "500" + }, + raisedShadow: "0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12)", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + offset: "{focus.ring.offset}" + }, + badgeSize: "1rem", + transitionDuration: "{form.field.transition.duration}" + }, + colorScheme: { + light: { + root: { + primary: { + background: "{primary.color}", + hoverBackground: "{primary.hover.color}", + activeBackground: "{primary.active.color}", + borderColor: "{primary.color}", + hoverBorderColor: "{primary.hover.color}", + activeBorderColor: "{primary.active.color}", + color: "{primary.contrast.color}", + hoverColor: "{primary.contrast.color}", + activeColor: "{primary.contrast.color}", + focusRing: { + color: "{primary.color}", + shadow: "none" + } + }, + secondary: { + background: "{surface.100}", + hoverBackground: "{surface.200}", + activeBackground: "{surface.300}", + borderColor: "{surface.100}", + hoverBorderColor: "{surface.200}", + activeBorderColor: "{surface.300}", + color: "{surface.600}", + hoverColor: "{surface.700}", + activeColor: "{surface.800}", + focusRing: { + color: "{surface.600}", + shadow: "none" + } + }, + info: { + background: "{sky.500}", + hoverBackground: "{sky.600}", + activeBackground: "{sky.700}", + borderColor: "{sky.500}", + hoverBorderColor: "{sky.600}", + activeBorderColor: "{sky.700}", + color: "#ffffff", + hoverColor: "#ffffff", + activeColor: "#ffffff", + focusRing: { + color: "{sky.500}", + shadow: "none" + } + }, + success: { + background: "{green.500}", + hoverBackground: "{green.600}", + activeBackground: "{green.700}", + borderColor: "{green.500}", + hoverBorderColor: "{green.600}", + activeBorderColor: "{green.700}", + color: "#ffffff", + hoverColor: "#ffffff", + activeColor: "#ffffff", + focusRing: { + color: "{green.500}", + shadow: "none" + } + }, + warn: { + background: "{orange.500}", + hoverBackground: "{orange.600}", + activeBackground: "{orange.700}", + borderColor: "{orange.500}", + hoverBorderColor: "{orange.600}", + activeBorderColor: "{orange.700}", + color: "#ffffff", + hoverColor: "#ffffff", + activeColor: "#ffffff", + focusRing: { + color: "{orange.500}", + shadow: "none" + } + }, + help: { + background: "{purple.500}", + hoverBackground: "{purple.600}", + activeBackground: "{purple.700}", + borderColor: "{purple.500}", + hoverBorderColor: "{purple.600}", + activeBorderColor: "{purple.700}", + color: "#ffffff", + hoverColor: "#ffffff", + activeColor: "#ffffff", + focusRing: { + color: "{purple.500}", + shadow: "none" + } + }, + danger: { + background: "{red.500}", + hoverBackground: "{red.600}", + activeBackground: "{red.700}", + borderColor: "{red.500}", + hoverBorderColor: "{red.600}", + activeBorderColor: "{red.700}", + color: "#ffffff", + hoverColor: "#ffffff", + activeColor: "#ffffff", + focusRing: { + color: "{red.500}", + shadow: "none" + } + }, + contrast: { + background: "{surface.950}", + hoverBackground: "{surface.900}", + activeBackground: "{surface.800}", + borderColor: "{surface.950}", + hoverBorderColor: "{surface.900}", + activeBorderColor: "{surface.800}", + color: "{surface.0}", + hoverColor: "{surface.0}", + activeColor: "{surface.0}", + focusRing: { + color: "{surface.950}", + shadow: "none" + } + } + }, + outlined: { + primary: { + hoverBackground: "{primary.50}", + activeBackground: "{primary.100}", + borderColor: "{primary.200}", + color: "{primary.color}" + }, + secondary: { + hoverBackground: "{surface.50}", + activeBackground: "{surface.100}", + borderColor: "{surface.200}", + color: "{surface.500}" + }, + success: { + hoverBackground: "{green.50}", + activeBackground: "{green.100}", + borderColor: "{green.200}", + color: "{green.500}" + }, + info: { + hoverBackground: "{sky.50}", + activeBackground: "{sky.100}", + borderColor: "{sky.200}", + color: "{sky.500}" + }, + warn: { + hoverBackground: "{orange.50}", + activeBackground: "{orange.100}", + borderColor: "{orange.200}", + color: "{orange.500}" + }, + help: { + hoverBackground: "{purple.50}", + activeBackground: "{purple.100}", + borderColor: "{purple.200}", + color: "{purple.500}" + }, + danger: { + hoverBackground: "{red.50}", + activeBackground: "{red.100}", + borderColor: "{red.200}", + color: "{red.500}" + }, + contrast: { + hoverBackground: "{surface.50}", + activeBackground: "{surface.100}", + borderColor: "{surface.700}", + color: "{surface.950}" + }, + plain: { + hoverBackground: "{surface.50}", + activeBackground: "{surface.100}", + borderColor: "{surface.200}", + color: "{surface.700}" + } + }, + text: { + primary: { + hoverBackground: "{primary.50}", + activeBackground: "{primary.100}", + color: "{primary.color}" + }, + secondary: { + hoverBackground: "{surface.50}", + activeBackground: "{surface.100}", + color: "{surface.500}" + }, + success: { + hoverBackground: "{green.50}", + activeBackground: "{green.100}", + color: "{green.500}" + }, + info: { + hoverBackground: "{sky.50}", + activeBackground: "{sky.100}", + color: "{sky.500}" + }, + warn: { + hoverBackground: "{orange.50}", + activeBackground: "{orange.100}", + color: "{orange.500}" + }, + help: { + hoverBackground: "{purple.50}", + activeBackground: "{purple.100}", + color: "{purple.500}" + }, + danger: { + hoverBackground: "{red.50}", + activeBackground: "{red.100}", + color: "{red.500}" + }, + contrast: { + hoverBackground: "{surface.50}", + activeBackground: "{surface.100}", + color: "{surface.950}" + }, + plain: { + hoverBackground: "{surface.50}", + activeBackground: "{surface.100}", + color: "{surface.700}" + } + }, + link: { + color: "{primary.color}", + hoverColor: "{primary.color}", + activeColor: "{primary.color}" + } + }, + dark: { + root: { + primary: { + background: "{primary.color}", + hoverBackground: "{primary.hover.color}", + activeBackground: "{primary.active.color}", + borderColor: "{primary.color}", + hoverBorderColor: "{primary.hover.color}", + activeBorderColor: "{primary.active.color}", + color: "{primary.contrast.color}", + hoverColor: "{primary.contrast.color}", + activeColor: "{primary.contrast.color}", + focusRing: { + color: "{primary.color}", + shadow: "none" + } + }, + secondary: { + background: "{surface.800}", + hoverBackground: "{surface.700}", + activeBackground: "{surface.600}", + borderColor: "{surface.800}", + hoverBorderColor: "{surface.700}", + activeBorderColor: "{surface.600}", + color: "{surface.300}", + hoverColor: "{surface.200}", + activeColor: "{surface.100}", + focusRing: { + color: "{surface.300}", + shadow: "none" + } + }, + info: { + background: "{sky.400}", + hoverBackground: "{sky.300}", + activeBackground: "{sky.200}", + borderColor: "{sky.400}", + hoverBorderColor: "{sky.300}", + activeBorderColor: "{sky.200}", + color: "{sky.950}", + hoverColor: "{sky.950}", + activeColor: "{sky.950}", + focusRing: { + color: "{sky.400}", + shadow: "none" + } + }, + success: { + background: "{green.400}", + hoverBackground: "{green.300}", + activeBackground: "{green.200}", + borderColor: "{green.400}", + hoverBorderColor: "{green.300}", + activeBorderColor: "{green.200}", + color: "{green.950}", + hoverColor: "{green.950}", + activeColor: "{green.950}", + focusRing: { + color: "{green.400}", + shadow: "none" + } + }, + warn: { + background: "{orange.400}", + hoverBackground: "{orange.300}", + activeBackground: "{orange.200}", + borderColor: "{orange.400}", + hoverBorderColor: "{orange.300}", + activeBorderColor: "{orange.200}", + color: "{orange.950}", + hoverColor: "{orange.950}", + activeColor: "{orange.950}", + focusRing: { + color: "{orange.400}", + shadow: "none" + } + }, + help: { + background: "{purple.400}", + hoverBackground: "{purple.300}", + activeBackground: "{purple.200}", + borderColor: "{purple.400}", + hoverBorderColor: "{purple.300}", + activeBorderColor: "{purple.200}", + color: "{purple.950}", + hoverColor: "{purple.950}", + activeColor: "{purple.950}", + focusRing: { + color: "{purple.400}", + shadow: "none" + } + }, + danger: { + background: "{red.400}", + hoverBackground: "{red.300}", + activeBackground: "{red.200}", + borderColor: "{red.400}", + hoverBorderColor: "{red.300}", + activeBorderColor: "{red.200}", + color: "{red.950}", + hoverColor: "{red.950}", + activeColor: "{red.950}", + focusRing: { + color: "{red.400}", + shadow: "none" + } + }, + contrast: { + background: "{surface.0}", + hoverBackground: "{surface.100}", + activeBackground: "{surface.200}", + borderColor: "{surface.0}", + hoverBorderColor: "{surface.100}", + activeBorderColor: "{surface.200}", + color: "{surface.950}", + hoverColor: "{surface.950}", + activeColor: "{surface.950}", + focusRing: { + color: "{surface.0}", + shadow: "none" + } + } + }, + outlined: { + primary: { + hoverBackground: "color-mix(in srgb, {primary.color}, transparent 96%)", + activeBackground: "color-mix(in srgb, {primary.color}, transparent 84%)", + borderColor: "{primary.700}", + color: "{primary.color}" + }, + secondary: { + hoverBackground: "rgba(255,255,255,0.04)", + activeBackground: "rgba(255,255,255,0.16)", + borderColor: "{surface.700}", + color: "{surface.400}" + }, + success: { + hoverBackground: "color-mix(in srgb, {green.400}, transparent 96%)", + activeBackground: "color-mix(in srgb, {green.400}, transparent 84%)", + borderColor: "{green.700}", + color: "{green.400}" + }, + info: { + hoverBackground: "color-mix(in srgb, {sky.400}, transparent 96%)", + activeBackground: "color-mix(in srgb, {sky.400}, transparent 84%)", + borderColor: "{sky.700}", + color: "{sky.400}" + }, + warn: { + hoverBackground: "color-mix(in srgb, {orange.400}, transparent 96%)", + activeBackground: "color-mix(in srgb, {orange.400}, transparent 84%)", + borderColor: "{orange.700}", + color: "{orange.400}" + }, + help: { + hoverBackground: "color-mix(in srgb, {purple.400}, transparent 96%)", + activeBackground: "color-mix(in srgb, {purple.400}, transparent 84%)", + borderColor: "{purple.700}", + color: "{purple.400}" + }, + danger: { + hoverBackground: "color-mix(in srgb, {red.400}, transparent 96%)", + activeBackground: "color-mix(in srgb, {red.400}, transparent 84%)", + borderColor: "{red.700}", + color: "{red.400}" + }, + contrast: { + hoverBackground: "{surface.800}", + activeBackground: "{surface.700}", + borderColor: "{surface.500}", + color: "{surface.0}" + }, + plain: { + hoverBackground: "{surface.800}", + activeBackground: "{surface.700}", + borderColor: "{surface.600}", + color: "{surface.0}" + } + }, + text: { + primary: { + hoverBackground: "color-mix(in srgb, {primary.color}, transparent 96%)", + activeBackground: "color-mix(in srgb, {primary.color}, transparent 84%)", + color: "{primary.color}" + }, + secondary: { + hoverBackground: "{surface.800}", + activeBackground: "{surface.700}", + color: "{surface.400}" + }, + success: { + hoverBackground: "color-mix(in srgb, {green.400}, transparent 96%)", + activeBackground: "color-mix(in srgb, {green.400}, transparent 84%)", + color: "{green.400}" + }, + info: { + hoverBackground: "color-mix(in srgb, {sky.400}, transparent 96%)", + activeBackground: "color-mix(in srgb, {sky.400}, transparent 84%)", + color: "{sky.400}" + }, + warn: { + hoverBackground: "color-mix(in srgb, {orange.400}, transparent 96%)", + activeBackground: "color-mix(in srgb, {orange.400}, transparent 84%)", + color: "{orange.400}" + }, + help: { + hoverBackground: "color-mix(in srgb, {purple.400}, transparent 96%)", + activeBackground: "color-mix(in srgb, {purple.400}, transparent 84%)", + color: "{purple.400}" + }, + danger: { + hoverBackground: "color-mix(in srgb, {red.400}, transparent 96%)", + activeBackground: "color-mix(in srgb, {red.400}, transparent 84%)", + color: "{red.400}" + }, + contrast: { + hoverBackground: "{surface.800}", + activeBackground: "{surface.700}", + color: "{surface.0}" + }, + plain: { + hoverBackground: "{surface.800}", + activeBackground: "{surface.700}", + color: "{surface.0}" + } + }, + link: { + color: "{primary.color}", + hoverColor: "{primary.color}", + activeColor: "{primary.color}" + } + } + } + }, + datepicker: { + root: { + transitionDuration: "{transition.duration}" + }, + panel: { + background: "{content.background}", + borderColor: "{content.border.color}", + color: "{content.color}", + borderRadius: "{content.border.radius}", + shadow: "{overlay.popover.shadow}", + padding: "{overlay.popover.padding}" + }, + header: { + background: "{content.background}", + borderColor: "{content.border.color}", + color: "{content.color}", + padding: "0 0 0.5rem 0" + }, + title: { + gap: "0.5rem", + fontWeight: "500" + }, + dropdown: { + width: "2.5rem", + sm: { + width: "2rem" + }, + lg: { + width: "3rem" + }, + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.border.color}", + activeBorderColor: "{form.field.border.color}", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + inputIcon: { + color: "{form.field.icon.color}" + }, + selectMonth: { + hoverBackground: "{content.hover.background}", + color: "{content.color}", + hoverColor: "{content.hover.color}", + padding: "0.25rem 0.5rem", + borderRadius: "{content.border.radius}" + }, + selectYear: { + hoverBackground: "{content.hover.background}", + color: "{content.color}", + hoverColor: "{content.hover.color}", + padding: "0.25rem 0.5rem", + borderRadius: "{content.border.radius}" + }, + group: { + borderColor: "{content.border.color}", + gap: "{overlay.popover.padding}" + }, + dayView: { + margin: "0.5rem 0 0 0" + }, + weekDay: { + padding: "0.25rem", + fontWeight: "500", + color: "{content.color}" + }, + date: { + hoverBackground: "{content.hover.background}", + selectedBackground: "{primary.color}", + rangeSelectedBackground: "{highlight.background}", + color: "{content.color}", + hoverColor: "{content.hover.color}", + selectedColor: "{primary.contrast.color}", + rangeSelectedColor: "{highlight.color}", + width: "2rem", + height: "2rem", + borderRadius: "50%", + padding: "0.25rem", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + monthView: { + margin: "0.5rem 0 0 0" + }, + month: { + padding: "0.375rem", + borderRadius: "{content.border.radius}" + }, + yearView: { + margin: "0.5rem 0 0 0" + }, + year: { + padding: "0.375rem", + borderRadius: "{content.border.radius}" + }, + buttonbar: { + padding: "0.5rem 0 0 0", + borderColor: "{content.border.color}" + }, + timePicker: { + padding: "0.5rem 0 0 0", + borderColor: "{content.border.color}", + gap: "0.5rem", + buttonGap: "0.25rem" + }, + colorScheme: { + light: { + dropdown: { + background: "{surface.100}", + hoverBackground: "{surface.200}", + activeBackground: "{surface.300}", + color: "{surface.600}", + hoverColor: "{surface.700}", + activeColor: "{surface.800}" + }, + today: { + background: "{surface.200}", + color: "{surface.900}" + } + }, + dark: { + dropdown: { + background: "{surface.800}", + hoverBackground: "{surface.700}", + activeBackground: "{surface.600}", + color: "{surface.300}", + hoverColor: "{surface.200}", + activeColor: "{surface.100}" + }, + today: { + background: "{surface.700}", + color: "{surface.0}" + } + } + } + }, + card: { + root: { + background: "{content.background}", + borderRadius: "{border.radius.xl}", + color: "{content.color}", + shadow: "0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1)" + }, + body: { + padding: "1.25rem", + gap: "0.5rem" + }, + caption: { + gap: "0.5rem" + }, + title: { + fontSize: "1.25rem", + fontWeight: "500" + }, + subtitle: { + color: "{text.muted.color}" + } + }, + carousel: { + root: { + transitionDuration: "{transition.duration}" + }, + content: { + gap: "0.25rem" + }, + indicatorList: { + padding: "1rem", + gap: "0.5rem" + }, + indicator: { + width: "2rem", + height: "0.5rem", + borderRadius: "{content.border.radius}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + colorScheme: { + light: { + indicator: { + background: "{surface.200}", + hoverBackground: "{surface.300}", + activeBackground: "{primary.color}" + } + }, + dark: { + indicator: { + background: "{surface.700}", + hoverBackground: "{surface.600}", + activeBackground: "{primary.color}" + } + } + } + }, + cascadeselect: { + root: { + background: "{form.field.background}", + disabledBackground: "{form.field.disabled.background}", + filledBackground: "{form.field.filled.background}", + filledHoverBackground: "{form.field.filled.hover.background}", + filledFocusBackground: "{form.field.filled.focus.background}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.hover.border.color}", + focusBorderColor: "{form.field.focus.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + color: "{form.field.color}", + disabledColor: "{form.field.disabled.color}", + placeholderColor: "{form.field.placeholder.color}", + invalidPlaceholderColor: "{form.field.invalid.placeholder.color}", + shadow: "{form.field.shadow}", + paddingX: "{form.field.padding.x}", + paddingY: "{form.field.padding.y}", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{form.field.focus.ring.width}", + style: "{form.field.focus.ring.style}", + color: "{form.field.focus.ring.color}", + offset: "{form.field.focus.ring.offset}", + shadow: "{form.field.focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}", + sm: { + fontSize: "{form.field.sm.font.size}", + paddingX: "{form.field.sm.padding.x}", + paddingY: "{form.field.sm.padding.y}" + }, + lg: { + fontSize: "{form.field.lg.font.size}", + paddingX: "{form.field.lg.padding.x}", + paddingY: "{form.field.lg.padding.y}" + } + }, + dropdown: { + width: "2.5rem", + color: "{form.field.icon.color}" + }, + overlay: { + background: "{overlay.select.background}", + borderColor: "{overlay.select.border.color}", + borderRadius: "{overlay.select.border.radius}", + color: "{overlay.select.color}", + shadow: "{overlay.select.shadow}" + }, + list: { + padding: "{list.padding}", + gap: "{list.gap}", + mobileIndent: "1rem" + }, + option: { + focusBackground: "{list.option.focus.background}", + selectedBackground: "{list.option.selected.background}", + selectedFocusBackground: "{list.option.selected.focus.background}", + color: "{list.option.color}", + focusColor: "{list.option.focus.color}", + selectedColor: "{list.option.selected.color}", + selectedFocusColor: "{list.option.selected.focus.color}", + padding: "{list.option.padding}", + borderRadius: "{list.option.border.radius}", + icon: { + color: "{list.option.icon.color}", + focusColor: "{list.option.icon.focus.color}", + size: "0.875rem" + } + }, + clearIcon: { + color: "{form.field.icon.color}" + } + }, + checkbox: { + root: { + borderRadius: "{border.radius.sm}", + width: "1.25rem", + height: "1.25rem", + background: "{form.field.background}", + checkedBackground: "{primary.color}", + checkedHoverBackground: "{primary.hover.color}", + disabledBackground: "{form.field.disabled.background}", + filledBackground: "{form.field.filled.background}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.hover.border.color}", + focusBorderColor: "{form.field.border.color}", + checkedBorderColor: "{primary.color}", + checkedHoverBorderColor: "{primary.hover.color}", + checkedFocusBorderColor: "{primary.color}", + checkedDisabledBorderColor: "{form.field.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + shadow: "{form.field.shadow}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}", + sm: { + width: "1rem", + height: "1rem" + }, + lg: { + width: "1.5rem", + height: "1.5rem" + } + }, + icon: { + size: "0.875rem", + color: "{form.field.color}", + checkedColor: "{primary.contrast.color}", + checkedHoverColor: "{primary.contrast.color}", + disabledColor: "{form.field.disabled.color}", + sm: { + size: "0.75rem" + }, + lg: { + size: "1rem" + } + } + }, + chip: { + root: { + borderRadius: "16px", + paddingX: "0.75rem", + paddingY: "0.5rem", + gap: "0.5rem", + transitionDuration: "{transition.duration}" + }, + image: { + width: "2rem", + height: "2rem" + }, + icon: { + size: "1rem" + }, + removeIcon: { + size: "1rem", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{form.field.focus.ring.shadow}" + } + }, + colorScheme: { + light: { + root: { + background: "{surface.100}", + color: "{surface.800}" + }, + icon: { + color: "{surface.800}" + }, + removeIcon: { + color: "{surface.800}" + } + }, + dark: { + root: { + background: "{surface.800}", + color: "{surface.0}" + }, + icon: { + color: "{surface.0}" + }, + removeIcon: { + color: "{surface.0}" + } + } + } + }, + colorpicker: { + root: { + transitionDuration: "{transition.duration}" + }, + preview: { + width: "1.5rem", + height: "1.5rem", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + panel: { + shadow: "{overlay.popover.shadow}", + borderRadius: "{overlay.popover.borderRadius}" + }, + colorScheme: { + light: { + panel: { + background: "{surface.800}", + borderColor: "{surface.900}" + }, + handle: { + color: "{surface.0}" + } + }, + dark: { + panel: { + background: "{surface.900}", + borderColor: "{surface.700}" + }, + handle: { + color: "{surface.0}" + } + } + } + }, + confirmdialog: { + icon: { + size: "2rem", + color: "{overlay.modal.color}" + }, + content: { + gap: "1rem" + } + }, + confirmpopup: { + root: { + background: "{overlay.popover.background}", + borderColor: "{overlay.popover.border.color}", + color: "{overlay.popover.color}", + borderRadius: "{overlay.popover.border.radius}", + shadow: "{overlay.popover.shadow}", + gutter: "10px", + arrowOffset: "1.25rem" + }, + content: { + padding: "{overlay.popover.padding}", + gap: "1rem" + }, + icon: { + size: "1.5rem", + color: "{overlay.popover.color}" + }, + footer: { + gap: "0.5rem", + padding: "0 {overlay.popover.padding} {overlay.popover.padding} {overlay.popover.padding}" + } + }, + contextmenu: { + root: { + background: "{content.background}", + borderColor: "{content.border.color}", + color: "{content.color}", + borderRadius: "{content.border.radius}", + shadow: "{overlay.navigation.shadow}", + transitionDuration: "{transition.duration}" + }, + list: { + padding: "{navigation.list.padding}", + gap: "{navigation.list.gap}" + }, + item: { + focusBackground: "{navigation.item.focus.background}", + activeBackground: "{navigation.item.active.background}", + color: "{navigation.item.color}", + focusColor: "{navigation.item.focus.color}", + activeColor: "{navigation.item.active.color}", + padding: "{navigation.item.padding}", + borderRadius: "{navigation.item.border.radius}", + gap: "{navigation.item.gap}", + icon: { + color: "{navigation.item.icon.color}", + focusColor: "{navigation.item.icon.focus.color}", + activeColor: "{navigation.item.icon.active.color}" + } + }, + submenu: { + mobileIndent: "1rem" + }, + submenuIcon: { + size: "{navigation.submenu.icon.size}", + color: "{navigation.submenu.icon.color}", + focusColor: "{navigation.submenu.icon.focus.color}", + activeColor: "{navigation.submenu.icon.active.color}" + }, + separator: { + borderColor: "{content.border.color}" + } + }, + dataview: { + root: { + borderColor: "transparent", + borderWidth: "0", + borderRadius: "0", + padding: "0" + }, + header: { + background: "{content.background}", + color: "{content.color}", + borderColor: "{content.border.color}", + borderWidth: "0 0 1px 0", + padding: "0.75rem 1rem", + borderRadius: "0" + }, + content: { + background: "{content.background}", + color: "{content.color}", + borderColor: "transparent", + borderWidth: "0", + padding: "0", + borderRadius: "0" + }, + footer: { + background: "{content.background}", + color: "{content.color}", + borderColor: "{content.border.color}", + borderWidth: "1px 0 0 0", + padding: "0.75rem 1rem", + borderRadius: "0" + }, + paginatorTop: { + borderColor: "{content.border.color}", + borderWidth: "0 0 1px 0" + }, + paginatorBottom: { + borderColor: "{content.border.color}", + borderWidth: "1px 0 0 0" + } + }, + datatable: { + root: { + transitionDuration: "{transition.duration}" + }, + header: { + background: "{content.background}", + borderColor: "{datatable.border.color}", + color: "{content.color}", + borderWidth: "0 0 1px 0", + padding: "0.75rem 1rem" + }, + headerCell: { + background: "{content.background}", + hoverBackground: "{content.hover.background}", + selectedBackground: "{highlight.background}", + borderColor: "{datatable.border.color}", + color: "{content.color}", + hoverColor: "{content.hover.color}", + selectedColor: "{highlight.color}", + gap: "0.5rem", + padding: "0.75rem 1rem", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "-1px", + shadow: "{focus.ring.shadow}" + } + }, + columnTitle: { + fontWeight: "600" + }, + row: { + background: "{content.background}", + hoverBackground: "{content.hover.background}", + selectedBackground: "{highlight.background}", + color: "{content.color}", + hoverColor: "{content.hover.color}", + selectedColor: "{highlight.color}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "-1px", + shadow: "{focus.ring.shadow}" + } + }, + bodyCell: { + borderColor: "{datatable.border.color}", + padding: "0.75rem 1rem" + }, + footerCell: { + background: "{content.background}", + borderColor: "{datatable.border.color}", + color: "{content.color}", + padding: "0.75rem 1rem" + }, + columnFooter: { + fontWeight: "600" + }, + footer: { + background: "{content.background}", + borderColor: "{datatable.border.color}", + color: "{content.color}", + borderWidth: "0 0 1px 0", + padding: "0.75rem 1rem" + }, + dropPoint: { + color: "{primary.color}" + }, + + resizeIndicator: { + width: "1px", + color: "{primary.color}" + }, + sortIcon: { + color: "{text.muted.color}", + hoverColor: "{text.hover.muted.color}", + size: "0.875rem" + }, + loadingIcon: { + size: "2rem" + }, + rowToggleButton: { + hoverBackground: "{content.hover.background}", + selectedHoverBackground: "{content.background}", + color: "{text.muted.color}", + hoverColor: "{text.color}", + selectedHoverColor: "{primary.color}", + size: "1.75rem", + borderRadius: "50%", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + filter: { + inlineGap: "0.5rem", + overlaySelect: { + background: "{overlay.select.background}", + borderColor: "{overlay.select.border.color}", + borderRadius: "{overlay.select.border.radius}", + color: "{overlay.select.color}", + shadow: "{overlay.select.shadow}" + }, + overlayPopover: { + background: "{overlay.popover.background}", + borderColor: "{overlay.popover.border.color}", + borderRadius: "{overlay.popover.border.radius}", + color: "{overlay.popover.color}", + shadow: "{overlay.popover.shadow}", + padding: "{overlay.popover.padding}", + gap: "0.5rem" + }, + rule: { + borderColor: "{content.border.color}" + }, + constraintList: { + padding: "{list.padding}", + gap: "{list.gap}" + }, + constraint: { + focusBackground: "{list.option.focus.background}", + selectedBackground: "{list.option.selected.background}", + selectedFocusBackground: "{list.option.selected.focus.background}", + color: "{list.option.color}", + focusColor: "{list.option.focus.color}", + selectedColor: "{list.option.selected.color}", + selectedFocusColor: "{list.option.selected.focus.color}", + separator: { + borderColor: "{content.border.color}" + }, + padding: "{list.option.padding}", + borderRadius: "{list.option.border.radius}" + } + }, + paginatorTop: { + borderColor: "{datatable.border.color}", + borderWidth: "0 0 1px 0" + }, + paginatorBottom: { + borderColor: "{datatable.border.color}", + borderWidth: "0 0 1px 0" + }, + colorScheme: { + light: { + root: { + borderColor: "{content.border.color}" + }, + row: { + stripedBackground: "{surface.50}" + }, + bodyCell: { + selectedBorderColor: "{primary.100}" + } + }, + dark: { + root: { + borderColor: "{surface.800}" + }, + row: { + stripedBackground: "{surface.950}" + }, + bodyCell: { + selectedBorderColor: "{primary.900}" + } + } + } + }, + dialog: { + root: { + background: "{overlay.modal.background}", + borderColor: "{overlay.modal.border.color}", + color: "{overlay.modal.color}", + borderRadius: "{overlay.modal.border.radius}", + shadow: "{overlay.modal.shadow}" + }, + header: { + padding: "{overlay.modal.padding}", + gap: "0.5rem" + }, + title: { + fontSize: "1.25rem", + fontWeight: "600" + }, + content: { + padding: "0 {overlay.modal.padding} {overlay.modal.padding} {overlay.modal.padding}" + }, + footer: { + padding: "0 {overlay.modal.padding} {overlay.modal.padding} {overlay.modal.padding}", + gap: "0.5rem" + } + }, + divider: { + root: { + borderColor: "{content.border.color}" + }, + content: { + background: "{content.background}", + color: "{text.color}" + }, + horizontal: { + margin: "1rem 0", + padding: "0 1rem", + content: { + padding: "0 0.5rem" + } + }, + vertical: { + margin: "0 1rem", + padding: "0.5rem 0", + content: { + padding: "0.5rem 0" + } + } + }, + dock: { + root: { + background: "rgba(255, 255, 255, 0.1)", + borderColor: "rgba(255, 255, 255, 0.2)", + padding: "0.5rem", + borderRadius: "{border.radius.xl}" + }, + item: { + borderRadius: "{content.border.radius}", + padding: "0.5rem", + size: "3rem", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + } + }, + drawer: { + root: { + background: "{overlay.modal.background}", + borderColor: "{overlay.modal.border.color}", + color: "{overlay.modal.color}", + shadow: "{overlay.modal.shadow}" + }, + header: { + padding: "{overlay.modal.padding}" + }, + title: { + fontSize: "1.5rem", + fontWeight: "600" + }, + content: { + padding: "0 {overlay.modal.padding} {overlay.modal.padding} {overlay.modal.padding}" + }, + footer: { + padding: "{overlay.modal.padding}" + } + }, + editor: { + toolbar: { + background: "{content.background}", + borderColor: "{content.border.color}", + borderRadius: "{content.border.radius}" + }, + toolbarItem: { + color: "{text.muted.color}", + hoverColor: "{text.color}", + activeColor: "{primary.color}" + }, + overlay: { + background: "{overlay.select.background}", + borderColor: "{overlay.select.border.color}", + borderRadius: "{overlay.select.border.radius}", + color: "{overlay.select.color}", + shadow: "{overlay.select.shadow}", + padding: "{list.padding}" + }, + overlayOption: { + focusBackground: "{list.option.focus.background}", + color: "{list.option.color}", + focusColor: "{list.option.focus.color}", + padding: "{list.option.padding}", + borderRadius: "{list.option.border.radius}" + }, + content: { + background: "{content.background}", + borderColor: "{content.border.color}", + color: "{content.color}", + borderRadius: "{content.border.radius}" + } + }, + fieldset: { + root: { + background: "{content.background}", + borderColor: "{content.border.color}", + borderRadius: "{content.border.radius}", + color: "{content.color}", + padding: "0 1.125rem 1.125rem 1.125rem", + transitionDuration: "{transition.duration}" + }, + legend: { + background: "{content.background}", + hoverBackground: "{content.hover.background}", + color: "{content.color}", + hoverColor: "{content.hover.color}", + borderRadius: "{content.border.radius}", + borderWidth: "1px", + borderColor: "transparent", + padding: "0.5rem 0.75rem", + gap: "0.5rem", + fontWeight: "600", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + toggleIcon: { + color: "{text.muted.color}", + hoverColor: "{text.hover.muted.color}" + }, + content: { + padding: "0" + } + }, + fileupload: { + root: { + background: "{content.background}", + borderColor: "{content.border.color}", + color: "{content.color}", + borderRadius: "{content.border.radius}", + transitionDuration: "{transition.duration}" + }, + header: { + background: "transparent", + color: "{text.color}", + padding: "1.125rem", + borderColor: "unset", + borderWidth: "0", + borderRadius: "0", + gap: "0.5rem" + }, + content: { + highlightBorderColor: "{primary.color}", + padding: "0 1.125rem 1.125rem 1.125rem", + gap: "1rem" + }, + file: { + padding: "1rem", + gap: "1rem", + borderColor: "{content.border.color}", + info: { + gap: "0.5rem" + } + }, + fileList: { + gap: "0.5rem" + }, + progressbar: { + height: "0.25rem" + }, + basic: { + gap: "0.5rem" + } + }, + iftalabel: { + root: { + color: "{form.field.float.label.color}", + focusColor: "{form.field.float.label.focus.color}", + invalidColor: "{form.field.float.label.invalid.color}", + transitionDuration: "0.2s", + positionX: "{form.field.padding.x}", + top: "{form.field.padding.y}", + fontSize: "0.75rem", + fontWeight: "400" + }, + input: { + paddingTop: "1.5rem", + paddingBottom: "{form.field.padding.y}" + } + }, + floatlabel: { + root: { + color: "{form.field.float.label.color}", + focusColor: "{form.field.float.label.focus.color}", + activeColor: "{form.field.float.label.active.color}", + invalidColor: "{form.field.float.label.invalid.color}", + transitionDuration: "0.2s", + positionX: "{form.field.padding.x}", + positionY: "{form.field.padding.y}", + fontWeight: "500", + active: { + fontSize: "0.75rem", + fontWeight: "400" + } + }, + over: { + active: { + top: "-1.25rem" + } + }, + in: { + input: { + paddingTop: "1.5rem", + paddingBottom: "{form.field.padding.y}" + }, + active: { + top: "{form.field.padding.y}" + } + }, + on: { + borderRadius: "{border.radius.xs}", + active: { + background: "{form.field.background}", + padding: "0 0.125rem" + } + } + }, + galleria: { + root: { + borderWidth: "1px", + borderColor: "{content.border.color}", + borderRadius: "{content.border.radius}", + transitionDuration: "{transition.duration}" + }, + navButton: { + background: "rgba(255, 255, 255, 0.1)", + hoverBackground: "rgba(255, 255, 255, 0.2)", + color: "{surface.100}", + hoverColor: "{surface.0}", + size: "3rem", + gutter: "0.5rem", + prev: { + borderRadius: "50%" + }, + next: { + borderRadius: "50%" + }, + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + navIcon: { + size: "1.5rem" + }, + thumbnailsContent: { + background: "{content.background}", + padding: "1rem 0.25rem" + }, + thumbnailNavButton: { + size: "2rem", + borderRadius: "{content.border.radius}", + gutter: "0.5rem", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + thumbnailNavButtonIcon: { + size: "1rem" + }, + caption: { + background: "rgba(0, 0, 0, 0.5)", + color: "{surface.100}", + padding: "1rem" + }, + indicatorList: { + gap: "0.5rem", + padding: "1rem" + }, + indicatorButton: { + width: "1rem", + height: "1rem", + activeBackground: "{primary.color}", + borderRadius: "50%", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + insetIndicatorList: { + background: "rgba(0, 0, 0, 0.5)" + }, + insetIndicatorButton: { + background: "rgba(255, 255, 255, 0.4)", + hoverBackground: "rgba(255, 255, 255, 0.6)", + activeBackground: "rgba(255, 255, 255, 0.9)" + }, + closeButton: { + size: "3rem", + gutter: "0.5rem", + background: "rgba(255, 255, 255, 0.1)", + hoverBackground: "rgba(255, 255, 255, 0.2)", + color: "{surface.50}", + hoverColor: "{surface.0}", + borderRadius: "50%", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + closeButtonIcon: { + size: "1.5rem" + }, + colorScheme: { + light: { + thumbnailNavButton: { + hoverBackground: "{surface.100}", + color: "{surface.600}", + hoverColor: "{surface.700}" + }, + indicatorButton: { + background: "{surface.200}", + hoverBackground: "{surface.300}" + } + }, + dark: { + thumbnailNavButton: { + hoverBackground: "{surface.700}", + color: "{surface.400}", + hoverColor: "{surface.0}" + }, + indicatorButton: { + background: "{surface.700}", + hoverBackground: "{surface.600}" + } + } + } + }, + iconfield: { + icon: { + color: "{form.field.icon.color}" + } + }, + image: { + root: { + transitionDuration: "{transition.duration}" + }, + preview: { + icon: { + size: "1.5rem" + }, + mask: { + background: "{mask.background}", + color: "{mask.color}" + } + }, + toolbar: { + position: { + left: "auto", + right: "1rem", + top: "1rem", + bottom: "auto" + }, + blur: "8px", + background: "rgba(255,255,255,0.1)", + borderColor: "rgba(255,255,255,0.2)", + borderWidth: "1px", + borderRadius: "30px", + padding: ".5rem", + gap: "0.5rem" + }, + action: { + hoverBackground: "rgba(255,255,255,0.1)", + color: "{surface.50}", + hoverColor: "{surface.0}", + size: "3rem", + iconSize: "1.5rem", + borderRadius: "50%", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + } + }, + imagecompare: { + handle: { + size: "15px", + hoverSize: "30px", + background: "rgba(255,255,255,0.3)", + hoverBackground: "rgba(255,255,255,0.3)", + borderColor: "unset", + hoverBorderColor: "unset", + borderWidth: "0", + borderRadius: "50%", + transitionDuration: "{transition.duration}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "rgba(255,255,255,0.3)", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + } + }, + inlinemessage: { + root: { + padding: "{form.field.padding.y} {form.field.padding.x}", + borderRadius: "{content.border.radius}", + gap: "0.5rem" + }, + text: { + fontWeight: "500" + }, + icon: { + size: "1rem" + }, + colorScheme: { + light: { + info: { + background: "color-mix(in srgb, {blue.50}, transparent 5%)", + borderColor: "{blue.200}", + color: "{blue.600}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {blue.500}, transparent 96%)" + }, + success: { + background: "color-mix(in srgb, {green.50}, transparent 5%)", + borderColor: "{green.200}", + color: "{green.600}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {green.500}, transparent 96%)" + }, + warn: { + background: "color-mix(in srgb,{yellow.50}, transparent 5%)", + borderColor: "{yellow.200}", + color: "{yellow.600}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {yellow.500}, transparent 96%)" + }, + error: { + background: "color-mix(in srgb, {red.50}, transparent 5%)", + borderColor: "{red.200}", + color: "{red.600}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {red.500}, transparent 96%)" + }, + secondary: { + background: "{surface.100}", + borderColor: "{surface.200}", + color: "{surface.600}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.500}, transparent 96%)" + }, + contrast: { + background: "{surface.900}", + borderColor: "{surface.950}", + color: "{surface.50}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.950}, transparent 96%)" + } + }, + dark: { + info: { + background: "color-mix(in srgb, {blue.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {blue.700}, transparent 64%)", + color: "{blue.500}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {blue.500}, transparent 96%)" + }, + success: { + background: "color-mix(in srgb, {green.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {green.700}, transparent 64%)", + color: "{green.500}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {green.500}, transparent 96%)" + }, + warn: { + background: "color-mix(in srgb, {yellow.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {yellow.700}, transparent 64%)", + color: "{yellow.500}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {yellow.500}, transparent 96%)" + }, + error: { + background: "color-mix(in srgb, {red.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {red.700}, transparent 64%)", + color: "{red.500}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {red.500}, transparent 96%)" + }, + secondary: { + background: "{surface.800}", + borderColor: "{surface.700}", + color: "{surface.300}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.500}, transparent 96%)" + }, + contrast: { + background: "{surface.0}", + borderColor: "{surface.100}", + color: "{surface.950}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.950}, transparent 96%)" + } + } + } + }, + inplace: { + root: { + padding: "{form.field.padding.y} {form.field.padding.x}", + borderRadius: "{content.border.radius}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + }, + transitionDuration: "{transition.duration}" + }, + display: { + hoverBackground: "{content.hover.background}", + hoverColor: "{content.hover.color}" + } + }, + inputchips: { + root: { + background: "{form.field.background}", + disabledBackground: "{form.field.disabled.background}", + filledBackground: "{form.field.filled.background}", + filledFocusBackground: "{form.field.filled.focus.background}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.hover.border.color}", + focusBorderColor: "{form.field.focus.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + color: "{form.field.color}", + disabledColor: "{form.field.disabled.color}", + placeholderColor: "{form.field.placeholder.color}", + shadow: "{form.field.shadow}", + paddingX: "{form.field.padding.x}", + paddingY: "{form.field.padding.y}", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{form.field.focus.ring.width}", + style: "{form.field.focus.ring.style}", + color: "{form.field.focus.ring.color}", + offset: "{form.field.focus.ring.offset}", + shadow: "{form.field.focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}" + }, + chip: { + borderRadius: "{border.radius.sm}" + }, + colorScheme: { + light: { + chip: { + focusBackground: "{surface.200}", + color: "{surface.800}" + } + }, + dark: { + chip: { + focusBackground: "{surface.700}", + color: "{surface.0}" + } + } + } + }, + inputgroup: { + addon: { + background: "{form.field.background}", + borderColor: "{form.field.border.color}", + color: "{form.field.icon.color}", + borderRadius: "{form.field.border.radius}", + padding: "0.5rem", + minWidth: "2.5rem" + } + }, + inputnumber: { + root: { + transitionDuration: "{transition.duration}" + }, + button: { + width: "2.5rem", + borderRadius: "{form.field.border.radius}", + verticalPadding: "{form.field.padding.y}" + }, + colorScheme: { + light: { + button: { + background: "transparent", + hoverBackground: "{surface.100}", + activeBackground: "{surface.200}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.border.color}", + activeBorderColor: "{form.field.border.color}", + color: "{surface.400}", + hoverColor: "{surface.500}", + activeColor: "{surface.600}" + } + }, + dark: { + button: { + background: "transparent", + hoverBackground: "{surface.800}", + activeBackground: "{surface.700}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.border.color}", + activeBorderColor: "{form.field.border.color}", + color: "{surface.400}", + hoverColor: "{surface.300}", + activeColor: "{surface.200}" + } + } + } + }, + inputotp: { + root: { + gap: "0.5rem" + }, + input: { + width: "2.5rem", + sm: { + width: "2rem" + }, + lg: { + width: "3rem" + } + } + }, + inputtext: { + root: { + background: "{form.field.background}", + disabledBackground: "{form.field.disabled.background}", + filledBackground: "{form.field.filled.background}", + filledHoverBackground: "{form.field.filled.hover.background}", + filledFocusBackground: "{form.field.filled.focus.background}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.hover.border.color}", + focusBorderColor: "{form.field.focus.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + color: "{form.field.color}", + disabledColor: "{form.field.disabled.color}", + placeholderColor: "{form.field.placeholder.color}", + invalidPlaceholderColor: "{form.field.invalid.placeholder.color}", + shadow: "{form.field.shadow}", + paddingX: "{form.field.padding.x}", + paddingY: "{form.field.padding.y}", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{form.field.focus.ring.width}", + style: "{form.field.focus.ring.style}", + color: "{form.field.focus.ring.color}", + offset: "{form.field.focus.ring.offset}", + shadow: "{form.field.focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}", + sm: { + fontSize: "{form.field.sm.font.size}", + paddingX: "{form.field.sm.padding.x}", + paddingY: "{form.field.sm.padding.y}" + }, + lg: { + fontSize: "{form.field.lg.font.size}", + paddingX: "{form.field.lg.padding.x}", + paddingY: "{form.field.lg.padding.y}" + } + } + }, + knob: { + root: { + transitionDuration: "{transition.duration}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + value: { + background: "{primary.color}" + }, + range: { + background: "{content.border.color}" + }, + text: { + color: "{text.muted.color}" + } + }, + listbox: { + root: { + background: "{form.field.background}", + disabledBackground: "{form.field.disabled.background}", + borderColor: "{form.field.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + color: "{form.field.color}", + disabledColor: "{form.field.disabled.color}", + shadow: "{form.field.shadow}", + borderRadius: "{form.field.border.radius}", + transitionDuration: "{form.field.transition.duration}" + }, + list: { + padding: "{list.padding}", + gap: "{list.gap}", + header: { + padding: "{list.header.padding}" + } + }, + option: { + focusBackground: "{list.option.focus.background}", + selectedBackground: "{list.option.selected.background}", + selectedFocusBackground: "{list.option.selected.focus.background}", + color: "{list.option.color}", + focusColor: "{list.option.focus.color}", + selectedColor: "{list.option.selected.color}", + selectedFocusColor: "{list.option.selected.focus.color}", + padding: "{list.option.padding}", + borderRadius: "{list.option.border.radius}" + }, + optionGroup: { + background: "{list.option.group.background}", + color: "{list.option.group.color}", + fontWeight: "{list.option.group.font.weight}", + padding: "{list.option.group.padding}" + }, + checkmark: { + color: "{list.option.color}", + gutterStart: "-0.375rem", + gutterEnd: "0.375rem" + }, + emptyMessage: { + padding: "{list.option.padding}" + }, + colorScheme: { + light: { + option: { + stripedBackground: "{surface.50}" + } + }, + dark: { + option: { + stripedBackground: "{surface.900}" + } + } + } + }, + megamenu: { + root: { + background: "{content.background}", + borderColor: "{content.border.color}", + borderRadius: "{content.border.radius}", + color: "{content.color}", + gap: "0.5rem", + verticalOrientation: { + padding: "{navigation.list.padding}", + gap: "{navigation.list.gap}" + }, + horizontalOrientation: { + padding: "0.5rem 0.75rem", + gap: "0.5rem" + }, + transitionDuration: "{transition.duration}" + }, + baseItem: { + borderRadius: "{content.border.radius}", + padding: "{navigation.item.padding}" + }, + item: { + focusBackground: "{navigation.item.focus.background}", + activeBackground: "{navigation.item.active.background}", + color: "{navigation.item.color}", + focusColor: "{navigation.item.focus.color}", + activeColor: "{navigation.item.active.color}", + padding: "{navigation.item.padding}", + borderRadius: "{navigation.item.border.radius}", + gap: "{navigation.item.gap}", + icon: { + color: "{navigation.item.icon.color}", + focusColor: "{navigation.item.icon.focus.color}", + activeColor: "{navigation.item.icon.active.color}" + } + }, + overlay: { + padding: "0", + background: "{content.background}", + borderColor: "{content.border.color}", + borderRadius: "{content.border.radius}", + color: "{content.color}", + shadow: "{overlay.navigation.shadow}", + gap: "0.5rem" + }, + submenu: { + padding: "{navigation.list.padding}", + gap: "{navigation.list.gap}" + }, + submenuLabel: { + padding: "{navigation.submenu.label.padding}", + fontWeight: "{navigation.submenu.label.font.weight}", + background: "{navigation.submenu.label.background.}", + color: "{navigation.submenu.label.color}" + }, + submenuIcon: { + size: "{navigation.submenu.icon.size}", + color: "{navigation.submenu.icon.color}", + focusColor: "{navigation.submenu.icon.focus.color}", + activeColor: "{navigation.submenu.icon.active.color}" + }, + separator: { + borderColor: "{content.border.color}" + }, + mobileButton: { + borderRadius: "50%", + size: "1.75rem", + color: "{text.muted.color}", + hoverColor: "{text.hover.muted.color}", + hoverBackground: "{content.hover.background}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + } + }, + menu: { + root: { + background: "{content.background}", + borderColor: "{content.border.color}", + color: "{content.color}", + borderRadius: "{content.border.radius}", + shadow: "{overlay.navigation.shadow}", + transitionDuration: "{transition.duration}" + }, + list: { + padding: "{navigation.list.padding}", + gap: "{navigation.list.gap}" + }, + item: { + focusBackground: "{navigation.item.focus.background}", + color: "{navigation.item.color}", + focusColor: "{navigation.item.focus.color}", + padding: "{navigation.item.padding}", + borderRadius: "{navigation.item.border.radius}", + gap: "{navigation.item.gap}", + icon: { + color: "{navigation.item.icon.color}", + focusColor: "{navigation.item.icon.focus.color}" + } + }, + submenuLabel: { + padding: "{navigation.submenu.label.padding}", + fontWeight: "{navigation.submenu.label.font.weight}", + background: "{navigation.submenu.label.background}", + color: "{navigation.submenu.label.color}" + }, + separator: { + borderColor: "{content.border.color}" + } + }, + menubar: { + root: { + background: "{content.background}", + borderColor: "{content.border.color}", + borderRadius: "{content.border.radius}", + color: "{content.color}", + gap: "0.5rem", + padding: "0.5rem 0.75rem", + transitionDuration: "{transition.duration}" + }, + baseItem: { + borderRadius: "{content.border.radius}", + padding: "{navigation.item.padding}" + }, + item: { + focusBackground: "{navigation.item.focus.background}", + activeBackground: "{navigation.item.active.background}", + color: "{navigation.item.color}", + focusColor: "{navigation.item.focus.color}", + activeColor: "{navigation.item.active.color}", + padding: "{navigation.item.padding}", + borderRadius: "{navigation.item.border.radius}", + gap: "{navigation.item.gap}", + icon: { + color: "{navigation.item.icon.color}", + focusColor: "{navigation.item.icon.focus.color}", + activeColor: "{navigation.item.icon.active.color}" + } + }, + submenu: { + padding: "{navigation.list.padding}", + gap: "{navigation.list.gap}", + background: "{content.background}", + borderColor: "{content.border.color}", + borderRadius: "{content.border.radius}", + shadow: "{overlay.navigation.shadow}", + mobileIndent: "1rem", + icon: { + size: "{navigation.submenu.icon.size}", + color: "{navigation.submenu.icon.color}", + focusColor: "{navigation.submenu.icon.focus.color}", + activeColor: "{navigation.submenu.icon.active.color}" + } + }, + separator: { + borderColor: "{content.border.color}" + }, + mobileButton: { + borderRadius: "50%", + size: "1.75rem", + color: "{text.muted.color}", + hoverColor: "{text.hover.muted.color}", + hoverBackground: "{content.hover.background}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + } + }, + message: { + root: { + borderRadius: "{content.border.radius}", + borderWidth: "1px", + transitionDuration: "{transition.duration}" + }, + content: { + padding: "0.5rem 0.75rem", + gap: "0.5rem", + sm: { + padding: "0.375rem 0.625rem" + }, + lg: { + padding: "0.625rem 0.875rem" + } + }, + text: { + fontSize: "1rem", + fontWeight: "500", + sm: { + fontSize: "0.875rem" + }, + lg: { + fontSize: "1.125rem" + } + }, + icon: { + size: "1.125rem", + sm: { + size: "1rem" + }, + lg: { + size: "1.25rem" + } + }, + closeButton: { + width: "1.75rem", + height: "1.75rem", + borderRadius: "50%", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + offset: "{focus.ring.offset}" + } + }, + closeIcon: { + size: "1rem", + sm: { + size: "0.875rem" + }, + lg: { + size: "1.125rem" + } + }, + outlined: { + root: { + borderWidth: "1px" + } + }, + simple: { + content: { + padding: "0" + } + }, + colorScheme: { + light: { + info: { + background: "color-mix(in srgb, {blue.50}, transparent 5%)", + borderColor: "{blue.200}", + color: "{blue.600}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {blue.500}, transparent 96%)", + closeButton: { + hoverBackground: "{blue.100}", + focusRing: { + color: "{blue.600}", + shadow: "none" + } + }, + outlined: { + color: "{blue.600}", + borderColor: "{blue.600}" + }, + simple: { + color: "{blue.600}" + } + }, + success: { + background: "color-mix(in srgb, {green.50}, transparent 5%)", + borderColor: "{green.200}", + color: "{green.600}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {green.500}, transparent 96%)", + closeButton: { + hoverBackground: "{green.100}", + focusRing: { + color: "{green.600}", + shadow: "none" + } + }, + outlined: { + color: "{green.600}", + borderColor: "{green.600}" + }, + simple: { + color: "{green.600}" + } + }, + warn: { + background: "color-mix(in srgb,{yellow.50}, transparent 5%)", + borderColor: "{yellow.200}", + color: "{yellow.600}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {yellow.500}, transparent 96%)", + closeButton: { + hoverBackground: "{yellow.100}", + focusRing: { + color: "{yellow.600}", + shadow: "none" + } + }, + outlined: { + color: "{yellow.600}", + borderColor: "{yellow.600}" + }, + simple: { + color: "{yellow.600}" + } + }, + error: { + background: "color-mix(in srgb, {red.50}, transparent 5%)", + borderColor: "{red.200}", + color: "{red.600}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {red.500}, transparent 96%)", + closeButton: { + hoverBackground: "{red.100}", + focusRing: { + color: "{red.600}", + shadow: "none" + } + }, + outlined: { + color: "{red.600}", + borderColor: "{red.600}" + }, + simple: { + color: "{red.600}" + } + }, + secondary: { + background: "{surface.100}", + borderColor: "{surface.200}", + color: "{surface.600}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.500}, transparent 96%)", + closeButton: { + hoverBackground: "{surface.200}", + focusRing: { + color: "{surface.600}", + shadow: "none" + } + }, + outlined: { + color: "{surface.500}", + borderColor: "{surface.500}" + }, + simple: { + color: "{surface.500}" + } + }, + contrast: { + background: "{surface.900}", + borderColor: "{surface.950}", + color: "{surface.50}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.950}, transparent 96%)", + closeButton: { + hoverBackground: "{surface.800}", + focusRing: { + color: "{surface.50}", + shadow: "none" + } + }, + outlined: { + color: "{surface.950}", + borderColor: "{surface.950}" + }, + simple: { + color: "{surface.950}" + } + } + }, + dark: { + info: { + background: "color-mix(in srgb, {blue.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {blue.700}, transparent 64%)", + color: "{blue.500}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {blue.500}, transparent 96%)", + closeButton: { + hoverBackground: "rgba(255, 255, 255, 0.05)", + focusRing: { + color: "{blue.500}", + shadow: "none" + } + }, + outlined: { + color: "{blue.500}", + borderColor: "{blue.500}" + }, + simple: { + color: "{blue.500}" + } + }, + success: { + background: "color-mix(in srgb, {green.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {green.700}, transparent 64%)", + color: "{green.500}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {green.500}, transparent 96%)", + closeButton: { + hoverBackground: "rgba(255, 255, 255, 0.05)", + focusRing: { + color: "{green.500}", + shadow: "none" + } + }, + outlined: { + color: "{green.500}", + borderColor: "{green.500}" + }, + simple: { + color: "{green.500}" + } + }, + warn: { + background: "color-mix(in srgb, {yellow.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {yellow.700}, transparent 64%)", + color: "{yellow.500}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {yellow.500}, transparent 96%)", + closeButton: { + hoverBackground: "rgba(255, 255, 255, 0.05)", + focusRing: { + color: "{yellow.500}", + shadow: "none" + } + }, + outlined: { + color: "{yellow.500}", + borderColor: "{yellow.500}" + }, + simple: { + color: "{yellow.500}" + } + }, + error: { + background: "color-mix(in srgb, {red.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {red.700}, transparent 64%)", + color: "{red.500}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {red.500}, transparent 96%)", + closeButton: { + hoverBackground: "rgba(255, 255, 255, 0.05)", + focusRing: { + color: "{red.500}", + shadow: "none" + } + }, + outlined: { + color: "{red.500}", + borderColor: "{red.500}" + }, + simple: { + color: "{red.500}" + } + }, + secondary: { + background: "{surface.800}", + borderColor: "{surface.700}", + color: "{surface.300}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.500}, transparent 96%)", + closeButton: { + hoverBackground: "{surface.700}", + focusRing: { + color: "{surface.300}", + shadow: "none" + } + }, + outlined: { + color: "{surface.400}", + borderColor: "{surface.400}" + }, + simple: { + color: "{surface.400}" + } + }, + contrast: { + background: "{surface.0}", + borderColor: "{surface.100}", + color: "{surface.950}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.950}, transparent 96%)", + closeButton: { + hoverBackground: "{surface.100}", + focusRing: { + color: "{surface.950}", + shadow: "none" + } + }, + outlined: { + color: "{surface.0}", + borderColor: "{surface.0}" + }, + simple: { + color: "{surface.0}" + } + } + } + } + }, + metergroup: { + root: { + borderRadius: "{content.border.radius}", + gap: "1rem" + }, + meters: { + background: "{content.border.color}", + size: "0.5rem" + }, + label: { + gap: "0.5rem" + }, + labelMarker: { + size: "0.5rem" + }, + labelIcon: { + size: "1rem" + }, + labelList: { + verticalGap: "0.5rem", + horizontalGap: "1rem" + } + }, + multiselect: { + root: { + background: "{form.field.background}", + disabledBackground: "{form.field.disabled.background}", + filledBackground: "{form.field.filled.background}", + filledHoverBackground: "{form.field.filled.hover.background}", + filledFocusBackground: "{form.field.filled.focus.background}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.hover.border.color}", + focusBorderColor: "{form.field.focus.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + color: "{form.field.color}", + disabledColor: "{form.field.disabled.color}", + placeholderColor: "{form.field.placeholder.color}", + invalidPlaceholderColor: "{form.field.invalid.placeholder.color}", + shadow: "{form.field.shadow}", + paddingX: "{form.field.padding.x}", + paddingY: "{form.field.padding.y}", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{form.field.focus.ring.width}", + style: "{form.field.focus.ring.style}", + color: "{form.field.focus.ring.color}", + offset: "{form.field.focus.ring.offset}", + shadow: "{form.field.focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}", + sm: { + fontSize: "{form.field.sm.font.size}", + paddingX: "{form.field.sm.padding.x}", + paddingY: "{form.field.sm.padding.y}" + }, + lg: { + fontSize: "{form.field.lg.font.size}", + paddingX: "{form.field.lg.padding.x}", + paddingY: "{form.field.lg.padding.y}" + } + }, + dropdown: { + width: "2.5rem", + color: "{form.field.icon.color}" + }, + overlay: { + background: "{overlay.select.background}", + borderColor: "{overlay.select.border.color}", + borderRadius: "{overlay.select.border.radius}", + color: "{overlay.select.color}", + shadow: "{overlay.select.shadow}" + }, + list: { + padding: "{list.padding}", + gap: "{list.gap}", + header: { + padding: "{list.header.padding}" + } + }, + option: { + focusBackground: "{list.option.focus.background}", + selectedBackground: "{list.option.selected.background}", + selectedFocusBackground: "{list.option.selected.focus.background}", + color: "{list.option.color}", + focusColor: "{list.option.focus.color}", + selectedColor: "{list.option.selected.color}", + selectedFocusColor: "{list.option.selected.focus.color}", + padding: "{list.option.padding}", + borderRadius: "{list.option.border.radius}", + gap: "0.5rem" + }, + optionGroup: { + background: "{list.option.group.background}", + color: "{list.option.group.color}", + fontWeight: "{list.option.group.font.weight}", + padding: "{list.option.group.padding}" + }, + clearIcon: { + color: "{form.field.icon.color}" + }, + chip: { + borderRadius: "{border.radius.sm}" + }, + emptyMessage: { + padding: "{list.option.padding}" + } + }, + orderlist: { + root: { + gap: "1.125rem" + }, + controls: { + gap: "0.5rem" + } + }, + organizationchart: { + root: { + gutter: "0.75rem", + transitionDuration: "{transition.duration}" + }, + node: { + background: "{content.background}", + hoverBackground: "{content.hover.background}", + selectedBackground: "{highlight.background}", + borderColor: "{content.border.color}", + color: "{content.color}", + selectedColor: "{highlight.color}", + hoverColor: "{content.hover.color}", + padding: "0.75rem 1rem", + toggleablePadding: "0.75rem 1rem 1.25rem 1rem", + borderRadius: "{content.border.radius}" + }, + nodeToggleButton: { + background: "{content.background}", + hoverBackground: "{content.hover.background}", + borderColor: "{content.border.color}", + color: "{text.muted.color}", + hoverColor: "{text.color}", + size: "1.5rem", + borderRadius: "50%", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + connector: { + color: "{content.border.color}", + borderRadius: "{content.border.radius}", + height: "24px" + } + }, + overlaybadge: { + root: { + outline: { + width: "2px", + color: "{content.background}" + } + } + }, + popover: { + root: { + background: "{overlay.popover.background}", + borderColor: "{overlay.popover.border.color}", + color: "{overlay.popover.color}", + borderRadius: "{overlay.popover.border.radius}", + shadow: "{overlay.popover.shadow}", + gutter: "10px", + arrowOffset: "1.25rem" + }, + content: { + padding: "{overlay.popover.padding}" + } + }, + paginator: { + root: { + padding: "0.5rem 1rem", + gap: "0.25rem", + borderRadius: "{content.border.radius}", + background: "{content.background}", + color: "{content.color}", + transitionDuration: "{transition.duration}" + }, + navButton: { + background: "transparent", + hoverBackground: "{content.hover.background}", + selectedBackground: "{highlight.background}", + color: "{text.muted.color}", + hoverColor: "{text.hover.muted.color}", + selectedColor: "{highlight.color}", + width: "2.5rem", + height: "2.5rem", + borderRadius: "50%", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + currentPageReport: { + color: "{text.muted.color}" + }, + jumpToPageInput: { + maxWidth: "2.5rem" + } + }, + password: { + meter: { + background: "{content.border.color}", + borderRadius: "{content.border.radius}", + height: ".75rem" + }, + icon: { + color: "{form.field.icon.color}" + }, + overlay: { + background: "{overlay.popover.background}", + borderColor: "{overlay.popover.border.color}", + borderRadius: "{overlay.popover.border.radius}", + color: "{overlay.popover.color}", + padding: "{overlay.popover.padding}", + shadow: "{overlay.popover.shadow}" + }, + content: { + gap: "0.5rem" + }, + colorScheme: { + light: { + strength: { + weakBackground: "{red.500}", + mediumBackground: "{amber.500}", + strongBackground: "{green.500}" + } + }, + dark: { + strength: { + weakBackground: "{red.400}", + mediumBackground: "{amber.400}", + strongBackground: "{green.400}" + } + } + } + }, + panel: { + root: { + background: "{content.background}", + borderColor: "{content.border.color}", + color: "{content.color}", + borderRadius: "{content.border.radius}" + }, + header: { + background: "transparent", + color: "{text.color}", + padding: "1.125rem", + borderColor: "{content.border.color}", + borderWidth: "0", + borderRadius: "0" + }, + toggleableHeader: { + padding: "0.375rem 1.125rem" + }, + title: { + fontWeight: "600" + }, + content: { + padding: "0 1.125rem 1.125rem 1.125rem" + }, + footer: { + padding: "0 1.125rem 1.125rem 1.125rem" + } + }, + panelmenu: { + root: { + gap: "0.5rem", + transitionDuration: "{transition.duration}" + }, + panel: { + background: "{content.background}", + borderColor: "{content.border.color}", + borderWidth: "1px", + color: "{content.color}", + padding: "0.25rem 0.25rem", + borderRadius: "{content.border.radius}", + first: { + borderWidth: "1px", + topBorderRadius: "{content.border.radius}" + }, + last: { + borderWidth: "1px", + bottomBorderRadius: "{content.border.radius}" + } + }, + item: { + focusBackground: "{navigation.item.focus.background}", + color: "{navigation.item.color}", + focusColor: "{navigation.item.focus.color}", + gap: "0.5rem", + padding: "{navigation.item.padding}", + borderRadius: "{content.border.radius}", + icon: { + color: "{navigation.item.icon.color}", + focusColor: "{navigation.item.icon.focus.color}" + } + }, + submenu: { + indent: "1rem" + }, + submenuIcon: { + color: "{navigation.submenu.icon.color}", + focusColor: "{navigation.submenu.icon.focus.color}" + } + }, + picklist: { + root: { + gap: "1.125rem" + }, + controls: { + gap: "0.5rem" + } + }, + progressbar: { + root: { + background: "{content.border.color}", + borderRadius: "{content.border.radius}", + height: "1.25rem" + }, + value: { + background: "{primary.color}" + }, + label: { + color: "{primary.contrast.color}", + fontSize: "0.75rem", + fontWeight: "600" + } + }, + progressspinner: { + colorScheme: { + light: { + root: { + + + + + } + }, + dark: { + root: { + + } + } + } + }, + radiobutton: { + root: { + width: "1.25rem", + height: "1.25rem", + background: "{form.field.background}", + checkedBackground: "{primary.color}", + checkedHoverBackground: "{primary.hover.color}", + disabledBackground: "{form.field.disabled.background}", + filledBackground: "{form.field.filled.background}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.hover.border.color}", + focusBorderColor: "{form.field.border.color}", + checkedBorderColor: "{primary.color}", + checkedHoverBorderColor: "{primary.hover.color}", + checkedFocusBorderColor: "{primary.color}", + checkedDisabledBorderColor: "{form.field.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + shadow: "{form.field.shadow}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}", + sm: { + width: "1rem", + height: "1rem" + }, + lg: { + width: "1.5rem", + height: "1.5rem" + } + }, + icon: { + size: "0.75rem", + checkedColor: "{primary.contrast.color}", + checkedHoverColor: "{primary.contrast.color}", + disabledColor: "{form.field.disabled.color}", + sm: { + size: "0.5rem" + }, + lg: { + size: "1rem" + } + } + }, + rating: { + root: { + gap: "0.25rem", + transitionDuration: "{transition.duration}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + icon: { + size: "1rem", + color: "{text.muted.color}", + hoverColor: "{primary.color}", + activeColor: "{primary.color}" + } + }, + scrollpanel: { + root: { + transitionDuration: "{transition.duration}" + }, + bar: { + size: "9px", + borderRadius: "{border.radius.sm}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + colorScheme: { + light: { + bar: { + background: "{surface.100}" + } + }, + dark: { + bar: { + background: "{surface.800}" + } + } + } + }, + select: { + root: { + background: "{form.field.background}", + disabledBackground: "{form.field.disabled.background}", + filledBackground: "{form.field.filled.background}", + filledHoverBackground: "{form.field.filled.hover.background}", + filledFocusBackground: "{form.field.filled.focus.background}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.hover.border.color}", + focusBorderColor: "{form.field.focus.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + color: "{form.field.color}", + disabledColor: "{form.field.disabled.color}", + placeholderColor: "{form.field.placeholder.color}", + invalidPlaceholderColor: "{form.field.invalid.placeholder.color}", + shadow: "{form.field.shadow}", + paddingX: "{form.field.padding.x}", + paddingY: "{form.field.padding.y}", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{form.field.focus.ring.width}", + style: "{form.field.focus.ring.style}", + color: "{form.field.focus.ring.color}", + offset: "{form.field.focus.ring.offset}", + shadow: "{form.field.focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}", + sm: { + fontSize: "{form.field.sm.font.size}", + paddingX: "{form.field.sm.padding.x}", + paddingY: "{form.field.sm.padding.y}" + }, + lg: { + fontSize: "{form.field.lg.font.size}", + paddingX: "{form.field.lg.padding.x}", + paddingY: "{form.field.lg.padding.y}" + } + }, + dropdown: { + width: "2.5rem", + color: "{form.field.icon.color}" + }, + overlay: { + background: "{overlay.select.background}", + borderColor: "{overlay.select.border.color}", + borderRadius: "{overlay.select.border.radius}", + color: "{overlay.select.color}", + shadow: "{overlay.select.shadow}" + }, + list: { + padding: "{list.padding}", + gap: "{list.gap}", + header: { + padding: "{list.header.padding}" + } + }, + option: { + focusBackground: "{list.option.focus.background}", + selectedBackground: "{list.option.selected.background}", + selectedFocusBackground: "{list.option.selected.focus.background}", + color: "{list.option.color}", + focusColor: "{list.option.focus.color}", + selectedColor: "{list.option.selected.color}", + selectedFocusColor: "{list.option.selected.focus.color}", + padding: "{list.option.padding}", + borderRadius: "{list.option.border.radius}" + }, + optionGroup: { + background: "{list.option.group.background}", + color: "{list.option.group.color}", + fontWeight: "{list.option.group.font.weight}", + padding: "{list.option.group.padding}" + }, + clearIcon: { + color: "{form.field.icon.color}" + }, + checkmark: { + color: "{list.option.color}", + gutterStart: "-0.375rem", + gutterEnd: "0.375rem" + }, + emptyMessage: { + padding: "{list.option.padding}" + } + }, + selectbutton: { + root: { + borderRadius: "{form.field.border.radius}" + }, + colorScheme: { + light: { + root: { + invalidBorderColor: "{form.field.invalid.border.color}" + } + }, + dark: { + root: { + invalidBorderColor: "{form.field.invalid.border.color}" + } + } + } + }, + skeleton: { + root: { + borderRadius: "{content.border.radius}" + }, + colorScheme: { + light: { + root: { + background: "{surface.200}", + animationBackground: "rgba(255,255,255,0.4)" + } + }, + dark: { + root: { + background: "rgba(255, 255, 255, 0.06)", + animationBackground: "rgba(255, 255, 255, 0.04)" + } + } + } + }, + slider: { + root: { + transitionDuration: "{transition.duration}" + }, + track: { + background: "{content.border.color}", + borderRadius: "{content.border.radius}", + size: "3px" + }, + range: { + background: "{primary.color}" + }, + handle: { + width: "20px", + height: "20px", + borderRadius: "50%", + background: "{content.border.color}", + hoverBackground: "{content.border.color}", + content: { + borderRadius: "50%", + hoverBackground: "{content.background}", + width: "16px", + height: "16px", + shadow: "0px 0.5px 0px 0px rgba(0, 0, 0, 0.08), 0px 1px 1px 0px rgba(0, 0, 0, 0.14)" + }, + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + colorScheme: { + light: { + handle: { + } + }, + dark: { + handle: { + + } + } + } + }, + speeddial: { + root: { + gap: "0.5rem", + transitionDuration: "{transition.duration}" + } + }, + splitter: { + root: { + background: "{content.background}", + borderColor: "{content.border.color}", + color: "{content.color}", + transitionDuration: "{transition.duration}" + }, + gutter: { + background: "{content.border.color}" + }, + handle: { + size: "24px", + background: "transparent", + borderRadius: "{content.border.radius}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + } + }, + splitbutton: { + root: { + borderRadius: "{form.field.border.radius}", + roundedBorderRadius: "2rem", + raisedShadow: "0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12)" + } + }, + stepper: { + root: { + transitionDuration: "{transition.duration}" + }, + separator: { + background: "{content.border.color}", + activeBackground: "{primary.color}", + margin: "0 0 0 1.625rem", + size: "2px" + }, + step: { + padding: "0.5rem", + gap: "1rem" + }, + stepHeader: { + padding: "0", + borderRadius: "{content.border.radius}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + }, + gap: "0.5rem" + }, + stepTitle: { + color: "{text.muted.color}", + activeColor: "{primary.color}", + fontWeight: "500" + }, + stepNumber: { + background: "{content.background}", + activeBackground: "{content.background}", + borderColor: "{content.border.color}", + activeBorderColor: "{content.border.color}", + color: "{text.muted.color}", + activeColor: "{primary.color}", + size: "2rem", + fontSize: "1.143rem", + fontWeight: "500", + borderRadius: "50%", + shadow: "0px 0.5px 0px 0px rgba(0, 0, 0, 0.06), 0px 1px 1px 0px rgba(0, 0, 0, 0.12)" + }, + steppanels: { + padding: "0.875rem 0.5rem 1.125rem 0.5rem" + }, + steppanel: { + background: "{content.background}", + color: "{content.color}", + padding: "0", + indent: "1rem" + } + }, + steps: { + root: { + transitionDuration: "{transition.duration}" + }, + separator: { + background: "{content.border.color}" + }, + itemLink: { + borderRadius: "{content.border.radius}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + }, + gap: "0.5rem" + }, + itemLabel: { + color: "{text.muted.color}", + activeColor: "{primary.color}", + fontWeight: "500" + }, + itemNumber: { + background: "{content.background}", + activeBackground: "{content.background}", + borderColor: "{content.border.color}", + activeBorderColor: "{content.border.color}", + color: "{text.muted.color}", + activeColor: "{primary.color}", + size: "2rem", + fontSize: "1.143rem", + fontWeight: "500", + borderRadius: "50%", + shadow: "0px 0.5px 0px 0px rgba(0, 0, 0, 0.06), 0px 1px 1px 0px rgba(0, 0, 0, 0.12)" + } + }, + tabmenu: { + root: { + transitionDuration: "{transition.duration}" + }, + tablist: { + borderWidth: "0 0 1px 0", + background: "{content.background}", + borderColor: "{content.border.color}" + }, + item: { + background: "transparent", + hoverBackground: "transparent", + activeBackground: "transparent", + borderWidth: "0 0 1px 0", + borderColor: "{content.border.color}", + hoverBorderColor: "{content.border.color}", + activeBorderColor: "{primary.color}", + color: "{text.muted.color}", + hoverColor: "{text.color}", + activeColor: "{primary.color}", + padding: "1rem 1.125rem", + fontWeight: "600", + margin: "0 0 -1px 0", + gap: "0.5rem", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + itemIcon: { + color: "{text.muted.color}", + hoverColor: "{text.color}", + activeColor: "{primary.color}" + }, + activeBar: { + height: "1px", + bottom: "-1px", + background: "{primary.color}" + } + }, + tabs: { + root: { + transitionDuration: "{transition.duration}" + }, + tablist: { + borderWidth: "0 0 1px 0", + background: "{content.background}", + borderColor: "{content.border.color}" + }, + tab: { + background: "transparent", + hoverBackground: "transparent", + activeBackground: "transparent", + borderWidth: "0 0 1px 0", + borderColor: "{content.border.color}", + hoverBorderColor: "{content.border.color}", + activeBorderColor: "{primary.color}", + color: "{text.muted.color}", + hoverColor: "{text.color}", + activeColor: "{primary.color}", + padding: "1rem 1.125rem", + fontWeight: "600", + margin: "0 0 -1px 0", + gap: "0.5rem", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "-1px", + shadow: "{focus.ring.shadow}" + } + }, + tabpanel: { + background: "{content.background}", + color: "{content.color}", + padding: "0.875rem 1.125rem 1.125rem 1.125rem", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "inset {focus.ring.shadow}" + } + }, + navButton: { + background: "{content.background}", + color: "{text.muted.color}", + hoverColor: "{text.color}", + width: "2.5rem", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "-1px", + shadow: "{focus.ring.shadow}" + } + }, + activeBar: { + height: "1px", + bottom: "-1px", + background: "{primary.color}" + }, + colorScheme: { + light: { + navButton: { + shadow: "0px 0px 10px 50px rgba(255, 255, 255, 0.6)" + } + }, + dark: { + navButton: { + shadow: "0px 0px 10px 50px color-mix(in srgb, {content.background}, transparent 50%)" + } + } + } + }, + tabview: { + root: { + transitionDuration: "{transition.duration}" + }, + tabList: { + background: "{content.background}", + borderColor: "{content.border.color}" + }, + tab: { + borderColor: "{content.border.color}", + activeBorderColor: "{primary.color}", + color: "{text.muted.color}", + hoverColor: "{text.color}", + activeColor: "{primary.color}" + }, + tabPanel: { + background: "{content.background}", + color: "{content.color}" + }, + navButton: { + background: "{content.background}", + color: "{text.muted.color}", + hoverColor: "{text.color}" + }, + colorScheme: { + light: { + navButton: { + shadow: "0px 0px 10px 50px rgba(255, 255, 255, 0.6)" + } + }, + dark: { + navButton: { + shadow: "0px 0px 10px 50px color-mix(in srgb, {content.background}, transparent 50%)" + } + } + } + }, + textarea: { + root: { + background: "{form.field.background}", + disabledBackground: "{form.field.disabled.background}", + filledBackground: "{form.field.filled.background}", + filledHoverBackground: "{form.field.filled.hover.background}", + filledFocusBackground: "{form.field.filled.focus.background}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.hover.border.color}", + focusBorderColor: "{form.field.focus.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + color: "{form.field.color}", + disabledColor: "{form.field.disabled.color}", + placeholderColor: "{form.field.placeholder.color}", + invalidPlaceholderColor: "{form.field.invalid.placeholder.color}", + shadow: "{form.field.shadow}", + paddingX: "{form.field.padding.x}", + paddingY: "{form.field.padding.y}", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{form.field.focus.ring.width}", + style: "{form.field.focus.ring.style}", + color: "{form.field.focus.ring.color}", + offset: "{form.field.focus.ring.offset}", + shadow: "{form.field.focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}", + sm: { + fontSize: "{form.field.sm.font.size}", + paddingX: "{form.field.sm.padding.x}", + paddingY: "{form.field.sm.padding.y}" + }, + lg: { + fontSize: "{form.field.lg.font.size}", + paddingX: "{form.field.lg.padding.x}", + paddingY: "{form.field.lg.padding.y}" + } + } + }, + tieredmenu: { + root: { + background: "{content.background}", + borderColor: "{content.border.color}", + color: "{content.color}", + borderRadius: "{content.border.radius}", + shadow: "{overlay.navigation.shadow}", + transitionDuration: "{transition.duration}" + }, + list: { + padding: "{navigation.list.padding}", + gap: "{navigation.list.gap}" + }, + item: { + focusBackground: "{navigation.item.focus.background}", + activeBackground: "{navigation.item.active.background}", + color: "{navigation.item.color}", + focusColor: "{navigation.item.focus.color}", + activeColor: "{navigation.item.active.color}", + padding: "{navigation.item.padding}", + borderRadius: "{navigation.item.border.radius}", + gap: "{navigation.item.gap}", + icon: { + color: "{navigation.item.icon.color}", + focusColor: "{navigation.item.icon.focus.color}", + activeColor: "{navigation.item.icon.active.color}" + } + }, + submenu: { + mobileIndent: "1rem" + }, + submenuIcon: { + size: "{navigation.submenu.icon.size}", + color: "{navigation.submenu.icon.color}", + focusColor: "{navigation.submenu.icon.focus.color}", + activeColor: "{navigation.submenu.icon.active.color}" + }, + separator: { + borderColor: "{content.border.color}" + } + }, + tag: { + root: { + fontSize: "0.875rem", + fontWeight: "700", + padding: "0.25rem 0.5rem", + gap: "0.25rem", + borderRadius: "{content.border.radius}", + roundedBorderRadius: "{border.radius.xl}" + }, + icon: { + size: "0.75rem" + }, + colorScheme: { + light: { + primary: { + background: "{primary.100}", + color: "{primary.700}" + }, + secondary: { + background: "{surface.100}", + color: "{surface.600}" + }, + success: { + background: "{green.100}", + color: "{green.700}" + }, + info: { + background: "{sky.100}", + color: "{sky.700}" + }, + warn: { + background: "{orange.100}", + color: "{orange.700}" + }, + danger: { + background: "{red.100}", + color: "{red.700}" + }, + contrast: { + background: "{surface.950}", + color: "{surface.0}" + } + }, + dark: { + primary: { + background: "color-mix(in srgb, {primary.500}, transparent 84%)", + color: "{primary.300}" + }, + secondary: { + background: "{surface.800}", + color: "{surface.300}" + }, + success: { + background: "color-mix(in srgb, {green.500}, transparent 84%)", + color: "{green.300}" + }, + info: { + background: "color-mix(in srgb, {sky.500}, transparent 84%)", + color: "{sky.300}" + }, + warn: { + background: "color-mix(in srgb, {orange.500}, transparent 84%)", + color: "{orange.300}" + }, + danger: { + background: "color-mix(in srgb, {red.500}, transparent 84%)", + color: "{red.300}" + }, + contrast: { + background: "{surface.0}", + color: "{surface.950}" + } + } + } + }, + terminal: { + root: { + background: "{form.field.background}", + borderColor: "{form.field.border.color}", + color: "{form.field.color}", + height: "18rem", + padding: "{form.field.padding.y} {form.field.padding.x}", + borderRadius: "{form.field.border.radius}" + }, + prompt: { + gap: "0.25rem" + }, + commandResponse: { + margin: "2px 0" + } + }, + timeline: { + event: { + minHeight: "5rem" + }, + horizontal: { + eventContent: { + padding: "1rem 0" + } + }, + vertical: { + eventContent: { + padding: "0 1rem" + } + }, + eventMarker: { + size: "1.125rem", + borderRadius: "50%", + borderWidth: "2px", + background: "{content.background}", + borderColor: "{content.border.color}", + content: { + borderRadius: "50%", + size: "0.375rem", + background: "{primary.color}", + insetShadow: "0px 0.5px 0px 0px rgba(0, 0, 0, 0.06), 0px 1px 1px 0px rgba(0, 0, 0, 0.12)" + } + }, + eventConnector: { + color: "{content.border.color}", + size: "2px" + } + }, + togglebutton: { + root: { + padding: "0.5rem 1rem", + borderRadius: "{content.border.radius}", + gap: "0.5rem", + fontWeight: "500", + disabledBackground: "{form.field.disabled.background}", + disabledBorderColor: "{form.field.disabled.background}", + disabledColor: "{form.field.disabled.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}", + sm: { + fontSize: "{form.field.sm.font.size}", + padding: "0.375rem 0.75rem" + }, + lg: { + fontSize: "{form.field.lg.font.size}", + padding: "0.625rem 1.25rem" + } + }, + icon: { + disabledColor: "{form.field.disabled.color}" + }, + content: { + + + checkedShadow: "0px 1px 2px 0px rgba(0, 0, 0, 0.02), 0px 1px 2px 0px rgba(0, 0, 0, 0.04)" + }, + colorScheme: { + light: { + root: { + background: "{surface.100}", + checkedBackground: "{surface.100}", + hoverBackground: "{surface.100}", + borderColor: "{surface.100}", + color: "{surface.500}", + hoverColor: "{surface.700}", + checkedColor: "{surface.900}", + checkedBorderColor: "{surface.100}" + }, + content: { + checkedBackground: "{surface.0}" + }, + icon: { + color: "{surface.500}", + hoverColor: "{surface.700}", + checkedColor: "{surface.900}" + } + }, + dark: { + root: { + background: "{surface.950}", + checkedBackground: "{surface.950}", + hoverBackground: "{surface.950}", + borderColor: "{surface.950}", + color: "{surface.400}", + hoverColor: "{surface.300}", + checkedColor: "{surface.0}", + checkedBorderColor: "{surface.950}" + }, + content: { + checkedBackground: "{surface.800}" + }, + icon: { + color: "{surface.400}", + hoverColor: "{surface.300}", + checkedColor: "{surface.0}" + } + } + } + }, + toggleswitch: { + root: { + width: "2.5rem", + height: "1.5rem", + borderRadius: "30px", + gap: "0.25rem", + shadow: "{form.field.shadow}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + }, + borderWidth: "1px", + borderColor: "transparent", + hoverBorderColor: "transparent", + checkedBorderColor: "transparent", + checkedHoverBorderColor: "transparent", + invalidBorderColor: "{form.field.invalid.border.color}", + transitionDuration: "{form.field.transition.duration}", + slideDuration: "0.2s" + }, + handle: { + borderRadius: "50%", + size: "1rem" + }, + colorScheme: { + light: { + root: { + background: "{surface.300}", + disabledBackground: "{form.field.disabled.background}", + hoverBackground: "{surface.400}", + checkedBackground: "{primary.color}", + checkedHoverBackground: "{primary.hover.color}" + }, + handle: { + background: "{surface.0}", + disabledBackground: "{form.field.disabled.color}", + hoverBackground: "{surface.0}", + checkedBackground: "{surface.0}", + checkedHoverBackground: "{surface.0}", + color: "{text.muted.color}", + hoverColor: "{text.color}", + checkedColor: "{primary.color}", + checkedHoverColor: "{primary.hover.color}" + } + }, + dark: { + root: { + background: "{surface.700}", + disabledBackground: "{surface.600}", + hoverBackground: "{surface.600}", + checkedBackground: "{primary.color}", + checkedHoverBackground: "{primary.hover.color}" + }, + handle: { + background: "{surface.400}", + disabledBackground: "{surface.900}", + hoverBackground: "{surface.300}", + checkedBackground: "{surface.900}", + checkedHoverBackground: "{surface.900}", + color: "{surface.900}", + hoverColor: "{surface.800}", + checkedColor: "{primary.color}", + checkedHoverColor: "{primary.hover.color}" + } + } + } + }, + tree: { + root: { + background: "{content.background}", + color: "{content.color}", + padding: "1rem", + gap: "2px", + indent: "1rem", + transitionDuration: "{transition.duration}" + }, + node: { + padding: "0.25rem 0.5rem", + borderRadius: "{content.border.radius}", + hoverBackground: "{content.hover.background}", + selectedBackground: "{highlight.background}", + color: "{text.color}", + hoverColor: "{text.hover.color}", + selectedColor: "{highlight.color}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "-1px", + shadow: "{focus.ring.shadow}" + }, + gap: "0.25rem" + }, + nodeIcon: { + color: "{text.muted.color}", + hoverColor: "{text.hover.muted.color}", + selectedColor: "{highlight.color}" + }, + nodeToggleButton: { + borderRadius: "50%", + size: "1.75rem", + hoverBackground: "{content.hover.background}", + selectedHoverBackground: "{content.background}", + color: "{text.muted.color}", + hoverColor: "{text.hover.muted.color}", + selectedHoverColor: "{primary.color}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + loadingIcon: { + size: "2rem" + }, + filter: { + margin: "0 0 0.5rem 0" + } + }, + treeselect: { + root: { + background: "{form.field.background}", + disabledBackground: "{form.field.disabled.background}", + filledBackground: "{form.field.filled.background}", + filledHoverBackground: "{form.field.filled.hover.background}", + filledFocusBackground: "{form.field.filled.focus.background}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.hover.border.color}", + focusBorderColor: "{form.field.focus.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + color: "{form.field.color}", + disabledColor: "{form.field.disabled.color}", + placeholderColor: "{form.field.placeholder.color}", + invalidPlaceholderColor: "{form.field.invalid.placeholder.color}", + shadow: "{form.field.shadow}", + paddingX: "{form.field.padding.x}", + paddingY: "{form.field.padding.y}", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{form.field.focus.ring.width}", + style: "{form.field.focus.ring.style}", + color: "{form.field.focus.ring.color}", + offset: "{form.field.focus.ring.offset}", + shadow: "{form.field.focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}", + sm: { + fontSize: "{form.field.sm.font.size}", + paddingX: "{form.field.sm.padding.x}", + paddingY: "{form.field.sm.padding.y}" + }, + lg: { + fontSize: "{form.field.lg.font.size}", + paddingX: "{form.field.lg.padding.x}", + paddingY: "{form.field.lg.padding.y}" + } + }, + dropdown: { + width: "2.5rem", + color: "{form.field.icon.color}" + }, + overlay: { + background: "{overlay.select.background}", + borderColor: "{overlay.select.border.color}", + borderRadius: "{overlay.select.border.radius}", + color: "{overlay.select.color}", + shadow: "{overlay.select.shadow}" + }, + tree: { + padding: "{list.padding}" + }, + clearIcon: { + color: "{form.field.icon.color}" + }, + emptyMessage: { + padding: "{list.option.padding}" + }, + chip: { + borderRadius: "{border.radius.sm}" + } + }, + treetable: { + root: { + transitionDuration: "{transition.duration}" + }, + header: { + background: "{content.background}", + borderColor: "{treetable.border.color}", + color: "{content.color}", + borderWidth: "0 0 1px 0", + padding: "0.75rem 1rem" + }, + headerCell: { + background: "{content.background}", + hoverBackground: "{content.hover.background}", + selectedBackground: "{highlight.background}", + borderColor: "{treetable.border.color}", + color: "{content.color}", + hoverColor: "{content.hover.color}", + selectedColor: "{highlight.color}", + gap: "0.5rem", + padding: "0.75rem 1rem", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "-1px", + shadow: "{focus.ring.shadow}" + } + }, + columnTitle: { + fontWeight: "600" + }, + row: { + background: "{content.background}", + hoverBackground: "{content.hover.background}", + selectedBackground: "{highlight.background}", + color: "{content.color}", + hoverColor: "{content.hover.color}", + selectedColor: "{highlight.color}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "-1px", + shadow: "{focus.ring.shadow}" + } + }, + bodyCell: { + borderColor: "{treetable.border.color}", + padding: "0.75rem 1rem", + gap: "0.5rem" + }, + footerCell: { + background: "{content.background}", + borderColor: "{treetable.border.color}", + color: "{content.color}", + padding: "0.75rem 1rem" + }, + columnFooter: { + fontWeight: "600" + }, + footer: { + background: "{content.background}", + borderColor: "{treetable.border.color}", + color: "{content.color}", + borderWidth: "0 0 1px 0", + padding: "0.75rem 1rem" + }, + + resizeIndicator: { + width: "1px", + color: "{primary.color}" + }, + sortIcon: { + color: "{text.muted.color}", + hoverColor: "{text.hover.muted.color}", + size: "0.875rem" + }, + loadingIcon: { + size: "2rem" + }, + nodeToggleButton: { + hoverBackground: "{content.hover.background}", + selectedHoverBackground: "{content.background}", + color: "{text.muted.color}", + hoverColor: "{text.color}", + selectedHoverColor: "{primary.color}", + size: "1.75rem", + borderRadius: "50%", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + paginatorTop: { + borderColor: "{content.border.color}", + borderWidth: "0 0 1px 0" + }, + paginatorBottom: { + borderColor: "{content.border.color}", + borderWidth: "0 0 1px 0" + }, + colorScheme: { + light: { + root: { + borderColor: "{content.border.color}" + }, + bodyCell: { + selectedBorderColor: "{primary.100}" + } + }, + dark: { + root: { + borderColor: "{surface.800}" + }, + bodyCell: { + selectedBorderColor: "{primary.900}" + } + } + } + }, + toast: { + root: { + width: "25rem", + borderRadius: "{content.border.radius}", + borderWidth: "1px", + transitionDuration: "{transition.duration}" + }, + icon: { + size: "1.125rem" + }, + content: { + padding: "{overlay.popover.padding}", + gap: "0.5rem" + }, + text: { + gap: "0.5rem" + }, + summary: { + fontWeight: "500", + fontSize: "1rem" + }, + detail: { + fontWeight: "500", + fontSize: "0.875rem" + }, + closeButton: { + width: "1.75rem", + height: "1.75rem", + borderRadius: "50%", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + offset: "{focus.ring.offset}" + } + }, + closeIcon: { + size: "1rem" + }, + colorScheme: { + light: { + + info: { + background: "color-mix(in srgb, {blue.50}, transparent 5%)", + borderColor: "{blue.200}", + color: "{blue.600}", + detailColor: "{surface.700}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {blue.500}, transparent 96%)", + closeButton: { + hoverBackground: "{blue.100}", + focusRing: { + color: "{blue.600}", + shadow: "none" + } + } + }, + success: { + background: "color-mix(in srgb, {green.50}, transparent 5%)", + borderColor: "{green.200}", + color: "{green.600}", + detailColor: "{surface.700}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {green.500}, transparent 96%)", + closeButton: { + hoverBackground: "{green.100}", + focusRing: { + color: "{green.600}", + shadow: "none" + } + } + }, + warn: { + background: "color-mix(in srgb,{yellow.50}, transparent 5%)", + borderColor: "{yellow.200}", + color: "{yellow.600}", + detailColor: "{surface.700}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {yellow.500}, transparent 96%)", + closeButton: { + hoverBackground: "{yellow.100}", + focusRing: { + color: "{yellow.600}", + shadow: "none" + } + } + }, + error: { + background: "color-mix(in srgb, {red.50}, transparent 5%)", + borderColor: "{red.200}", + color: "{red.600}", + detailColor: "{surface.700}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {red.500}, transparent 96%)", + closeButton: { + hoverBackground: "{red.100}", + focusRing: { + color: "{red.600}", + shadow: "none" + } + } + }, + secondary: { + background: "{surface.100}", + borderColor: "{surface.200}", + color: "{surface.600}", + detailColor: "{surface.700}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.500}, transparent 96%)", + closeButton: { + hoverBackground: "{surface.200}", + focusRing: { + color: "{surface.600}", + shadow: "none" + } + } + }, + contrast: { + background: "{surface.900}", + borderColor: "{surface.950}", + color: "{surface.50}", + detailColor: "{surface.0}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.950}, transparent 96%)", + closeButton: { + hoverBackground: "{surface.800}", + focusRing: { + color: "{surface.50}", + shadow: "none" + } + } + } + }, + dark: { + + info: { + background: "color-mix(in srgb, {blue.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {blue.700}, transparent 64%)", + color: "{blue.500}", + detailColor: "{surface.0}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {blue.500}, transparent 96%)", + closeButton: { + hoverBackground: "rgba(255, 255, 255, 0.05)", + focusRing: { + color: "{blue.500}", + shadow: "none" + } + } + }, + success: { + background: "color-mix(in srgb, {green.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {green.700}, transparent 64%)", + color: "{green.500}", + detailColor: "{surface.0}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {green.500}, transparent 96%)", + closeButton: { + hoverBackground: "rgba(255, 255, 255, 0.05)", + focusRing: { + color: "{green.500}", + shadow: "none" + } + } + }, + warn: { + background: "color-mix(in srgb, {yellow.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {yellow.700}, transparent 64%)", + color: "{yellow.500}", + detailColor: "{surface.0}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {yellow.500}, transparent 96%)", + closeButton: { + hoverBackground: "rgba(255, 255, 255, 0.05)", + focusRing: { + color: "{yellow.500}", + shadow: "none" + } + } + }, + error: { + background: "color-mix(in srgb, {red.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {red.700}, transparent 64%)", + color: "{red.500}", + detailColor: "{surface.0}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {red.500}, transparent 96%)", + closeButton: { + hoverBackground: "rgba(255, 255, 255, 0.05)", + focusRing: { + color: "{red.500}", + shadow: "none" + } + } + }, + secondary: { + background: "{surface.800}", + borderColor: "{surface.700}", + color: "{surface.300}", + detailColor: "{surface.0}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.500}, transparent 96%)", + closeButton: { + hoverBackground: "{surface.700}", + focusRing: { + color: "{surface.300}", + shadow: "none" + } + } + }, + contrast: { + background: "{surface.0}", + borderColor: "{surface.100}", + color: "{surface.950}", + detailColor: "{surface.950}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.950}, transparent 96%)", + closeButton: { + hoverBackground: "{surface.100}", + focusRing: { + color: "{surface.950}", + shadow: "none" + } + } + } + } + } + }, + toolbar: { + root: { + background: "{content.background}", + borderColor: "{content.border.color}", + borderRadius: "{content.border.radius}", + color: "{content.color}", + gap: "0.5rem", + padding: "0.75rem" + } + }, + virtualscroller: { + loader: { + mask: { + background: "{content.background}", + color: "{text.muted.color}" + }, + icon: { + size: "2rem" + } + } + }, + tooltip: { + root: { + maxWidth: "12.5rem", + gutter: "0.25rem", + shadow: "{overlay.popover.shadow}", + padding: "0.5rem 0.75rem", + borderRadius: "{overlay.popover.border.radius}" + }, + colorScheme: { + light: { + root: { + background: "{surface.700}", + color: "{surface.0}" + } + }, + dark: { + root: { + background: "{surface.700}", + color: "{surface.0}" + } + } + } + }, + ripple: { + colorScheme: { + light: { + root: { + background: "rgba(0,0,0,0.1)" + } + }, + dark: { + root: { + background: "rgba(255,255,255,0.3)" + } + } + } + } + } +}); + +export default MyPreset; +/* +export const appConfig: ApplicationConfig = { + providers: [ + provideAnimationsAsync(), + providePrimeNG({ + theme: { + preset: MyPreset, + } + }) + ] +}; +*/ + diff --git a/U22/src/app/nav-toolbar/nav-toolbar.component.css b/U22/src/app/nav-toolbar/nav-toolbar.component.css new file mode 100644 index 0000000..df66041 --- /dev/null +++ b/U22/src/app/nav-toolbar/nav-toolbar.component.css @@ -0,0 +1,38 @@ +a { + text-decoration: none; + color: white; +} + +a:hover, +a:active { + color: lightgray; +} + + +/* may be is not use anymore */ +li .glyphicon { + margin-right: 10px; +} + +.navigation-items { + list-style: none; + padding: 0; + margin: 0; +} + +/* Highlighting rules for nav menu items */ +li.link-active a, +li.link-active a:hover, +li.link-active a:focus { + background-color: #4189C7; + color: white; +} + +/* Keep the nav menu independent of scrolling and on top of other items */ +.main-nav { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 1; +} \ No newline at end of file diff --git a/U22/src/app/nav-toolbar/nav-toolbar.component.html b/U22/src/app/nav-toolbar/nav-toolbar.component.html new file mode 100644 index 0000000..72298b5 --- /dev/null +++ b/U22/src/app/nav-toolbar/nav-toolbar.component.html @@ -0,0 +1,24 @@ +
+ +
+ Parking Concession Validation Register +
+
+ +
+ {{currentUserName}} +
+ +
+
\ No newline at end of file diff --git a/U22/src/app/nav-toolbar/nav-toolbar.component.ts b/U22/src/app/nav-toolbar/nav-toolbar.component.ts new file mode 100644 index 0000000..5289c19 --- /dev/null +++ b/U22/src/app/nav-toolbar/nav-toolbar.component.ts @@ -0,0 +1,59 @@ +import { AuthenticationService } from '../user-services'; +import { Subscription } from 'rxjs' +import { Component, EventEmitter, Output, OnInit, OnDestroy, inject, signal } from '@angular/core'; +import { Router, RouterModule } from '@angular/router'; +import { Utils } from '../shares'; +import { AngleDown } from '@primeicons/angular/angle-down'; +import { SidebarModule } from 'primeng/sidebar'; + +@Component({ + selector: 'app-nav-toolbar', + imports: [RouterModule, AngleDown, SidebarModule], + templateUrl: './nav-toolbar.component.html', + styleUrls: ['./nav-toolbar.component.css'] +}) +export class NavToolarComponent implements OnInit, OnDestroy { + isExpanded = false; + isAuth = signal(false); + isAdmin = signal(false); + currentUserName = ""; + authSubscription: Subscription = new Subscription; + @Output() toggleEvent: EventEmitter = new EventEmitter(); + private authService = inject(AuthenticationService); + + constructor( + private router: Router) { } + + ngOnInit() { + const currentUser = this.authService.authChange(); + this.isAuth.set(false); + this.isAdmin.set(false); + if (currentUser.firstName != '') { + this.isAuth.set(Utils.getIsAuth()); + this.isAdmin.set(Utils.getIsAdmin()); + this.currentUserName = currentUser.firstName + ' ' + currentUser.lastName; + } + + } + + ngOnDestroy() { + if (this.authSubscription) { + this.authSubscription.unsubscribe(); + } + } + + onHome() { + this.router.navigate(['/concessionvalidation']); + } + onToggle() { + this.isExpanded = !this.isExpanded; + this.toggleEvent.emit(this.isExpanded); + } + onLogout() { + this.authService.logout(); + this.router.navigate(['/login']); + } + +} + + diff --git a/U22/src/app/route-guard/auth.guard.ts b/U22/src/app/route-guard/auth.guard.ts new file mode 100644 index 0000000..25c2f69 --- /dev/null +++ b/U22/src/app/route-guard/auth.guard.ts @@ -0,0 +1,42 @@ +import { Injectable } from '@angular/core'; +import { Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; +import { Utils } from '../shares'; +@Injectable({ providedIn: 'root' }) +export class AuthGuard { + msg = "[AuthGuard] "; + constructor(private router: Router) { } + + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { + const roleAllowed = route.data['roleAllowed']; + const user = Utils.getCurrentUser(); + const userRole = Utils.getUserRole(user); + let hasLoggedIn = Utils.getIsAuth(); + console.log(this.msg + " the userlogin ", user); + if (hasLoggedIn) { + + if (roleAllowed != undefined) { + console.log("[auth-guard] ther roleAllow ", roleAllowed); + if (roleAllowed.indexOf(userRole) != -1) { + return true; + } + else { + this.router.navigate(['/login']); + return false; + } + } + else //if no role define just return hasLoggedIn + { + return hasLoggedIn; + } + } + else { + this.router.navigate(['/login']); + return false; + } + + // not logged in so redirect to login page with the return url + this.router.navigate(['/login'], { queryParams: { returnUrl: state.url } }); + return false; + } + +} diff --git a/U22/src/app/route-guard/index.js b/U22/src/app/route-guard/index.js new file mode 100644 index 0000000..1cb7315 --- /dev/null +++ b/U22/src/app/route-guard/index.js @@ -0,0 +1,7 @@ +"use strict"; +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", { value: true }); +__export(require("./auth.guard")); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/U22/src/app/route-guard/index.ts b/U22/src/app/route-guard/index.ts new file mode 100644 index 0000000..b41e34a --- /dev/null +++ b/U22/src/app/route-guard/index.ts @@ -0,0 +1 @@ +export * from './auth.guard'; diff --git a/U22/src/app/shares/CommonUtilities.ts b/U22/src/app/shares/CommonUtilities.ts new file mode 100644 index 0000000..966161f --- /dev/null +++ b/U22/src/app/shares/CommonUtilities.ts @@ -0,0 +1,60 @@ +import { FormControl, FormGroup } from '@angular/forms'; + +declare global { + interface Navigator { + msSaveBlob?: (blob: any, defaultName?: string) => boolean + msSaveOrOpenBlob?: (blob: any, defaultName?: string) => boolean + } +} + +export class CommonUtilities { + /** Display the blob */ + static displayFileInNewTab(response: any, defaultFileName: string) { + const contentType = response.headers.get('content-type'); + const blob = new Blob([response.body], { type: contentType }); + const fileName = this.getFileName(response, defaultFileName); + if (window.navigator.msSaveOrOpenBlob) { + window.navigator.msSaveOrOpenBlob(blob, fileName); + } else { + const data = window.URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = data; + link.target = '_blank'; + link.click(); + } + } + /*** Download the blob ***/ + static downloadFile(response: any, defaultFileName: string) { + const contentType = response.headers.get('content-type'); + + const blob = new Blob([response.body], { type: contentType }); + const fileName = this.getFileName(response, defaultFileName); + + if (typeof window.navigator.msSaveBlob === 'function') { + console.log("download the report saveblob"); + window.navigator.msSaveBlob(blob, fileName); + console.log("download the report saveblob done"); + } + else { + const link = document.createElement('a'); + link.href = window.URL.createObjectURL(blob); + console.log("no msSaveBlob download the report saveblob done"); + //link.download? = fileName; + link.download = fileName; + link.click(); + } + } + /** Get the attachment file name */ + static getFileName(response: any, defaultFileName: string) { + const contentDis = response.headers.get('content-disposition'); + let fileName = defaultFileName; + if (contentDis && contentDis.indexOf('attachment') !== -1) { + const filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/; + const matches = filenameRegex.exec(contentDis); + if (matches != null && matches[1]) { + fileName = matches[1].replace(/['"]/g, ''); + } + } + return fileName; + } +} \ No newline at end of file diff --git a/U22/src/app/shares/appsetting.ts b/U22/src/app/shares/appsetting.ts new file mode 100644 index 0000000..0deee83 --- /dev/null +++ b/U22/src/app/shares/appsetting.ts @@ -0,0 +1,65 @@ +import { inject, Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { firstValueFrom } from 'rxjs'; +export function initializeApp() { + return (): Promise => { + return inject(AppSettingService).loadAppSetting(); + } + // return () => inject(AppSettingService).loadAppSetting(); +}; + +@Injectable({ providedIn: 'root' }) +export class AppSettingService { + private _appsetting: any; + constructor(private http: HttpClient + ) { } + + public loadAppSetting(): Promise { + const source$ = this.http.get("config/appsetting.json") + const rs$ = firstValueFrom(source$) + .then(x => { + this._appsetting = x; + console.log("[AppSettingService] assign", x); + return x; + }); + return rs$; + } + set appSeting(value: any) { + this._appsetting = value; + } + get appSetting(): any { + return this._appsetting; + } + +} +/* module put this +to use it +in app.module.ts +add +1) + providers: [ + { provide : APP_INITIALIZER, multi : true, deps : [AppSettingService], + useFactory: initializeApp + }, + ] + +2) +other this one work too. +providers: [ +{ + provide : APP_INITIALIZER, + multi : true, + deps : [AppSettingService], + useFactory : (appConfigService : AppSettingService) => () => appConfigService.loadAppSetting() +} +] + +to use it calling something like this +export class TestComponent { + public test1ServiceUrl: string; + + constructor(public configService: AppConfigService) { + this.test1ServiceUrl = this.configService.appSetting.test1ServiceUrl; + } +} +*/ \ No newline at end of file diff --git a/U22/src/app/shares/error.interceptor.ts b/U22/src/app/shares/error.interceptor.ts new file mode 100644 index 0000000..5379593 --- /dev/null +++ b/U22/src/app/shares/error.interceptor.ts @@ -0,0 +1,97 @@ +import { Injectable, inject } from '@angular/core'; +import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpInterceptorFn, HttpHandlerFn } from '@angular/common/http'; +import { Observable, throwError } from 'rxjs'; +import { catchError } from 'rxjs/operators'; + +import { AuthenticationService } from '../user-services'; +//import { ToastrService } from 'ngx-toastr'; +import { NavigationExtras, Router } from '@angular/router'; +/* +@Injectable() +export class ErrorInterceptor implements HttpInterceptor { + //private authenticationService: AuthenticationService; + constructor( + private router: Router, + // private toastr: ToastrService, + ) { } + + intercept(request: HttpRequest, next: HttpHandler): Observable> { + // console.log("I am intercept to catch error status = 401...", request); + return next.handle(request).pipe(catchError(err => { + /* no use yet + if (err) { + switch(err.status) { + case 400: + if (err.error.errors) { + const modalStateErrors = []; + for (const key in err.error.errors) { + if (err.error.errors[key]) { + modalStateErrors.push(err.error.errors[key]); + } + } + throw modalStateErrors; + } else { + this.toastr.error(err.statusText, err.status); + } + break; + case 401: + this.toastr.error(err.statusText, err.status); + break; + case 404: + this.router.navigateByUrl('/not-found'); + break; + case 500: + const navigationExtras: NavigationExtras = {state:{error:err.error}}; + this.router.navigateByUrl('/server-error', navigationExtras); + break; + default: + this.toastr.error('Something unexpected went wrong'); + console.log("this error interceptor",err); + break; + } + } + */ +/* + if (err.status === 401) { + // auto logout if 401 response returned from api Unauthorized + // this.authenticationService.logout(); + //location.reload(); + const error = err.error.message || err.statusText; + console.log("After I Get Error status = 401...", error, err); + return throwError(error); + } + else { + console.log("I Get Error .", err); + return throwError(err); + } + })) +} +} + +*/ +//new one +//https://blog.ninja-squad.com/2022/11/09/angular-http-in-standalone-applications/ +//////////////// +export const ErrorInterceptor: HttpInterceptorFn = (req: HttpRequest, next: HttpHandlerFn): Observable> => { + const authenticationService = inject(AuthenticationService); + + // logger.log(`Request is on its way to ${req.url}`); + return next(req).pipe(catchError(err => { + if (err.status === 401) { + // auto logout if 401 response returned from api Unauthorized + // this.authenticationService.logout(); + //location.reload(); + const error = err.error.message || err.statusText; + // console.log("After I Get Error status = 401...", error, err); + return throwError(() => error); + } + else { + console.log("I Get Error .", err); + return throwError(() => err); + } + + })); +} + +//////////////// + diff --git a/U22/src/app/shares/httpfile.service.ts b/U22/src/app/shares/httpfile.service.ts new file mode 100644 index 0000000..aa32074 --- /dev/null +++ b/U22/src/app/shares/httpfile.service.ts @@ -0,0 +1,115 @@ +import { HttpClient, HttpErrorResponse, HttpParams } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Router } from '@angular/router'; +import { Observable, throwError } from 'rxjs'; +import { catchError } from 'rxjs/operators'; +import { ConfigureUrl } from '../models'; +import { AppSettingService } from './appsetting'; + + +@Injectable({ + providedIn: 'root' +}) +export class HttpUtility { + private baseApiUrl: string = ""; + constructor(private http: HttpClient, + private appSetting :AppSettingService, + private router: Router) { + } + /** + * getFile + * @param url + */ + public getFileAsText(url: string): Observable { + return this.http + .get(this.getApiUrl(url), { responseType: 'blob' as 'text' }) + .pipe(catchError(e => this.handleError(e))); + } + /** + * getFile + * @param url + */ + public getFile(url: string): Observable { + return this.http + .get(this.getApiUrl(url), { responseType: 'blob' as 'json' }) + .pipe(catchError(e => this.handleError(e))); + } + + /** + * handleError + * @param response + */ + private handleError(errorResponse: HttpErrorResponse) { + // in a real world app, we may send the server to some remote logging infrastructure + // instead of just logging it to the console + return throwError(errorResponse); + } + //get excel file zip file etc .. + /* + allowedToDisplay = [ + this.mimeConstant.png, + this.mimeConstant.jpeg, + this.mimeConstant.jpg, + this.mimeConstant.gif, + this.mimeConstant.txt, + this.mimeConstant.pdf + ]; + */ + /* how to use it + this.http.getFileResponse(`Person/GetPhoto?recordId=${personId}`).pipe( + catchError(err => { + this.snackBar.error(err || this.constants.error_Getting_photo); + return EMPTY; + }), + finalize(() => { + this.spinner.hide(); + })).subscribe(response => { + if (response) { + if (isDownload) { + CommonUtilities.downloadFile(response); + } else { + if (response.body && response.body.type) { + if (this.allowedToDisplay.includes(response.body.type)) { + CommonUtilities.displayFileInNewTab(response); + } else { + this.temporaryFile = response; + this.downloadWarning = true; + } + } + } + } + }); + */ + public getFileResponse(url: string, data?: any): Observable { + if (data) { + return this.http.post(this.getApiUrl(url), + data, + { responseType: 'blob', observe: 'response' }) + .pipe(catchError(e => this.handleError(e))); + + } + return this.http + .get(this.getApiUrl(url), { responseType: 'blob', observe: 'response' }) + .pipe(catchError(e => this.handleError(e))); + } + + public getFileAsPDF(url: string, data: any): Observable { + let updateURL; + if (data) { + updateURL = url + data; + } else { + updateURL = url; + } + return this.http + .get(this.getApiUrl(updateURL), { responseType: 'blob' as 'text', observe: 'response' }) + .pipe(catchError(e => this.handleError(e))); + } + /** + * getApiUrl + * @param url + */ + private getApiUrl(url:string) { + const baseUrl = this.appSetting.appSetting.baseUrl; + return baseUrl + "/"+ url; + } +} \ No newline at end of file diff --git a/U22/src/app/shares/index.ts b/U22/src/app/shares/index.ts new file mode 100644 index 0000000..22a9b8c --- /dev/null +++ b/U22/src/app/shares/index.ts @@ -0,0 +1,8 @@ +export * from './lookup.service'; +export * from './utils'; +export * from './httpfile.service'; +export * from './CommonUtilities'; +export * from './error.interceptor'; +export * from './jwt.interceptor'; +export { initializeApp, AppSettingService } from './appsetting'; + diff --git a/U22/src/app/shares/jwt.interceptor.ts b/U22/src/app/shares/jwt.interceptor.ts new file mode 100644 index 0000000..13e466b --- /dev/null +++ b/U22/src/app/shares/jwt.interceptor.ts @@ -0,0 +1,50 @@ +import { Injectable } from '@angular/core'; +import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpInterceptorFn, HttpHandlerFn } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { Utils } from './utils'; +/* +@Injectable() +export class JwtInterceptor implements HttpInterceptor { + intercept(request: HttpRequest, next: HttpHandler): Observable> { + // add authorization header with jwt token if available + const currentUser = Utils.getCurrentUser();//localStorage.getItem('currentUser')!; + console.log('I am interceptor debug for currentUser obj', currentUser); + if (currentUser && currentUser.token) { + //console.log('I am interceptor add authorization header with jwt token'); + request = request.clone({ + setHeaders: { + Authorization: `Bearer ${currentUser.token}` + } + }); + } + return next.handle(request); + } +} + +/* +new one +//////////////// +*/ +export const JwtInterceptor: HttpInterceptorFn = (request: HttpRequest, next: HttpHandlerFn): Observable> => { + //const logger = inject(Logger); + //logger.log(`Request is on its way to ${req.url}`); + let data: any = { + withCredentials: true + } + const currentUser = Utils.getCurrentUser();//localStorage.getItem('currentUser')!; + // console.log('I am interceptor debug for currentUser obj', currentUser); + if (currentUser && currentUser.token && currentUser.token != "") { + // console.log('I am interceptor add authorization header with jwt token'); + + data.setHeaders = { + Authorization: `Bearer ${currentUser.token}` + }; + } + request = request.clone(data); + return next(request); +} + +//////////////// +/* +providers: [provideHttpClient(withInterceptors([loggerInterceptor]))] +*/ \ No newline at end of file diff --git a/U22/src/app/shares/lookup.service.ts b/U22/src/app/shares/lookup.service.ts new file mode 100644 index 0000000..fbb5ee0 --- /dev/null +++ b/U22/src/app/shares/lookup.service.ts @@ -0,0 +1,25 @@ + +import { Injectable, Inject } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { ConfigureUrl,Lookup,ResultModel } from '../models'; +import { AppSettingService } from '../shares'; +@Injectable({ providedIn: 'root' }) +export class LookupService { + + constructor(private http: HttpClient, + private appSetting :AppSettingService + ) {} + + loadConcessionType(): Observable> { + + const url = this.appSetting.appSetting.baseUrl +"/"+ConfigureUrl.luConcessionTypeUrl; + return this.http.get>(url); + } + + loadValidationPoint(): Observable> { + const url = this.appSetting.appSetting.baseUrl +"/"+ConfigureUrl.luValidationPointUrl; + return this.http.get>(url); + } + +} diff --git a/U22/src/app/shares/utils.ts b/U22/src/app/shares/utils.ts new file mode 100644 index 0000000..ba507ce --- /dev/null +++ b/U22/src/app/shares/utils.ts @@ -0,0 +1,66 @@ +import { User, userRole } from "../models" + +export class Utils { + static getCurrentUser(): User { + + let myUser = new User(); + myUser.username = ""; + const obj = sessionStorage.getItem('currentUser'); + //const obj = localStorage.getItem('currentUser'); + if (obj != undefined) { + let user = JSON.parse(obj); + myUser.firstName = user.firstName; + myUser.lastName = user.lastName; + myUser.role = user.role; + myUser.username = user.username; + myUser.email = user.email; + myUser.token = user.token; + myUser.validationPointId = user.validationPointId; + } + // console.log("[util] getcurrentUser",myUser); + return myUser; + } + static setLocalStore(user: User): void { + if (user && user.token) { + // store user details and jwt token in local storage to keep user logged in between page refreshes + // localStorage.setItem('currentUser', JSON.stringify(user)); + sessionStorage.setItem('currentUser', JSON.stringify(user)); + } + } + + static getUserRole(user: User): string { + let ret: string; + if (user.role == userRole.Normal) + ret = "Normal"; + else (user.role == userRole.Admin) + ret = "Admin"; + return ret; + } + static getIsAuth(): boolean { + const user = this.getCurrentUser(); + if (user.username != "") { + return true; + } + else + return false; + } + + static getIsAdmin(): boolean { + const user = this.getCurrentUser(); + let result = false; + // console.log("[util] get isAdmin", user); + if (user.username != "") { + // console.log("[util] get isAdmin username is not null", user); + if (user.role == userRole.Admin) + // console.log("[util] this user is admin", user); + result = user.role == userRole.Admin; + } + else + result = false; + return result; + } + static clearCurrentUser(): void { + sessionStorage.clear(); + //localStorage.clear(); + } +} \ No newline at end of file diff --git a/U22/src/app/user-services/authentication.service.ts b/U22/src/app/user-services/authentication.service.ts new file mode 100644 index 0000000..f0f0776 --- /dev/null +++ b/U22/src/app/user-services/authentication.service.ts @@ -0,0 +1,72 @@ +import { Injectable, Inject, Output, signal } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { map } from 'rxjs/operators'; +import { BehaviorSubject, Observable } from 'rxjs'; +import { ConfigureUrl, User } from '../models'; +import { Utils, AppSettingService } from '../shares'; + +@Injectable({ providedIn: 'root' }) +export class AuthenticationService { + + currentUser: string = ''; + public authChange = signal(new User()); + baseUrl = ''; // this.appSettingService.appSetting.baseUrl + "/"+ ConfigureUrl.loginApiUrl; + constructor(private http: HttpClient, + private appSetting: AppSettingService + ) { + // this default when load look for previous login information + // if no need then comment out downthere + + const fname = this.getCurrentUser(); + if (fname) { + + this.authChange.set(fname); + } + + } + + login(username: string, password: string): Observable { + + const url = this.appSetting.appSetting.baseUrl + "/" + ConfigureUrl.loginApiUrl; + + return this.http.post(url, { username, password }) + .pipe(map(resultModel => { + // login successful if there's a jwt token in the response + if (resultModel.statusCode == 1) { + const user = resultModel.data; + console.log("login result ", user); + Utils.setLocalStore(user); + this.currentUser = user.firstName + " " + user.lastName; + this.authChange.set(user); + + } + return resultModel.statusCode; + })); + } + + getCurrentUser(): User { + let userObj = new User(); + let user = sessionStorage.getItem('currentUser'); + if (user) { + userObj = JSON.parse(user); + + // logged in so return true + } + return userObj; + } + + isAuth(): boolean { + let val: boolean; + val = false; + if (sessionStorage.getItem('currentUser')) { + // logged in so return true + val = true; + } + return val; + } + logout() { + // remove user from local storage to log user out + sessionStorage.removeItem('currentUser'); + this.authChange.set(new User()); + } +} diff --git a/U22/src/app/user-services/index.js b/U22/src/app/user-services/index.js new file mode 100644 index 0000000..e477703 --- /dev/null +++ b/U22/src/app/user-services/index.js @@ -0,0 +1,8 @@ +"use strict"; +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", { value: true }); +__export(require("./authentication.service")); +__export(require("./user.service")); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/U22/src/app/user-services/index.js.map b/U22/src/app/user-services/index.js.map new file mode 100644 index 0000000..dd6e67c --- /dev/null +++ b/U22/src/app/user-services/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;AAAA,8CAAyC;AACzC,oCAA+B"} \ No newline at end of file diff --git a/U22/src/app/user-services/index.ts b/U22/src/app/user-services/index.ts new file mode 100644 index 0000000..ac74d32 --- /dev/null +++ b/U22/src/app/user-services/index.ts @@ -0,0 +1,2 @@ +export * from './authentication.service'; +export * from './user.service'; diff --git a/U22/src/app/user-services/user.service.ts b/U22/src/app/user-services/user.service.ts new file mode 100644 index 0000000..c92b379 --- /dev/null +++ b/U22/src/app/user-services/user.service.ts @@ -0,0 +1,19 @@ +import { Injectable, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; + +import { User,ConfigureUrl } from '../models'; + +@Injectable({ providedIn: 'root' }) +export class UserService { + + constructor(private http: HttpClient, + + ) { + + } + + // getAll() { + // return this.http.get(`${config.apiUrl}/users`); + // return this.http.get(`${ConfigureUrl.baseUrl}/${ConfigureUrl.getAllUrl}`); + // } +} diff --git a/U22/src/app/validationPoint/index.ts b/U22/src/app/validationPoint/index.ts new file mode 100644 index 0000000..bbec327 --- /dev/null +++ b/U22/src/app/validationPoint/index.ts @@ -0,0 +1,4 @@ +export * from './validationpoint.component'; +export * from './validationpoint.edit.component'; +export * from './validationpoint.service'; + diff --git a/U22/src/app/validationPoint/validationpoint.component.css b/U22/src/app/validationPoint/validationpoint.component.css new file mode 100644 index 0000000..3db3368 --- /dev/null +++ b/U22/src/app/validationPoint/validationpoint.component.css @@ -0,0 +1,12 @@ +table { + width: 100%; +} + +.mat-form-field { + font-size: 14px; + width: 100%; +} +td.mat-column-edit, .mat-column-delete { + width: 35px; + padding-right: 2px; +} diff --git a/U22/src/app/validationPoint/validationpoint.component.html b/U22/src/app/validationPoint/validationpoint.component.html new file mode 100644 index 0000000..3779479 --- /dev/null +++ b/U22/src/app/validationPoint/validationpoint.component.html @@ -0,0 +1,46 @@ +
+

Validation Point

+ + + + + + + + + + Description + Display + Active + Edit + + + + + {{ item.description }} + {{item.display}} + + @if(item.active == true) { + + } + @else { + + } + + + + + + + + +
\ No newline at end of file diff --git a/U22/src/app/validationPoint/validationpoint.component.ts b/U22/src/app/validationPoint/validationpoint.component.ts new file mode 100644 index 0000000..d59aaa3 --- /dev/null +++ b/U22/src/app/validationPoint/validationpoint.component.ts @@ -0,0 +1,95 @@ +import { Component, Inject, OnInit, ViewChild, AfterViewInit, OnDestroy, signal } from '@angular/core'; +import { ValidationPointService } from './validationpoint.service'; +import { ValidationPoint } from '../models'; +import { MessageService } from 'primeng/api'; +import { ButtonModule } from 'primeng/button'; +import { Pencil } from '@primeicons/angular/pencil'; +import { TableModule } from 'primeng/table'; +import { Check } from '@primeicons/angular/check'; +import { Times } from '@primeicons/angular/times'; + + +import { take } from 'rxjs/operators'; +import { Router, RouterModule } from '@angular/router'; +import { Subscription } from 'rxjs'; + +@Component({ + selector: 'validationpoint-list', + templateUrl: './validationpoint.component.html', + imports: [ButtonModule, TableModule, Times, Check, Pencil, RouterModule], + styleUrls: ['./validationpoint.component.css'] +}) +export class ValidationPointComponent implements OnInit, OnDestroy { + dataSource = signal([]); + private subscription: Subscription = new Subscription(); + displayedColumns: string[] = ['description', 'active', 'edit']; + msg = "[validationpoint.com]"; + + /* + private store: Store + */ + constructor( + private validationPointService: ValidationPointService, + private messageService: MessageService, + private router: Router + ) { + + } + + //KeyboardEvent + applyFilter(event: Event) { + const filterValue = (event.target as HTMLInputElement).value; + // this.dataSource.filter = filterValue.trim().toLowerCase(); + } + + ngOnInit(): void { + this.subscription.add( + this.validationPointService.loadValidationpoints().subscribe( + { + next: result => { + // console.log(this.msg + "onInit", result); + this.dataSource.set(result.data); + }, error: e => { + + console.log("error ", e); + } + } + ) + ); + + /* + this.store.dispatch(validationActions.LoadValidationpoints()); + this.store.pipe(select(validationSelector.getAllValidations)).subscribe(result => this.dataSource.data = result); + */ + } + + + showEdit(item: ValidationPoint) { + // console.log(this.msg + "on row click", item); + this.router.navigate(['/validationpoint/' + item.id], { queryParams: { returnUrl: '/validationpoint' } }); + } + deleteItem(id: number): void { + this.validationPointService.deleteValidationpoint(id) + .pipe(take(1)) + .subscribe(result => { + console.log(this.msg + " deleteItem success", result); + let data = this.dataSource(); + let index: number = data.findIndex(d => d.id === id); + // console.log(this.msg + "delete from datasource"); + data.splice(index, 1) + this.dataSource.set(data); + }, + error => { + const message = error || error.message; + + } + ); + } + + ngOnDestroy() { + this.subscription.unsubscribe(); + } +} + + + diff --git a/U22/src/app/validationPoint/validationpoint.edit.component.css b/U22/src/app/validationPoint/validationpoint.edit.component.css new file mode 100644 index 0000000..3db3368 --- /dev/null +++ b/U22/src/app/validationPoint/validationpoint.edit.component.css @@ -0,0 +1,12 @@ +table { + width: 100%; +} + +.mat-form-field { + font-size: 14px; + width: 100%; +} +td.mat-column-edit, .mat-column-delete { + width: 35px; + padding-right: 2px; +} diff --git a/U22/src/app/validationPoint/validationpoint.edit.component.html b/U22/src/app/validationPoint/validationpoint.edit.component.html new file mode 100644 index 0000000..afd91ae --- /dev/null +++ b/U22/src/app/validationPoint/validationpoint.edit.component.html @@ -0,0 +1,36 @@ +
+
+ {{getEditText()}} +
+
+
+ + +
+ + + + +
+
+ + + + +
+
+ + +
+ +
+
+ + +
+
+ +
\ No newline at end of file diff --git a/U22/src/app/validationPoint/validationpoint.edit.component.ts b/U22/src/app/validationPoint/validationpoint.edit.component.ts new file mode 100644 index 0000000..eae1e9e --- /dev/null +++ b/U22/src/app/validationPoint/validationpoint.edit.component.ts @@ -0,0 +1,125 @@ +import { Component, inject, OnDestroy, OnInit } from '@angular/core'; +import { Router, ActivatedRoute, Route } from '@angular/router'; +import { UntypedFormBuilder, FormGroup, Validators, ReactiveFormsModule, FormBuilder } from '@angular/forms'; +import { Subject, pipe, Subscription } from 'rxjs'; + +import { ValidationPoint } from '../models'; +import { ValidationPointService } from '.'; +import { MessageService } from 'primeng/api'; +import { ButtonModule } from 'primeng/button'; +import { CheckboxModule } from 'primeng/checkbox'; +import { InputTextModule } from 'primeng/inputtext'; + +@Component({ + templateUrl: 'validationpoint.edit.component.html', + selector: 'validationpoint-edit', + styleUrls: ['validationpoint.edit.component.css'], + imports: [ButtonModule, ReactiveFormsModule, CheckboxModule, InputTextModule] +}) +export class ValidationpointEditComponent implements OnInit, OnDestroy { + returnUrl = ''; + msg = "[ValidationPoint Edit]"; + _id: number = -1; + private subscription: Subscription = new Subscription(); + isChange = true; // disable use false//true for not disable. make sure it true is disable button. + subChanged$ = new Subject(); + private formBuilder = inject(FormBuilder); + private validationPointService = inject(ValidationPointService); + private messageService = inject(MessageService); + private route = inject(ActivatedRoute); + private router = inject(Router); + validationpointForm = this.formBuilder.group({ + id: [0], //Validators.required + description: ['', Validators.required], + display: [''], //Validators.required + active: [false], //Validators.required + }); + constructor() { } + ngOnInit(): void { + this.returnUrl = this.route.snapshot.queryParams['returnUrl'] || '/'; + const id = Number(this.route.snapshot.paramMap.get('id')); + // now load thing up + this._id = id; + //console.log(this.msg + " " + id ); + + this.subscription.add(this.validationpointForm.valueChanges.subscribe(x => this.isChange = false)); + this.subscription.add(this.subChanged$.subscribe(x => this.isChange = x)); + // console.log(this.msg + "ngOnInit load data id " + id ); + if (id > 0) { + this.subscription.add( + this.validationPointService.loadValidationpointById(id).subscribe(x => { + this.assignValue(x.data) + }, + error => { + + console.log("error ", error); + } + )); + } + } + + getEditText(): string { + if (this._id > 0) + return "Edit Validation Point"; + else + return "New Validation Point"; + } + + // this for disable submit button + get isFieldsChange() { + const chan = this.isChange || !this.validationpointForm.valid; // this disable so need true valid = true not + //console.log(this.msg + 'is fields change', chan); + return chan; + } + + assignValue(validationpoint: ValidationPoint): void { + this.validationpointForm.patchValue({ + id: validationpoint.id, + description: validationpoint.description, + display: validationpoint.display, + active: validationpoint.active, + }); + // disable use false//true for not disable. + this.subChanged$.next(true); + } + + // convenience getter for easy access in form fields + get f() { return this.validationpointForm.controls; } + + onSubmit(): void { + // if form valid then go save + //make sure + const okToSave = this.validationpointForm.valid; + if (okToSave) { + let validationpointValue = this.validationpointForm.value; + let validationpoint: ValidationPoint = { + id: validationpointValue.id ?? 0, + description: validationpointValue.description ?? '', + display: validationpointValue.display ?? '', + active: validationpointValue.active ?? false, + }; + + this.validationPointService.saveValidationpoint(validationpoint).subscribe( + { + next: x => { + if (x.statusCode >= 1) { + this.messageService.add({ severity: 'success', summary: 'Success', detail: "Save is OK" }); + this.router.navigate(['/home/validationpoint']); + } + }, + error: e => { + + console.log("error ", e); + } + } + ); + } + + } + goBack(): void { + this.router.navigate([this.returnUrl]); + } + ngOnDestroy() { + this.subscription.unsubscribe(); + } +} diff --git a/U22/src/app/validationPoint/validationpoint.service.ts b/U22/src/app/validationPoint/validationpoint.service.ts new file mode 100644 index 0000000..311104a --- /dev/null +++ b/U22/src/app/validationPoint/validationpoint.service.ts @@ -0,0 +1,44 @@ + +import { Injectable, Inject } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +import { ValidationPoint,ResultModel ,ConfigureUrl} from '../models'; +import { AppSettingService } from '../shares'; +@Injectable({ providedIn: 'root' }) +export class ValidationPointService { + + constructor( + private http: HttpClient, + private appSetting :AppSettingService + ) { } + loadValidationpoints(): Observable> { + let config = { headers : { 'Content-Type': 'application/json' } }; + //const url = this.appUrl.baseUrl + "/" + this.appUrl.validationPoint; + const baseUrl = this.appSetting.appSetting.baseUrl+ "/"+ ConfigureUrl.validationPoint; + console.log("[validation service] loadValidtionpoints url is: " + baseUrl ); + return this.http.get>(baseUrl); + } + loadValidationpointById(id:number): Observable> { + const baseUrl = this.appSetting.appSetting.baseUrl + "/"+ ConfigureUrl.validationPoint; + let params = new HttpParams().set("id", ""+id); + let headers = new HttpHeaders().set('Content-Type', 'application/json'); + let options = { + headers: headers, + params: params + }; + //const url = this.appUrl.baseUrl + "/" + this.appUrl.validationPoint; + return this.http.get>(baseUrl + "/"+ id); + } + saveValidationpoint(jsData:ValidationPoint): Observable> { //insert Validationpoint + let config = { headers : { 'Content-Type': 'application/json' } }; + const baseUrl = this.appSetting.appSetting.baseUrl + "/"+ ConfigureUrl.validationPoint; + return this.http.post>(baseUrl, jsData, config); + } + deleteValidationpoint(Id:number): Observable>{ + let config = { headers : { 'Content-Type': 'application/json' } }; + const baseUrl = this.appSetting.appSetting.baseUrl + "/"+ ConfigureUrl.validationPoint; + //const url = this.appUrl.baseUrl + "/" + this.appUrl.validationPoint; + return this.http.delete> (baseUrl + "/" + Id); + } +} diff --git a/U22/src/index.html b/U22/src/index.html new file mode 100644 index 0000000..28fa3db --- /dev/null +++ b/U22/src/index.html @@ -0,0 +1,13 @@ + + + + + Carparkvalidation + + + + + + + + diff --git a/U22/src/main.ts b/U22/src/main.ts new file mode 100644 index 0000000..5df75f9 --- /dev/null +++ b/U22/src/main.ts @@ -0,0 +1,6 @@ +import { bootstrapApplication } from '@angular/platform-browser'; +import { appConfig } from './app/app.config'; +import { App } from './app/app'; + +bootstrapApplication(App, appConfig) + .catch((err) => console.error(err)); diff --git a/U22/src/styles.css b/U22/src/styles.css new file mode 100644 index 0000000..8dc4ee5 --- /dev/null +++ b/U22/src/styles.css @@ -0,0 +1,12 @@ +/* You can add global styles to this file, and also import other style files */ + +@import 'tailwindcss'; + +.is-invalid { + color: red; +} +.app-require { + font-size: 18px; + font-weight: bold; + color: red; +} \ No newline at end of file diff --git a/U22/tsconfig.app.json b/U22/tsconfig.app.json new file mode 100644 index 0000000..cb151e1 --- /dev/null +++ b/U22/tsconfig.app.json @@ -0,0 +1,14 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "types": [] + }, + "include": [ + "src/**/*.ts" + ], + "exclude": [ + "src/**/*.spec.ts" + ] +} diff --git a/U22/tsconfig.json b/U22/tsconfig.json new file mode 100644 index 0000000..d2fbb9c --- /dev/null +++ b/U22/tsconfig.json @@ -0,0 +1,31 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "compileOnSave": false, + "compilerOptions": { + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "isolatedModules": true, + "experimentalDecorators": true, + "importHelpers": true, + "target": "ES2022", + "module": "preserve" + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true + }, + "files": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/U22/tsconfig.spec.json b/U22/tsconfig.spec.json new file mode 100644 index 0000000..9c8efb9 --- /dev/null +++ b/U22/tsconfig.spec.json @@ -0,0 +1,14 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "types": [ + "vitest/globals" + ] + }, + "include": [ + "src/**/*.d.ts", + "src/**/*.spec.ts" + ] +} diff --git a/UI/e2e/protractor.conf.js b/UI/e2e/protractor.conf.js deleted file mode 100644 index f238c0b..0000000 --- a/UI/e2e/protractor.conf.js +++ /dev/null @@ -1,36 +0,0 @@ -// @ts-check -// Protractor configuration file, see link for more information -// https://github.com/angular/protractor/blob/master/lib/config.ts - -const { SpecReporter, StacktraceOption } = require('jasmine-spec-reporter'); - -/** - * @type { import("protractor").Config } - */ -exports.config = { - allScriptsTimeout: 11000, - specs: [ - './src/**/*.e2e-spec.ts' - ], - capabilities: { - browserName: 'chrome' - }, - directConnect: true, - baseUrl: 'http://localhost:4200/', - framework: 'jasmine', - jasmineNodeOpts: { - showColors: true, - defaultTimeoutInterval: 30000, - print: function() {} - }, - onPrepare() { - require('ts-node').register({ - project: require('path').join(__dirname, './tsconfig.json') - }); - jasmine.getEnv().addReporter(new SpecReporter({ - spec: { - displayStacktrace: StacktraceOption.PRETTY - } - })); - } -}; \ No newline at end of file diff --git a/UI/e2e/src/app.e2e-spec.ts b/UI/e2e/src/app.e2e-spec.ts deleted file mode 100644 index dcd19ca..0000000 --- a/UI/e2e/src/app.e2e-spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { AppPage } from './app.po'; -import { browser, logging } from 'protractor'; - -describe('workspace-project App', () => { - let page: AppPage; - - beforeEach(() => { - page = new AppPage(); - }); - - it('should display welcome message', () => { - page.navigateTo(); - expect(page.getTitleText()).toEqual('CarParkValidation app is running!'); - }); - - afterEach(async () => { - // Assert that there are no errors emitted from the browser - const logs = await browser.manage().logs().get(logging.Type.BROWSER); - expect(logs).not.toContain(jasmine.objectContaining({ - level: logging.Level.SEVERE, - } as logging.Entry)); - }); -}); diff --git a/UI/e2e/src/app.po.ts b/UI/e2e/src/app.po.ts deleted file mode 100644 index b68475e..0000000 --- a/UI/e2e/src/app.po.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { browser, by, element } from 'protractor'; - -export class AppPage { - navigateTo(): Promise { - return browser.get(browser.baseUrl) as Promise; - } - - getTitleText(): Promise { - return element(by.css('app-root .content span')).getText() as Promise; - } -} diff --git a/UI/e2e/tsconfig.json b/UI/e2e/tsconfig.json deleted file mode 100644 index 426058e..0000000 --- a/UI/e2e/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "outDir": "../out-tsc/e2e", - "module": "commonjs", - "target": "es2018", - "types": [ - "jasmine", - "jasminewd2", - "node" - ] - } -}