commit 4c7998f349425b4e5e199bb1881322f39fb12382 Author: Flavio Bontà Date: Thu Nov 13 14:03:34 2025 +0100 first commit diff --git a/.angulardoc.json b/.angulardoc.json new file mode 100644 index 0000000..6a0ae59 --- /dev/null +++ b/.angulardoc.json @@ -0,0 +1,4 @@ +{ + "repoId": "bc5fa7a7-7313-4845-954c-7227b0073b63", + "lastSync": 0 +} \ No newline at end of file diff --git a/.commitlintrc.json b/.commitlintrc.json new file mode 100644 index 0000000..3dc9fdf --- /dev/null +++ b/.commitlintrc.json @@ -0,0 +1,20 @@ +{ + "extends": ["@commitlint/config-conventional"], + "rules": { + "type-enum": [ + 2, + "always", + [ + "ci", + "chore", + "docs", + "feat", + "fix", + "perf", + "refactor", + "revert", + "style" + ] + ] + } +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..f166060 --- /dev/null +++ b/.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/.gitignore b/.gitignore new file mode 100644 index 0000000..cc7b141 --- /dev/null +++ b/.gitignore @@ -0,0 +1,42 @@ +# 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 +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db diff --git a/.husky/.gitignore b/.husky/.gitignore new file mode 100644 index 0000000..31354ec --- /dev/null +++ b/.husky/.gitignore @@ -0,0 +1 @@ +_ diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100755 index 0000000..a78cc75 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1 @@ +npx commitlint --edit $1 diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 0000000..2312dc5 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +npx lint-staged diff --git a/.postcssrc.json b/.postcssrc.json new file mode 100644 index 0000000..e092dc7 --- /dev/null +++ b/.postcssrc.json @@ -0,0 +1,5 @@ +{ + "plugins": { + "@tailwindcss/postcss": {} + } +} diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..ec1ea75 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,5 @@ +{ + "singleQuote": true, + "trailingComma": "all", + "tabWidth": 2 +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..77b3745 --- /dev/null +++ b/.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/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..925af83 --- /dev/null +++ b/.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/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..6835e94 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "exportall.config.folderListener": ["/src/app/core/pipes"], + "[typescript]": { + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit" + } + } +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..a298b5b --- /dev/null +++ b/.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": "(.*?)" + }, + "endsPattern": { + "regexp": "bundle generation complete" + } + } + } + }, + { + "type": "npm", + "script": "test", + "isBackground": true, + "problemMatcher": { + "owner": "typescript", + "pattern": "$tsc", + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "(.*?)" + }, + "endsPattern": { + "regexp": "bundle generation complete" + } + } + } + } + ] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..6363be3 --- /dev/null +++ b/README.md @@ -0,0 +1,59 @@ +# BrowserStruttureMusa + +This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 19.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 [Karma](https://karma-runner.github.io) 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/angular.json b/angular.json new file mode 100644 index 0000000..15f9c87 --- /dev/null +++ b/angular.json @@ -0,0 +1,205 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "Browser-Strutture-Musa": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:application", + "options": { + "outputPath": "dist", + "index": "src/index.html", + "browser": "src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "src/favicon.ico", + "src/assets", + "src/.htaccess", + { + "glob": "**/*", + "input": "public" + } + ], + "styles": ["src/styles.scss"], + "scripts": ["./node_modules/prismjs/prism.js"], + "allowedCommonJsDependencies": [ + "lodash", + "dayjs", + "dayjs/*", + "file-saver" + ], + "stylePreprocessorOptions": { + "sass": { + "silenceDeprecations": [ + "mixed-decls", + "color-functions", + "global-builtin", + "import" + ] + } + } + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "3mb", + "maximumError": "5mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "6kB", + "maximumError": "10kB" + } + ], + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "optimization": true, + "outputHashing": "all" + }, + "musa-prod": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "3mb", + "maximumError": "5mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "6kB", + "maximumError": "10kB" + } + ], + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.musa.ts" + } + ], + "optimization": true, + "outputHashing": "all" + }, + "dev": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "3mb", + "maximumError": "5mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "6kb", + "maximumError": "10kb" + } + ], + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.dev.ts" + } + ], + "outputHashing": "all", + "optimization": false, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true, + "baseHref": "/" + }, + "musa-dev": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "3mb", + "maximumError": "5mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "6kb", + "maximumError": "10kb" + } + ], + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.dev.musa.ts" + } + ], + "outputHashing": "all", + "optimization": false, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true, + "baseHref": "/" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "Browser-Strutture-Musa:build:production" + }, + "musa-prod": { + "buildTarget": "Browser-Strutture-Musa:build:prod:musa" + }, + "dev": { + "buildTarget": "Browser-Strutture-Musa:build:dev" + }, + "musa-dev": { + "buildTarget": "Browser-Strutture-Musa:build:dev:musa" + }, + "development": { + "buildTarget": "Browser-Strutture-Musa:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "polyfills": ["zone.js", "zone.js/testing"], + "tsConfig": "tsconfig.spec.json", + "inlineStyleLanguage": "scss", + "assets": [ + { + "glob": "**/*", + "input": "public" + } + ], + "styles": ["src/styles.scss"], + "scripts": [] + } + } + } + } + }, + "cli": { + "analytics": false + } +} diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..8498aad --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,53 @@ +// @ts-check +import eslint from '@eslint/js'; +import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; + +export default tseslint.config( + { + ignores: ['eslint.config.mjs'], + }, + eslint.configs.recommended, + eslintPluginPrettierRecommended, + { + extends: [tseslint.configs.recommendedTypeChecked], + files: ['src/**/*.ts'], + languageOptions: { + globals: { + ...globals.node, + ...globals.jest, + }, + ecmaVersion: 5, + sourceType: 'module', + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname, + }, + }, + }, + { + files: ['src/**/*.ts'], + rules: { + indent: 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-floating-promises': 'warn', + '@typescript-eslint/no-unsafe-argument': 'warn', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/restrict-template-expressions': 'off', + '@typescript-eslint/no-unsafe-enum-comparison': 'off', + '@typescript-eslint/no-unused-vars': 'warn', + '@typescript-eslint/no-unsafe-return': 'warn', + '@typescript-eslint/no-redundant-type-constituents': 'warn', + '@typescript-eslint/no-unused-expressions': 'warn', + '@typescript-eslint/unbound-method': [ + 'error', + { + ignoreStatic: true, + }, + ], + }, + }, +); diff --git a/openapi-gen.json b/openapi-gen.json new file mode 100644 index 0000000..1d98e77 --- /dev/null +++ b/openapi-gen.json @@ -0,0 +1,6 @@ +{ + "$schema": "node_modules/ng-openapi-gen/ng-openapi-gen-schema.json", + "input": "http://localhost:3000/docs-json", + "output": "src/api", + "serviceSuffix": "ApiClient" +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..85ab77b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,18796 @@ +{ + "name": "browser-strutture-musa", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "browser-strutture-musa", + "version": "0.0.0", + "dependencies": { + "@angular/animations": "^19.1.0", + "@angular/common": "^19.1.0", + "@angular/compiler": "^19.1.0", + "@angular/core": "^19.1.0", + "@angular/forms": "^19.1.0", + "@angular/google-maps": "^19.2.19", + "@angular/platform-browser": "^19.1.0", + "@angular/platform-browser-dynamic": "^19.1.0", + "@angular/router": "^19.1.0", + "@fortawesome/angular-fontawesome": "^1.0.0", + "@fortawesome/free-brands-svg-icons": "^6.7.2", + "@fortawesome/free-regular-svg-icons": "^6.7.2", + "@fortawesome/free-solid-svg-icons": "^6.7.2", + "@googlemaps/markerclusterer": "^2.6.2", + "@ngneat/until-destroy": "^10.0.0", + "@primeng/themes": "^19.0.6", + "@rx-angular/cdk": "^19.1.0", + "@rx-angular/state": "^19.0.3", + "@rx-angular/template": "^19.2.1", + "@tailwindcss/postcss": "^4.0.6", + "dayjs": "^1.11.13", + "file-saver": "^2.0.5", + "iban": "^0.0.14", + "inputmask": "^5.0.9", + "lodash": "^4.17.21", + "ng-openapi-gen": "^0.52.0", + "postcss": "^8.5.2", + "primeflex": "^3.3.1", + "primeicons": "^7.0.0", + "primeng": "^19.1.4", + "prismjs": "^1.29.0", + "rxjs": "~7.8.0", + "tailwindcss": "^4.0.6", + "tailwindcss-primeui": "^0.4.0", + "tslib": "^2.3.0", + "tsx": "^4.19.3", + "type-fest": "^5.0.1", + "xlsx": "^0.18.5", + "zone.js": "~0.15.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^19.1.6", + "@angular/cli": "^19.1.6", + "@angular/compiler-cli": "^19.1.0", + "@commitlint/cli": "^19.7.1", + "@commitlint/config-conventional": "^19.7.1", + "@eslint/js": "^9.20.0", + "@types/file-saver": "^2.0.7", + "@types/google.maps": "^3.58.1", + "@types/googlemaps": "^3.43.3", + "@types/iban": "^0.0.35", + "@types/inputmask": "^5.0.7", + "@types/jasmine": "~5.1.0", + "@types/jest": "^29.5.14", + "@types/lodash": "^4.17.15", + "@types/node": "^22.13.1", + "autoprefixer": "^10.4.20", + "eslint": "^9.20.1", + "eslint-config-prettier": "^10.0.1", + "eslint-plugin-prettier": "^5.2.3", + "husky": "^9.1.7", + "jasmine-core": "~5.5.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "lint-staged": "^16.0.0", + "prettier": "3.5.1", + "typescript": "~5.7.2", + "typescript-eslint": "^8.24.1" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "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.1902.19", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1902.19.tgz", + "integrity": "sha512-iexYDIYpGAeAU7T60bGcfrGwtq1bxpZixYxWuHYiaD1b5baQgNSfd1isGEOh37GgDNsf4In9i2LOLPm0wBdtgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "19.2.19", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/architect/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "19.2.19", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-19.2.19.tgz", + "integrity": "sha512-uIxi6Vzss6+ycljVhkyPUPWa20w8qxJL9lEn0h6+sX/fhM8Djt0FHIuTQjoX58EoMaQ/1jrXaRaGimkbaFcG9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1902.19", + "@angular-devkit/build-webpack": "0.1902.19", + "@angular-devkit/core": "19.2.19", + "@angular/build": "19.2.19", + "@babel/core": "7.26.10", + "@babel/generator": "7.26.10", + "@babel/helper-annotate-as-pure": "7.25.9", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-transform-async-generator-functions": "7.26.8", + "@babel/plugin-transform-async-to-generator": "7.25.9", + "@babel/plugin-transform-runtime": "7.26.10", + "@babel/preset-env": "7.26.9", + "@babel/runtime": "7.26.10", + "@discoveryjs/json-ext": "0.6.3", + "@ngtools/webpack": "19.2.19", + "@vitejs/plugin-basic-ssl": "1.2.0", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.20", + "babel-loader": "9.2.1", + "browserslist": "^4.21.5", + "copy-webpack-plugin": "12.0.2", + "css-loader": "7.1.2", + "esbuild-wasm": "0.25.4", + "fast-glob": "3.3.3", + "http-proxy-middleware": "3.0.5", + "istanbul-lib-instrument": "6.0.3", + "jsonc-parser": "3.3.1", + "karma-source-map-support": "1.4.0", + "less": "4.2.2", + "less-loader": "12.2.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.3.1", + "mini-css-extract-plugin": "2.9.2", + "open": "10.1.0", + "ora": "5.4.1", + "picomatch": "4.0.2", + "piscina": "4.8.0", + "postcss": "8.5.2", + "postcss-loader": "8.1.1", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.85.0", + "sass-loader": "16.0.5", + "semver": "7.7.1", + "source-map-loader": "5.0.0", + "source-map-support": "0.5.21", + "terser": "5.39.0", + "tree-kill": "1.2.2", + "tslib": "2.8.1", + "webpack": "5.98.0", + "webpack-dev-middleware": "7.4.2", + "webpack-dev-server": "5.2.2", + "webpack-merge": "6.0.1", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.25.4" + }, + "peerDependencies": { + "@angular/compiler-cli": "^19.0.0 || ^19.2.0-next.0", + "@angular/localize": "^19.0.0 || ^19.2.0-next.0", + "@angular/platform-server": "^19.0.0 || ^19.2.0-next.0", + "@angular/service-worker": "^19.0.0 || ^19.2.0-next.0", + "@angular/ssr": "^19.2.19", + "@web/test-runner": "^0.20.0", + "browser-sync": "^3.0.2", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^19.0.0 || ^19.2.0-next.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "typescript": ">=5.5 <5.9" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@angular/ssr": { + "optional": true + }, + "@web/test-runner": { + "optional": true + }, + "browser-sync": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/postcss": { + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.2.tgz", + "integrity": "sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1902.19", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1902.19.tgz", + "integrity": "sha512-x2tlGg5CsUveFzuRuqeHknSbGirSAoRynEh+KqPRGK0G3WpMViW/M8SuVurecasegfIrDWtYZ4FnVxKqNbKwXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.1902.19", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^5.0.2" + } + }, + "node_modules/@angular-devkit/build-webpack/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "19.2.19", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.2.19.tgz", + "integrity": "sha512-JbLL+4IMLMBgjLZlnPG4lYDfz4zGrJ/s6Aoon321NJKuw1Kb1k5KpFu9dUY0BqLIe8xPQ2UJBpI+xXdK5MXMHQ==", + "license": "MIT", + "dependencies": { + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.2", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^4.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/core/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "19.2.19", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.2.19.tgz", + "integrity": "sha512-J4Jarr0SohdrHcb40gTL4wGPCQ952IMWF1G/MSAQfBAPvA9ZKApYhpxcY7PmehVePve+ujpus1dGsJ7dPxz8Kg==", + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "19.2.19", + "jsonc-parser": "3.3.1", + "magic-string": "0.30.17", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@angular/animations": { + "version": "19.2.15", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-19.2.15.tgz", + "integrity": "sha512-eq9vokLU8bjs7g/Znz8zJUQEOhT0MAJ/heBCHbB35S+CtZXJmItrsEqkI1tsRiR58NKXB6cbhBhULVo6qJbhXQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "19.2.15", + "@angular/core": "19.2.15" + } + }, + "node_modules/@angular/build": { + "version": "19.2.19", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-19.2.19.tgz", + "integrity": "sha512-SFzQ1bRkNFiOVu+aaz+9INmts7tDUrsHLEr9HmARXr9qk5UmR8prlw39p2u+Bvi6/lCiJ18TZMQQl9mGyr63lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1902.19", + "@babel/core": "7.26.10", + "@babel/helper-annotate-as-pure": "7.25.9", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-syntax-import-attributes": "7.26.0", + "@inquirer/confirm": "5.1.6", + "@vitejs/plugin-basic-ssl": "1.2.0", + "beasties": "0.3.2", + "browserslist": "^4.23.0", + "esbuild": "0.25.4", + "fast-glob": "3.3.3", + "https-proxy-agent": "7.0.6", + "istanbul-lib-instrument": "6.0.3", + "listr2": "8.2.5", + "magic-string": "0.30.17", + "mrmime": "2.0.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "4.0.2", + "piscina": "4.8.0", + "rollup": "4.34.8", + "sass": "1.85.0", + "semver": "7.7.1", + "source-map-support": "0.5.21", + "vite": "6.4.1", + "watchpack": "2.4.2" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "lmdb": "3.2.6" + }, + "peerDependencies": { + "@angular/compiler": "^19.0.0 || ^19.2.0-next.0", + "@angular/compiler-cli": "^19.0.0 || ^19.2.0-next.0", + "@angular/localize": "^19.0.0 || ^19.2.0-next.0", + "@angular/platform-server": "^19.0.0 || ^19.2.0-next.0", + "@angular/service-worker": "^19.0.0 || ^19.2.0-next.0", + "@angular/ssr": "^19.2.19", + "karma": "^6.4.0", + "less": "^4.2.0", + "ng-packagr": "^19.0.0 || ^19.2.0-next.0", + "postcss": "^8.4.0", + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "typescript": ">=5.5 <5.9" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@angular/ssr": { + "optional": true + }, + "karma": { + "optional": true + }, + "less": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular/cdk": { + "version": "19.2.19", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-19.2.19.tgz", + "integrity": "sha512-PCpJagurPBqciqcq4Z8+3OtKLb7rSl4w/qBJoIMua8CgnrjvA1i+SWawhdtfI1zlY8FSwhzLwXV0CmWWfFzQPg==", + "license": "MIT", + "peer": true, + "dependencies": { + "parse5": "^7.1.2", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^19.0.0 || ^20.0.0", + "@angular/core": "^19.0.0 || ^20.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/cli": { + "version": "19.2.19", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-19.2.19.tgz", + "integrity": "sha512-e9tAzFNOL4mMWfMnpC9Up83OCTOp2siIj8W41FCp8jfoEnw79AXDDLh3d70kOayiObchksTJVShslTogLUyhMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.1902.19", + "@angular-devkit/core": "19.2.19", + "@angular-devkit/schematics": "19.2.19", + "@inquirer/prompts": "7.3.2", + "@listr2/prompt-adapter-inquirer": "2.0.18", + "@schematics/angular": "19.2.19", + "@yarnpkg/lockfile": "1.1.0", + "ini": "5.0.0", + "jsonc-parser": "3.3.1", + "listr2": "8.2.5", + "npm-package-arg": "12.0.2", + "npm-pick-manifest": "10.0.0", + "pacote": "20.0.0", + "resolve": "1.22.10", + "semver": "7.7.1", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/common": { + "version": "19.2.15", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-19.2.15.tgz", + "integrity": "sha512-aVa/ctBYH/4qgA7r4sS7TV+/DzRYmcS+3d6l89pNKUXkI8gpmsd+r3FjccaemX4Wqru1QOrMvC+i+e7IBIVv0g==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/core": "19.2.15", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "19.2.15", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-19.2.15.tgz", + "integrity": "sha512-hMHZU6/03xG0tbPDIm1hbVSTFLnRkGYfh+xdBwUMnIFYYTS0QJ2hdPfEZKCJIXm+fz9IAI5MPdDTfeyp0sgaHQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + } + }, + "node_modules/@angular/compiler-cli": { + "version": "19.2.15", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-19.2.15.tgz", + "integrity": "sha512-4r5tvGA2Ok3o8wROZBkF9qNKS7L0AEpdBIkAVJbLw2rBY2SlyycFIRYyV2+D1lJ1jq/f9U7uN6oon0MjTvNYkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "7.26.9", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^4.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.2.0", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/compiler": "19.2.15", + "typescript": ">=5.5 <5.9" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", + "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.9", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.9", + "@babel/types": "^7.26.9", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular/compiler-cli/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/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@angular/core": { + "version": "19.2.15", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-19.2.15.tgz", + "integrity": "sha512-PxhzCwwm23N4Mq6oV7UPoYiJF4r6FzGhRSxOBBlEp322k7zEQbIxd/XO6F3eoG73qC1UsOXMYYv6GnQpx42y3A==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.15.0" + } + }, + "node_modules/@angular/forms": { + "version": "19.2.15", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-19.2.15.tgz", + "integrity": "sha512-pZDElcYPmNzPxvWJpZQCIizsNApDIfk9xLJE4I8hzLISfWGbQvfjuuarDAuQZEXudeLXoDOstDXkDja40muLGg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "19.2.15", + "@angular/core": "19.2.15", + "@angular/platform-browser": "19.2.15", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/google-maps": { + "version": "19.2.19", + "resolved": "https://registry.npmjs.org/@angular/google-maps/-/google-maps-19.2.19.tgz", + "integrity": "sha512-BScWHIVQ1PoROvzIcEM/URK+WdUx+F7uB/tQdiBi9IuYTIjKq305yJQlpNzm1LI8S0UohKAENC5ZDmobLPxU/A==", + "license": "MIT", + "dependencies": { + "@types/google.maps": "^3.54.10", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^19.0.0 || ^20.0.0", + "@angular/core": "^19.0.0 || ^20.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "19.2.15", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.2.15.tgz", + "integrity": "sha512-OelQ6weCjon8kZD8kcqNzwugvZJurjS3uMJCwsA2vXmP/3zJ31SWtNqE2zLT1R2csVuwnp0h+nRMgq+pINU7Rg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/animations": "19.2.15", + "@angular/common": "19.2.15", + "@angular/core": "19.2.15" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "19.2.15", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-19.2.15.tgz", + "integrity": "sha512-dKy0SS395FCh8cW9AQ8nf4Wn3XlONaH7z50T1bGxm3eOoRqjxJYyIeIlEbDdJakMz4QPR3dGr81HleZd8TJumQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "19.2.15", + "@angular/compiler": "19.2.15", + "@angular/core": "19.2.15", + "@angular/platform-browser": "19.2.15" + } + }, + "node_modules/@angular/router": { + "version": "19.2.15", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-19.2.15.tgz", + "integrity": "sha512-0TM1D8S7RQ00drKy7hA/ZLBY14dUBqFBgm06djcNcOjNzVAtgkeV0i+0Smq9tCC7UsGKdpZu4RgfYjHATBNlTQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "19.2.15", + "@angular/core": "19.2.15", + "@angular/platform-browser": "19.2.15", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.1.2.tgz", + "integrity": "sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==", + "license": "MIT", + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.6", + "call-me-maybe": "^1.0.1", + "js-yaml": "^4.1.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.10.tgz", + "integrity": "sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.10", + "@babel/types": "^7.26.10", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz", + "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.5", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", + "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.10" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", + "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", + "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", + "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", + "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.26.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz", + "integrity": "sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", + "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", + "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", + "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz", + "integrity": "sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", + "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz", + "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", + "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", + "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz", + "integrity": "sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", + "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz", + "integrity": "sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", + "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", + "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", + "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.26.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.40.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", + "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@commitlint/cli": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.8.1.tgz", + "integrity": "sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/format": "^19.8.1", + "@commitlint/lint": "^19.8.1", + "@commitlint/load": "^19.8.1", + "@commitlint/read": "^19.8.1", + "@commitlint/types": "^19.8.1", + "tinyexec": "^1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/config-conventional": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.8.1.tgz", + "integrity": "sha512-/AZHJL6F6B/G959CsMAzrPKKZjeEiAVifRyEwXxcT6qtqbPwGw+iQxmNS+Bu+i09OCtdNRW6pNpBvgPrtMr9EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.8.1", + "conventional-changelog-conventionalcommits": "^7.0.2" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/config-validator": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.8.1.tgz", + "integrity": "sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.8.1", + "ajv": "^8.11.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/ensure": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.8.1.tgz", + "integrity": "sha512-mXDnlJdvDzSObafjYrOSvZBwkD01cqB4gbnnFuVyNpGUM5ijwU/r/6uqUmBXAAOKRfyEjpkGVZxaDsCVnHAgyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.8.1", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "lodash.snakecase": "^4.1.1", + "lodash.startcase": "^4.4.0", + "lodash.upperfirst": "^4.3.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/execute-rule": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.8.1.tgz", + "integrity": "sha512-YfJyIqIKWI64Mgvn/sE7FXvVMQER/Cd+s3hZke6cI1xgNT/f6ZAz5heND0QtffH+KbcqAwXDEE1/5niYayYaQA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/format": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.8.1.tgz", + "integrity": "sha512-kSJj34Rp10ItP+Eh9oCItiuN/HwGQMXBnIRk69jdOwEW9llW9FlyqcWYbHPSGofmjsqeoxa38UaEA5tsbm2JWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.8.1", + "chalk": "^5.3.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/is-ignored": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.8.1.tgz", + "integrity": "sha512-AceOhEhekBUQ5dzrVhDDsbMaY5LqtN8s1mqSnT2Kz1ERvVZkNihrs3Sfk1Je/rxRNbXYFzKZSHaPsEJJDJV8dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.8.1", + "semver": "^7.6.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/lint": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.8.1.tgz", + "integrity": "sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/is-ignored": "^19.8.1", + "@commitlint/parse": "^19.8.1", + "@commitlint/rules": "^19.8.1", + "@commitlint/types": "^19.8.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/load": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.8.1.tgz", + "integrity": "sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/config-validator": "^19.8.1", + "@commitlint/execute-rule": "^19.8.1", + "@commitlint/resolve-extends": "^19.8.1", + "@commitlint/types": "^19.8.1", + "chalk": "^5.3.0", + "cosmiconfig": "^9.0.0", + "cosmiconfig-typescript-loader": "^6.1.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "lodash.uniq": "^4.5.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/message": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.8.1.tgz", + "integrity": "sha512-+PMLQvjRXiU+Ae0Wc+p99EoGEutzSXFVwQfa3jRNUZLNW5odZAyseb92OSBTKCu+9gGZiJASt76Cj3dLTtcTdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/parse": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.8.1.tgz", + "integrity": "sha512-mmAHYcMBmAgJDKWdkjIGq50X4yB0pSGpxyOODwYmoexxxiUCy5JJT99t1+PEMK7KtsCtzuWYIAXYAiKR+k+/Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.8.1", + "conventional-changelog-angular": "^7.0.0", + "conventional-commits-parser": "^5.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/read": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.8.1.tgz", + "integrity": "sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/top-level": "^19.8.1", + "@commitlint/types": "^19.8.1", + "git-raw-commits": "^4.0.0", + "minimist": "^1.2.8", + "tinyexec": "^1.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/resolve-extends": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.8.1.tgz", + "integrity": "sha512-GM0mAhFk49I+T/5UCYns5ayGStkTt4XFFrjjf0L4S26xoMTSkdCf9ZRO8en1kuopC4isDFuEm7ZOm/WRVeElVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/config-validator": "^19.8.1", + "@commitlint/types": "^19.8.1", + "global-directory": "^4.0.1", + "import-meta-resolve": "^4.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/rules": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.8.1.tgz", + "integrity": "sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/ensure": "^19.8.1", + "@commitlint/message": "^19.8.1", + "@commitlint/to-lines": "^19.8.1", + "@commitlint/types": "^19.8.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/to-lines": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.8.1.tgz", + "integrity": "sha512-98Mm5inzbWTKuZQr2aW4SReY6WUukdWXuZhrqf1QdKPZBCCsXuG87c+iP0bwtD6DBnmVVQjgp4whoHRVixyPBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/top-level": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.8.1.tgz", + "integrity": "sha512-Ph8IN1IOHPSDhURCSXBz44+CIu+60duFwRsg6HqaISFHQHbmBtxVw4ZrFNIYUzEP7WwrNPxa2/5qJ//NK1FGcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^7.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/types": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.8.1.tgz", + "integrity": "sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/conventional-commits-parser": "^5.0.0", + "chalk": "^5.3.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", + "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.17.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/js": { + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", + "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@fortawesome/angular-fontawesome": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@fortawesome/angular-fontawesome/-/angular-fontawesome-1.0.0.tgz", + "integrity": "sha512-EC2fYuXIuw2ld1kzJi+zysWus6OeGGfLQtbh0hW9zyyq5aBo8ZJkcJKBsVQ8E6Mg7nHyTWaXn+sdcXTPDWz+UQ==", + "license": "MIT", + "dependencies": { + "@fortawesome/fontawesome-svg-core": "^6.7.1", + "tslib": "^2.8.1" + }, + "peerDependencies": { + "@angular/core": "^19.0.0" + } + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.2.tgz", + "integrity": "sha512-Zs+YeHUC5fkt7Mg1l6XTniei3k4bwG/yo3iFUtZWd/pMx9g3fdvkSK9E0FOC+++phXOka78uJcYb8JaFkW52Xg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.7.2.tgz", + "integrity": "sha512-yxtOBWDrdi5DD5o1pmVdq3WMCvnobT0LU6R8RyyVXPvFRd2o79/0NCuQoCjNTeZz9EzA9xS3JxNWfv54RIHFEA==", + "license": "MIT", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.7.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-brands-svg-icons": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.7.2.tgz", + "integrity": "sha512-zu0evbcRTgjKfrr77/2XX+bU+kuGfjm0LbajJHVIgBWNIDzrhpRxiCPNT8DW5AdmSsq7Mcf9D1bH0aSeSUSM+Q==", + "license": "(CC-BY-4.0 AND MIT)", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.7.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-regular-svg-icons": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.7.2.tgz", + "integrity": "sha512-7Z/ur0gvCMW8G93dXIQOkQqHo2M5HLhYrRVC0//fakJXxcF1VmMPsxnG6Ee8qEylA8b8Q3peQXWMNZ62lYF28g==", + "license": "(CC-BY-4.0 AND MIT)", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.7.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.7.2.tgz", + "integrity": "sha512-GsBrnOzU8uj0LECDfD5zomZJIjrPhIlWU82AHwa2s40FKH+kcxQaBvBo3Z4TxyZHIyX8XTDxsyA33/Vx9eFuQA==", + "license": "(CC-BY-4.0 AND MIT)", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.7.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@googlemaps/markerclusterer": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@googlemaps/markerclusterer/-/markerclusterer-2.6.2.tgz", + "integrity": "sha512-U6uVhq8iWhiIckA89sgRu8OK35mjd6/3CuoZKWakKEf0QmRRWpatlsPb3kqXkoWSmbcZkopRiI4dnW6DQSd7bQ==", + "license": "Apache-2.0", + "dependencies": { + "@types/supercluster": "^7.1.3", + "fast-equals": "^5.2.2", + "supercluster": "^8.0.1" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@inquirer/ansi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", + "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.1.tgz", + "integrity": "sha512-rOcLotrptYIy59SGQhKlU0xBg1vvcVl2FdPIEclUvKHh0wo12OfGkId/01PIMJ/V+EimJ77t085YabgnQHBa5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.1", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.6.tgz", + "integrity": "sha512-6ZXYK3M1XmaVBZX6FCfChgtponnL0R6I7k8Nu+kaoNkT828FVZTcca1MqmWQipaW2oNREQl5AaPCUOOCVNdRMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.7", + "@inquirer/type": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.1.tgz", + "integrity": "sha512-hzGKIkfomGFPgxKmnKEKeA+uCYBqC+TKtRx5LgyHRCrF6S2MliwRIjp3sUaWwVzMp7ZXVs8elB0Tfe682Rpg4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "cli-width": "^4.1.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor": { + "version": "4.2.22", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.22.tgz", + "integrity": "sha512-8yYZ9TCbBKoBkzHtVNMF6PV1RJEUvMlhvmS3GxH4UvXMEHlS45jFyqFy0DU+K42jBs5slOaA78xGqqqWAx3u6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.1", + "@inquirer/external-editor": "^1.0.3", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "4.0.22", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.22.tgz", + "integrity": "sha512-9XOjCjvioLjwlq4S4yXzhvBmAXj5tG+jvva0uqedEsQ9VD8kZ+YT7ap23i0bIXOtow+di4+u3i6u26nDqEfY4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.1", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.0.tgz", + "integrity": "sha512-h4fgse5zeGsBSW3cRQqu9a99OXRdRsNCvHoBqVmz40cjYjYFzcfwD0KA96BHIPlT7rZw0IpiefQIqXrjbzjS4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.1", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.22.tgz", + "integrity": "sha512-oAdMJXz++fX58HsIEYmvuf5EdE8CfBHHXjoi9cTcQzgFoHGZE+8+Y3P38MlaRMeBvAVnkWtAxMUF6urL2zYsbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.1", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "4.0.22", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.22.tgz", + "integrity": "sha512-CbdqK1ioIr0Y3akx03k/+Twf+KSlHjn05hBL+rmubMll7PsDTGH0R4vfFkr+XrkB0FOHrjIwVP9crt49dgt+1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.1", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.3.2.tgz", + "integrity": "sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^4.1.2", + "@inquirer/confirm": "^5.1.6", + "@inquirer/editor": "^4.2.7", + "@inquirer/expand": "^4.0.9", + "@inquirer/input": "^4.1.6", + "@inquirer/number": "^3.0.9", + "@inquirer/password": "^4.0.9", + "@inquirer/rawlist": "^4.0.9", + "@inquirer/search": "^3.0.9", + "@inquirer/select": "^4.0.9" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.10.tgz", + "integrity": "sha512-Du4uidsgTMkoH5izgpfyauTL/ItVHOLsVdcY+wGeoGaG56BV+/JfmyoQGniyhegrDzXpfn3D+LFHaxMDRygcAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.1", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.1.tgz", + "integrity": "sha512-cKiuUvETublmTmaOneEermfG2tI9ABpb7fW/LqzZAnSv4ZaJnbEis05lOkiBuYX5hNdnX0Q9ryOQyrNidb55WA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.1", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.1.tgz", + "integrity": "sha512-E9hbLU4XsNe2SAOSsFrtYtYQDVi1mfbqJrPDvXKnGlnRiApBdWMJz7r3J2Ff38AqULkPUD3XjQMD4492TymD7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.1", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", + "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/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/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@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==", + "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==", + "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==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "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==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", + "license": "MIT" + }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@listr2/prompt-adapter-inquirer": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.18.tgz", + "integrity": "sha512-0hz44rAcrphyXcA8IS7EJ2SCoaBZD2u5goE8S/e+q/DL+dOGpqpcLidVOFeLG3VgML62SXmfRLAhWt0zL1oW4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/type": "^1.5.5" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@inquirer/prompts": ">= 3 < 8" + } + }, + "node_modules/@listr2/prompt-adapter-inquirer/node_modules/@inquirer/type": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz", + "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@listr2/prompt-adapter-inquirer/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.2.6.tgz", + "integrity": "sha512-yF/ih9EJJZc72psFQbwnn8mExIWfTnzWJg+N02hnpXtDPETYLmQswIMBn7+V88lfCaFrMozJsUvcEQIkEPU0Gg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.2.6.tgz", + "integrity": "sha512-5BbCumsFLbCi586Bb1lTWQFkekdQUw8/t8cy++Uq251cl3hbDIGEwD9HAwh8H6IS2F6QA9KdKmO136LmipRNkg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.2.6.tgz", + "integrity": "sha512-+6XgLpMb7HBoWxXj+bLbiiB4s0mRRcDPElnRS3LpWRzdYSe+gFk5MT/4RrVNqd2MESUDmb53NUXw1+BP69bjiQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.2.6.tgz", + "integrity": "sha512-l5VmJamJ3nyMmeD1ANBQCQqy7do1ESaJQfKPSm2IG9/ADZryptTyCj8N6QaYgIWewqNUrcbdMkJajRQAt5Qjfg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.2.6.tgz", + "integrity": "sha512-nDYT8qN9si5+onHYYaI4DiauDMx24OAiuZAUsEqrDy+ja/3EbpXPX/VAkMV8AEaQhy3xc4dRC+KcYIvOFefJ4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.2.6.tgz", + "integrity": "sha512-XlqVtILonQnG+9fH2N3Aytria7P/1fwDgDhl29rde96uH2sLB8CHORIf2PfuLVzFQJ7Uqp8py9AYwr3ZUCFfWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", + "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", + "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", + "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", + "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", + "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", + "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@napi-rs/nice": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.1.1.tgz", + "integrity": "sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/nice-android-arm-eabi": "1.1.1", + "@napi-rs/nice-android-arm64": "1.1.1", + "@napi-rs/nice-darwin-arm64": "1.1.1", + "@napi-rs/nice-darwin-x64": "1.1.1", + "@napi-rs/nice-freebsd-x64": "1.1.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.1.1", + "@napi-rs/nice-linux-arm64-gnu": "1.1.1", + "@napi-rs/nice-linux-arm64-musl": "1.1.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.1.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.1.1", + "@napi-rs/nice-linux-s390x-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-musl": "1.1.1", + "@napi-rs/nice-openharmony-arm64": "1.1.1", + "@napi-rs/nice-win32-arm64-msvc": "1.1.1", + "@napi-rs/nice-win32-ia32-msvc": "1.1.1", + "@napi-rs/nice-win32-x64-msvc": "1.1.1" + } + }, + "node_modules/@napi-rs/nice-android-arm-eabi": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz", + "integrity": "sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-android-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz", + "integrity": "sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz", + "integrity": "sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz", + "integrity": "sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-freebsd-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz", + "integrity": "sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz", + "integrity": "sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz", + "integrity": "sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz", + "integrity": "sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-ppc64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz", + "integrity": "sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-riscv64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz", + "integrity": "sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-s390x-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz", + "integrity": "sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz", + "integrity": "sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz", + "integrity": "sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-openharmony-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz", + "integrity": "sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-arm64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz", + "integrity": "sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-ia32-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz", + "integrity": "sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-x64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz", + "integrity": "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ngneat/until-destroy": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@ngneat/until-destroy/-/until-destroy-10.0.0.tgz", + "integrity": "sha512-xXFAabQ4YVJ82LYxdgUlaKZyR3dSbxqG3woSyaclzxfCgWMEDweCcM/GGYbNiHJa0WwklI98RXHvca+UyCxpeg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/core": ">=13", + "rxjs": "^6.4.0 || ^7.0.0" + } + }, + "node_modules/@ngtools/webpack": { + "version": "19.2.19", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-19.2.19.tgz", + "integrity": "sha512-R9aeTrOBiRVl8I698JWPniUAAEpSvzc8SUGWSM5UXWMcHnWqd92cOnJJ1aXDGJZKXrbhMhCBx9Dglmcks5IDpg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^19.0.0 || ^19.2.0-next.0", + "typescript": ">=5.5 <5.9", + "webpack": "^5.54.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", + "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/fs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/git": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-6.0.3.tgz", + "integrity": "sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^10.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", + "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz", + "integrity": "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.2.0.tgz", + "integrity": "sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.3.tgz", + "integrity": "sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.2.2.tgz", + "integrity": "sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.1.0.tgz", + "integrity": "sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "node-gyp": "^11.0.0", + "proc-log": "^5.0.0", + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/@parcel/watcher/node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@primeng/themes": { + "version": "19.1.4", + "resolved": "https://registry.npmjs.org/@primeng/themes/-/themes-19.1.4.tgz", + "integrity": "sha512-Hze5bBTjsLzZXb20qsm9apsFuzpZzXiU+Ulj/7R+2fwMmcQk0XpkQS7V88fsFw6xsTD7+R+hgqr7Rzy0Gf+4dw==", + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "@primeuix/styled": "^0.3.2" + } + }, + "node_modules/@primeuix/styled": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@primeuix/styled/-/styled-0.3.2.tgz", + "integrity": "sha512-ColZes0+/WKqH4ob2x8DyNYf1NENpe5ZguOvx5yCLxaP8EIMVhLjWLO/3umJiDnQU4XXMLkn2mMHHw+fhTX/mw==", + "license": "MIT", + "dependencies": { + "@primeuix/utils": "^0.3.2" + }, + "engines": { + "node": ">=12.11.0" + } + }, + "node_modules/@primeuix/utils": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@primeuix/utils/-/utils-0.3.2.tgz", + "integrity": "sha512-B+nphqTQeq+i6JuICLdVWnDMjONome2sNz0xI65qIOyeB4EF12CoKRiCsxuZ5uKAkHi/0d1LqlQ9mIWRSdkavw==", + "license": "MIT", + "engines": { + "node": ">=12.11.0" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz", + "integrity": "sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.8.tgz", + "integrity": "sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz", + "integrity": "sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.8.tgz", + "integrity": "sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.8.tgz", + "integrity": "sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.8.tgz", + "integrity": "sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.8.tgz", + "integrity": "sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.8.tgz", + "integrity": "sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.8.tgz", + "integrity": "sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.8.tgz", + "integrity": "sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.2.tgz", + "integrity": "sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.8.tgz", + "integrity": "sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.8.tgz", + "integrity": "sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.2.tgz", + "integrity": "sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.8.tgz", + "integrity": "sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.2.tgz", + "integrity": "sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.8.tgz", + "integrity": "sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz", + "integrity": "sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz", + "integrity": "sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.2.tgz", + "integrity": "sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.8.tgz", + "integrity": "sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.8.tgz", + "integrity": "sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.2.tgz", + "integrity": "sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.8.tgz", + "integrity": "sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rx-angular/cdk": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/@rx-angular/cdk/-/cdk-19.1.0.tgz", + "integrity": "sha512-4Q6AZebAakLKLZkgntAWLyV02Hwu9pqSE7wL5sgflW8mS63kUXi3YrGuFjdxjJA2oHGj4LTNGOhB0udy+X58gA==", + "license": "MIT", + "dependencies": { + "ng-morph": "^4.0.3", + "tslib": "^2.4.1" + }, + "peerDependencies": { + "@angular/core": "^19.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@rx-angular/state": { + "version": "19.0.3", + "resolved": "https://registry.npmjs.org/@rx-angular/state/-/state-19.0.3.tgz", + "integrity": "sha512-INYUKH7xic+QvVinx5bQZOSNgBbQ1sV+Sxy2iM99WnsjF4jE+O10ddZv/Qydrw3dIEQ4qXBrW2bkp+ZLBYkzXQ==", + "license": "MIT", + "dependencies": { + "ng-morph": "^4.0.3", + "tslib": "^2.4.1" + }, + "peerDependencies": { + "@angular/core": "^19.0.0", + "@rx-angular/cdk": "^19.1.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@rx-angular/template": { + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@rx-angular/template/-/template-19.2.2.tgz", + "integrity": "sha512-veisr9u3SHEBR179D/VJ47zShONZsfWPpaA5Z5AUM5KgunETUUadr4wGozENMXtkklLezH4TDJ1ledTMLavf4A==", + "license": "MIT", + "dependencies": { + "ng-morph": "^4.0.3", + "tslib": "^2.4.1" + }, + "peerDependencies": { + "@angular/core": "^19.0.0", + "@rx-angular/cdk": "^19.1.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@schematics/angular": { + "version": "19.2.19", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-19.2.19.tgz", + "integrity": "sha512-6/0pvbPCY4UHeB4lnM/5r250QX5gcLgOYbR5FdhFu+22mOPHfWpRc5tNuY9kCephDHzAHjo6fTW1vefOOmA4jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "19.2.19", + "@angular-devkit/schematics": "19.2.19", + "jsonc-parser": "3.3.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/bundle": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.1.0.tgz", + "integrity": "sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.4.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-2.0.0.tgz", + "integrity": "sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.4.3.tgz", + "integrity": "sha512-fk2zjD9117RL9BjqEwF7fwv7Q/P9yGsMV4MUJZ/DocaQJ6+3pKr+syBq1owU5Q5qGw5CUbXzm+4yJ2JVRDQeSA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-3.1.0.tgz", + "integrity": "sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "make-fetch-happen": "^14.0.2", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.1.1.tgz", + "integrity": "sha512-eFFvlcBIoGwVkkwmTi/vEQFSva3xs5Ot3WmBcjgjVdiaoelBLQaQ/ZBfhlG0MnG0cmTYScPpk7eDdGDWUcFUmg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.4.1", + "tuf-js": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-2.1.1.tgz", + "integrity": "sha512-hVJD77oT67aowHxwT4+M6PGOp+E2LtLdTK3+FC0lBO9T7sYwItDMXZ7Z07IDCvR1M717a4axbIWckrW67KMP/w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.17.tgz", + "integrity": "sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.6.1", + "lightningcss": "1.30.2", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.17" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.17.tgz", + "integrity": "sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA==", + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.17", + "@tailwindcss/oxide-darwin-arm64": "4.1.17", + "@tailwindcss/oxide-darwin-x64": "4.1.17", + "@tailwindcss/oxide-freebsd-x64": "4.1.17", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.17", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.17", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.17", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.17", + "@tailwindcss/oxide-linux-x64-musl": "4.1.17", + "@tailwindcss/oxide-wasm32-wasi": "4.1.17", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.17", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.17" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.17.tgz", + "integrity": "sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.17.tgz", + "integrity": "sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.17.tgz", + "integrity": "sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.17.tgz", + "integrity": "sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.17.tgz", + "integrity": "sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.17.tgz", + "integrity": "sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.17.tgz", + "integrity": "sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.17.tgz", + "integrity": "sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.17.tgz", + "integrity": "sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.17.tgz", + "integrity": "sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.6.0", + "@emnapi/runtime": "^1.6.0", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.0.7", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.17.tgz", + "integrity": "sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.17.tgz", + "integrity": "sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.17.tgz", + "integrity": "sha512-+nKl9N9mN5uJ+M7dBOOCzINw94MPstNR/GtIhz1fpZysxL/4a+No64jCBD6CPN+bIHWFx3KWuu8XJRrj/572Dw==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.17", + "@tailwindcss/oxide": "4.1.17", + "postcss": "^8.4.41", + "tailwindcss": "4.1.17" + } + }, + "node_modules/@ts-morph/common": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.24.0.tgz", + "integrity": "sha512-c1xMmNHWpNselmpIqursHeOHHBTIsJLbB+NuovbTTRCNiTLEr/U9dbJ8qy0jd/O2x5pc3seWuOUN5R2IoOTp8A==", + "license": "MIT", + "dependencies": { + "fast-glob": "^3.3.2", + "minimatch": "^9.0.4", + "mkdirp": "^3.0.1", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@ts-morph/common/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@ts-morph/common/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@ts-morph/common/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-3.0.1.tgz", + "integrity": "sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/conventional-commits-parser": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.2.tgz", + "integrity": "sha512-BgT2szDXnVypgpNxOK8aL5SGjUdaQbC++WZNjF1Qge3Og2+zhHj+RWhmehLhYyvQwqAmvezruVfOf8+3m74W+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cors": { + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", + "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "^1" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.7", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz", + "integrity": "sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/file-saver": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.7.tgz", + "integrity": "sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "license": "MIT" + }, + "node_modules/@types/google.maps": { + "version": "3.58.1", + "resolved": "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.58.1.tgz", + "integrity": "sha512-X9QTSvGJ0nCfMzYOnaVs/k6/4L+7F5uCS+4iUmkLEls6J9S/Phv+m/i3mDeyc49ZBgwab3EFO1HEoBY7k98EGQ==", + "license": "MIT" + }, + "node_modules/@types/googlemaps": { + "version": "3.43.3", + "resolved": "https://registry.npmjs.org/@types/googlemaps/-/googlemaps-3.43.3.tgz", + "integrity": "sha512-ZWNoz/O8MPEpiajvj7QiqCY8tTLFNqNZ/a+s+zTV58wFVNAvvqV4bdGfnsjTb5Cs4V6wEsLrX8XRhmnyYJ2Tdg==", + "deprecated": "Types for the Google Maps browser API have moved to @types/google.maps. Note: these types are not for the googlemaps npm package, which is a Node API.", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/iban": { + "version": "0.0.35", + "resolved": "https://registry.npmjs.org/@types/iban/-/iban-0.0.35.tgz", + "integrity": "sha512-BOsp/b0ypIBnZdp1R8aP3n4w7I0n6vcObXtD0OT91lVSdo+Bx4VL26tW3yx1Dr9I4D5H3A27IOZoMVAdVfG4FQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/inputmask": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@types/inputmask/-/inputmask-5.0.7.tgz", + "integrity": "sha512-uojbVPWzBQ/n/0jc/d16fLqmGasFIptbrLD2WrCPWArlk+5PgblOqH4EDkI3AoobXLAlOK5yF01V8jMmvMG5qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "5.1.12", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.12.tgz", + "integrity": "sha512-1BzPxNsFDLDfj9InVR3IeY0ZVf4o9XV+4mDqoCfyPkbsA7dYyKAPAb2co6wLFlHcvxPlt1wShm7zQdV7uTfLGA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.19.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.1.tgz", + "integrity": "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/supercluster": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz", + "integrity": "sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==", + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.34", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.34.tgz", + "integrity": "sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.4.tgz", + "integrity": "sha512-R48VhmTJqplNyDxCyqqVkFSZIx1qX6PzwqgcXn1olLrzxcSBDlOsbtcnQuQhNtnNiJ4Xe5gREI1foajYaYU2Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.46.4", + "@typescript-eslint/type-utils": "8.46.4", + "@typescript-eslint/utils": "8.46.4", + "@typescript-eslint/visitor-keys": "8.46.4", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.46.4", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.4.tgz", + "integrity": "sha512-tK3GPFWbirvNgsNKto+UmB/cRtn6TZfyw0D6IKrW55n6Vbs7KJoZtI//kpTKzE/DUmmnAFD8/Ca46s7Obs92/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.46.4", + "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/typescript-estree": "8.46.4", + "@typescript-eslint/visitor-keys": "8.46.4", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.4.tgz", + "integrity": "sha512-nPiRSKuvtTN+no/2N1kt2tUh/HoFzeEgOm9fQ6XQk4/ApGqjx0zFIIaLJ6wooR1HIoozvj2j6vTi/1fgAz7UYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.46.4", + "@typescript-eslint/types": "^8.46.4", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.4.tgz", + "integrity": "sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/visitor-keys": "8.46.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.4.tgz", + "integrity": "sha512-+/XqaZPIAk6Cjg7NWgSGe27X4zMGqrFqZ8atJsX3CWxH/jACqWnrWI68h7nHQld0y+k9eTTjb9r+KU4twLoo9A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.4.tgz", + "integrity": "sha512-V4QC8h3fdT5Wro6vANk6eojqfbv5bpwHuMsBcJUJkqs2z5XnYhJzyz9Y02eUmF9u3PgXEUiOt4w4KHR3P+z0PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/typescript-estree": "8.46.4", + "@typescript-eslint/utils": "8.46.4", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.4.tgz", + "integrity": "sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.4.tgz", + "integrity": "sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.46.4", + "@typescript-eslint/tsconfig-utils": "8.46.4", + "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/visitor-keys": "8.46.4", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.4.tgz", + "integrity": "sha512-AbSv11fklGXV6T28dp2Me04Uw90R2iJ30g2bgLz529Koehrmkbs1r7paFqr1vPCZi7hHwYxYtxfyQMRC8QaVSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.46.4", + "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/typescript-estree": "8.46.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.4.tgz", + "integrity": "sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.4", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.2.0.tgz", + "integrity": "sha512-mkQnxTkcldAzIsomk1UuLfAu9n+kpQ3JbHcpCp7d2Oo6ITtji8pHS3QToOWjhPFvNQSnhlkAjmGbhv2QvwO/7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.21.3" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "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==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", + "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true, + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.22", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.22.tgz", + "integrity": "sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.27.0", + "caniuse-lite": "^1.0.30001754", + "fraction.js": "^5.3.4", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", + "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.26", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.26.tgz", + "integrity": "sha512-73lC1ugzwoaWCLJ1LvOgrR5xsMLTqSKIEoMHVtL9E/HNk0PXtTM76ZIm84856/SF7Nv8mPZxKoBsgpm0tR1u1Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/beasties": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.3.2.tgz", + "integrity": "sha512-p4AF8uYzm9Fwu8m/hSVTCPXrRBPmB34hQpHsec2KOaR9CZmgoU8IOv4Cvwq4hgz2p4hLMNbsdNl5XeA6XbAQwA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "htmlparser2": "^10.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.49", + "postcss-media-query-parser": "^0.2.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", + "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", + "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.8.25", + "caniuse-lite": "^1.0.30001754", + "electron-to-chromium": "^1.5.249", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.1.4" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", + "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/tar": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", + "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cacache/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/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/call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "license": "MIT" + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001754", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001754.tgz", + "integrity": "sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==", + "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/cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "license": "Apache-2.0", + "dependencies": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "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": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "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": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/code-block-writer": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz", + "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==", + "license": "MIT" + }, + "node_modules/codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", + "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true, + "license": "ISC" + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/compression/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/conventional-changelog-angular": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", + "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-conventionalcommits": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", + "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-commits-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", + "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-text-path": "^2.0.0", + "JSONStream": "^1.3.5", + "meow": "^12.0.1", + "split2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.mjs" + }, + "engines": { + "node": ">=16" + } + }, + "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.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz", + "integrity": "sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.1", + "globby": "^14.0.0", + "normalize-path": "^3.0.0", + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.46.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.46.0.tgz", + "integrity": "sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.26.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cosmiconfig-typescript-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.2.0.tgz", + "integrity": "sha512-GEN39v7TgdxgIoNcdkRE3uiAzQt3UXLyHbRHD6YoL048XAeOomyxaP+Hh/+2C6C2wYjxJ2onhJcsQp+L4YEkVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "jiti": "^2.6.1" + }, + "engines": { + "node": ">=v18" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=9", + "typescript": ">=5" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "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-loader": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", + "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.27.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "dev": true, + "license": "MIT" + }, + "node_modules/dargs": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", + "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/dayjs": { + "version": "1.11.19", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", + "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", + "license": "MIT" + }, + "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/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "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==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", + "dev": true, + "license": "MIT" + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "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/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.250", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.250.tgz", + "integrity": "sha512-/5UMj9IiGDMOFBnN4i7/Ry5onJrAGSbOGo3s9FEKmwobGq6xw832ccET0CE3CkkMBZ8GJSlUIesZofpyurqDXw==", + "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/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine.io": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", + "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.7.2", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.2.tgz", + "integrity": "sha512-kKvD1tO6BM+oK9HzCPpUdRb4vKFQY/FPTFmurMvh6LlN68VMrdj77w8yp51/kDbpkFOS9J8w5W6zIzgM2H8/hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "punycode": "^1.4.1", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eol": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.10.0.tgz", + "integrity": "sha512-+w3ktYrOphcIqC1XKmhQYvM+o2uxgQFiimL7B6JPZJlWVxf7Lno9e/JWLPIgbHo7DoZ+b7jsf/NzrUcNe6ZTZQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ryanve" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/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": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.25.4.tgz", + "integrity": "sha512-2HlCS6rNvKWaSKhWaG/YIyRsTsL3gUrMP2ToZMBIjw9LM7vVcIs+rz8kE2vExvTJgvM8OKPqNpcHawY/BQc/qQ==", + "dev": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", + "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.1", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz", + "integrity": "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.11.7" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/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/express/node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-equals": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.3.2.tgz", + "integrity": "sha512-6rxyATwPCkaFIL3JLqw8qXqMpIZ942pTX/tbQFkRsDGblS8tNGtlUauA/+mt6RUfqn/4MoEr+WDkYoIQbibWuQ==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==", + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", + "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^7.2.0", + "path-exists": "^5.0.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", + "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/git-raw-commits": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", + "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dargs": "^8.0.0", + "meow": "^12.0.1", + "split2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.mjs" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regex.js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "4.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-directory/node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/globby/node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/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==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", + "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.1", + "entities": "^6.0.0" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-middleware": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.5.tgz", + "integrity": "sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.15", + "debug": "^4.3.6", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.3", + "is-plain-object": "^5.0.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/husky": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", + "dev": true, + "license": "MIT", + "bin": { + "husky": "bin.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, + "node_modules/iban": { + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/iban/-/iban-0.0.14.tgz", + "integrity": "sha512-+rocNKk+Ga9m8Lr9fTMWd+87JnsBrucm0ZsIx5ROOarZlaDLmd+FKdbtvb0XyoBw9GAFOYG2GuLqoNB16d+p3w==", + "license": "MIT" + }, + "node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "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/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-7.0.0.tgz", + "integrity": "sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", + "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/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/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", + "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/inputmask": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/inputmask/-/inputmask-5.0.9.tgz", + "integrity": "sha512-s0lUfqcEbel+EQXtehXqwCJGShutgieOaIImFKC/r4reYNvX3foyrChl6LOEvaEgxEbesePIrw1Zi2jhZaDZbQ==", + "license": "MIT" + }, + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "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==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-network-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz", + "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-text-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", + "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "text-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "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/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/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/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jasmine-core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.5.0.tgz", + "integrity": "sha512-NHOvoPO6o9gVR6pwqEACTEpbgcH+JJ6QDypyymGbSUIFIFsMMbBJ/xsFNud8MSClfnWclXd7RQlAZBz7yVo5TQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", + "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "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==", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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==", + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/karma": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz", + "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.7.2", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", + "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-chrome-launcher/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", + "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-coverage/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma-coverage/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/karma-jasmine": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", + "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "jasmine-core": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "karma": "^6.0.0" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", + "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "jasmine-core": "^4.0.0 || ^5.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" + } + }, + "node_modules/karma-jasmine/node_modules/jasmine-core": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.1.tgz", + "integrity": "sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/karma/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/karma/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/karma/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/karma/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/karma/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/karma/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/karma/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/karma/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/kdbush": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", + "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==", + "license": "ISC" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/launch-editor": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz", + "integrity": "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" + } + }, + "node_modules/less": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.2.tgz", + "integrity": "sha512-tkuLHQlvWUTeQ3doAqnHbNn8T6WX1KA8yvbKG9x4VtKtIjHsVKQZCH11zRgAfbDAXC2UNIg/K9BYAAcEzUIrNg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-12.2.0.tgz", + "integrity": "sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "license": "ISC", + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lightningcss": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", + "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.30.2", + "lightningcss-darwin-arm64": "1.30.2", + "lightningcss-darwin-x64": "1.30.2", + "lightningcss-freebsd-x64": "1.30.2", + "lightningcss-linux-arm-gnueabihf": "1.30.2", + "lightningcss-linux-arm64-gnu": "1.30.2", + "lightningcss-linux-arm64-musl": "1.30.2", + "lightningcss-linux-x64-gnu": "1.30.2", + "lightningcss-linux-x64-musl": "1.30.2", + "lightningcss-win32-arm64-msvc": "1.30.2", + "lightningcss-win32-x64-msvc": "1.30.2" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", + "cpu": [ + "arm64" + ], + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", + "cpu": [ + "arm64" + ], + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", + "cpu": [ + "x64" + ], + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", + "cpu": [ + "x64" + ], + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", + "cpu": [ + "arm" + ], + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", + "cpu": [ + "arm64" + ], + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", + "cpu": [ + "arm64" + ], + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", + "cpu": [ + "x64" + ], + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", + "cpu": [ + "x64" + ], + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", + "cpu": [ + "arm64" + ], + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lint-staged": { + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.2.6.tgz", + "integrity": "sha512-s1gphtDbV4bmW1eylXpVMk2u7is7YsrLl8hzrtvC70h4ByhcMLZFY01Fx05ZUDNuv1H8HO4E+e2zgejV1jVwNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^14.0.1", + "listr2": "^9.0.5", + "micromatch": "^4.0.8", + "nano-spawn": "^2.0.0", + "pidtree": "^0.6.0", + "string-argv": "^0.3.2", + "yaml": "^2.8.1" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": ">=20.17" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/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/lint-staged/node_modules/cli-truncate": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.1.1.tgz", + "integrity": "sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^7.1.0", + "string-width": "^8.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/cli-truncate/node_modules/string-width": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", + "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lint-staged/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/lint-staged/node_modules/listr2": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz", + "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^5.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/lint-staged/node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/lint-staged/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/listr2": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz", + "integrity": "sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lmdb": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.2.6.tgz", + "integrity": "sha512-SuHqzPl7mYStna8WRotY8XX/EUZBjjv3QyKIByeCLFfC9uXT/OIHByEcA07PzbMfQAM0KYJtLgtpMRlIe5dErQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "msgpackr": "^1.11.2", + "node-addon-api": "^6.1.0", + "node-gyp-build-optional-packages": "5.2.2", + "ordered-binary": "^1.5.3", + "weak-lru-cache": "^1.2.2" + }, + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "3.2.6", + "@lmdb/lmdb-darwin-x64": "3.2.6", + "@lmdb/lmdb-linux-arm": "3.2.6", + "@lmdb/lmdb-linux-arm64": "3.2.6", + "@lmdb/lmdb-linux-x64": "3.2.6", + "@lmdb/lmdb-win32-x64": "3.2.6" + } + }, + "node_modules/loader-runner": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/loader-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/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/log-update/node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-fetch-happen": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", + "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "ssri": "^12.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.50.0.tgz", + "integrity": "sha512-N0LUYQMUA1yS5tJKmMtU9yprPm6ZIg24yr/OVv/7t6q0kKDIho4cBbXRi1XKttUmNYDYgF/q45qrKE/UhGO0CA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + } + }, + "node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", + "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", + "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/msgpackr": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.5.tgz", + "integrity": "sha512-UjkUHN0yqp9RWKy0Lplhh+wlpdt9oQBYgULZOiFhV3VclSF1JnSQWZ5r9gORQlNYaUKQoR8itv7g7z1xDDuACA==", + "dev": true, + "license": "MIT", + "optional": true, + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", + "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.2.2" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" + } + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "license": "MIT", + "dependencies": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/nano-spawn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nano-spawn/-/nano-spawn-2.0.0.tgz", + "integrity": "sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/nano-spawn?sponsor=1" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/ng-morph": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/ng-morph/-/ng-morph-4.8.4.tgz", + "integrity": "sha512-XwL53wCOhyaAxvoekN74ONbWUK30huzp+GpZYyC01RfaG2AX9l7YlC1mGG/l7Rx7YXtFAk85VFnNJqn2e46K8g==", + "license": "Apache-2.0", + "dependencies": { + "jsonc-parser": "3.3.1", + "minimatch": "10.0.1", + "multimatch": "5.0.0", + "ts-morph": "23.0.0" + }, + "peerDependencies": { + "@angular-devkit/core": ">=16.0.0", + "@angular-devkit/schematics": ">=16.0.0", + "tslib": "^2.7.0" + } + }, + "node_modules/ng-morph/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ng-morph/node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ng-openapi-gen": { + "version": "0.52.0", + "resolved": "https://registry.npmjs.org/ng-openapi-gen/-/ng-openapi-gen-0.52.0.tgz", + "integrity": "sha512-twhJ9AIjR1LTRewW7Yg2Xu+iu6Qe3Z5SJR445lhraqWJRnoSkdUtf2Uyi8qIWzl3GWkI2KhHkQsDpC5+HA/iMw==", + "license": "MIT", + "dependencies": { + "@apidevtools/json-schema-ref-parser": "~9.1.2", + "argparse": "^2.0.1", + "eol": "^0.10.0", + "fs-extra": "^10.1.0", + "handlebars": "^4.7.8", + "jsesc": "^3.0.2", + "json-schema": "^0.4.0", + "lodash": "^4.17.21", + "typescript": "~5.1.3" + }, + "bin": { + "ng-openapi-gen": "lib/index.js" + }, + "peerDependencies": { + "@angular/core": ">=12.0.0", + "rxjs": ">=6.0.0" + } + }, + "node_modules/ng-openapi-gen/node_modules/typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "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-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.5.0.tgz", + "integrity": "sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", + "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.1" + }, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/node-gyp/node_modules/tar": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", + "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/node-gyp/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", + "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-install-checks": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.2.tgz", + "integrity": "sha512-z9HJBCYw9Zr8BqXcllKIs5nI+QggAImbBdHphOzVYrz2CB4iQ6FzWyKmlqDZua+51nAu7FcemlbTc9VgQN5XDQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-package-arg": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", + "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-packlist": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-9.0.0.tgz", + "integrity": "sha512-8qSayfmHJQTx3nJWYbbUmflpyarbLMBc6LCAjYsiGtXxDB68HaZpb8re6zeaLGxZzDuMdhsg70jryJe+RrItVQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^7.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz", + "integrity": "sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^12.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz", + "integrity": "sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^3.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^14.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^12.0.0", + "proc-log": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.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/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "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/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ordered-binary": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.0.tgz", + "integrity": "sha512-IQh2aMfMIDbPjI/8a3Edr+PiOpcsB7yo8NdW7aHWVaoR/pcDldunMvnnwbk/auPGqmKeAdxtZl7MHX/QmPwhvQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pacote": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-20.0.0.tgz", + "integrity": "sha512-pRjC5UFwZCgx9kUFDVM9YEahv4guZ1nSLqwmWiLUnDbGsjs+U5w7z6Uc8HNR1a6x8qnu5y9xtGE6D1uAuYz+0A==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^9.0.0", + "cacache": "^19.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^12.0.0", + "npm-packlist": "^9.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^3.0.0", + "ssri": "^12.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", + "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", + "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.8.0.tgz", + "integrity": "sha512-EZJb+ZxDrQf3dihsUL7p42pjNyrNIFJCrRHPMgxu/svsj+P3xS3fuEWp7k2+rfsavfl1N0G29b1HGs7J0m8rZA==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "@napi-rs/nice": "^1.0.1" + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", + "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^9.0.0", + "jiti": "^1.20.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/postcss-loader/node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.1.tgz", + "integrity": "sha512-hPpFQvHwL3Qv5AdRvBFMhnKo4tYxp0ReXiPn2bxkiohEX6mBeBwEpBSQTkD458RaaDKQMYSp4hX4UtfUTA5wDw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/primeflex": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/primeflex/-/primeflex-3.3.1.tgz", + "integrity": "sha512-zaOq3YvcOYytbAmKv3zYc+0VNS9Wg5d37dfxZnveKBFPr7vEIwfV5ydrpiouTft8MVW6qNjfkaQphHSnvgQbpQ==", + "license": "MIT" + }, + "node_modules/primeicons": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-7.0.0.tgz", + "integrity": "sha512-jK3Et9UzwzTsd6tzl2RmwrVY/b8raJ3QZLzoDACj+oTJ0oX7L9Hy+XnVwgo4QVKlKpnP/Ur13SXV/pVh4LzaDw==", + "license": "MIT" + }, + "node_modules/primeng": { + "version": "19.1.4", + "resolved": "https://registry.npmjs.org/primeng/-/primeng-19.1.4.tgz", + "integrity": "sha512-l5l8SHTxopxxyyXZx1BvbQ11P7ndLv2Qp8H5k2/+OCi65jTZn4xmtrBDGDs7k2K5UMHSqAnGjBgtpbckyqQETg==", + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "@primeuix/styled": "^0.3.2", + "@primeuix/utils": "^0.3.2", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/animations": "^19.0.0", + "@angular/cdk": "^19.0.0", + "@angular/common": "^19.0.0", + "@angular/core": "^19.0.0", + "@angular/forms": "^19.0.0", + "@angular/platform-browser": "^19.0.0", + "@angular/router": "^19.0.0", + "rxjs": "^6.0.0 || ^7.8.1" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/proc-log": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true, + "license": "MIT" + }, + "node_modules/regex-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz", + "integrity": "sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/regexpu-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.8.tgz", + "integrity": "sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.34.8", + "@rollup/rollup-android-arm64": "4.34.8", + "@rollup/rollup-darwin-arm64": "4.34.8", + "@rollup/rollup-darwin-x64": "4.34.8", + "@rollup/rollup-freebsd-arm64": "4.34.8", + "@rollup/rollup-freebsd-x64": "4.34.8", + "@rollup/rollup-linux-arm-gnueabihf": "4.34.8", + "@rollup/rollup-linux-arm-musleabihf": "4.34.8", + "@rollup/rollup-linux-arm64-gnu": "4.34.8", + "@rollup/rollup-linux-arm64-musl": "4.34.8", + "@rollup/rollup-linux-loongarch64-gnu": "4.34.8", + "@rollup/rollup-linux-powerpc64le-gnu": "4.34.8", + "@rollup/rollup-linux-riscv64-gnu": "4.34.8", + "@rollup/rollup-linux-s390x-gnu": "4.34.8", + "@rollup/rollup-linux-x64-gnu": "4.34.8", + "@rollup/rollup-linux-x64-musl": "4.34.8", + "@rollup/rollup-win32-arm64-msvc": "4.34.8", + "@rollup/rollup-win32-ia32-msvc": "4.34.8", + "@rollup/rollup-win32-x64-msvc": "4.34.8", + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup/node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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.85.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.85.0.tgz", + "integrity": "sha512-3ToiC1xZ1Y8aU7+CkgCI/tqyuPXEmYGJXO7H4uqp0xkLXUqp88rQQ4j1HmP37xSJLbCJPaIiv+cT1y+grssrww==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass-loader": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.5.tgz", + "integrity": "sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", + "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true, + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-static/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/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/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "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/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sigstore": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-3.1.0.tgz", + "integrity": "sha512-ZpzWAFHIFqyFE56dXqgX/DkDRZdz+rRcjoIk/RQU4IX0wiCv1l8S7ZrXDHcCc+uaf+6o7w3h2l3g6GYG5TKN9Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "@sigstore/sign": "^3.1.0", + "@sigstore/tuf": "^3.1.0", + "@sigstore/verify": "^2.1.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.6.0", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-adapter/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", + "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "license": "Apache-2.0", + "dependencies": { + "frac": "~1.1.2" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ssri": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", + "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/streamroller/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/streamroller/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/streamroller/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "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/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supercluster": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", + "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", + "license": "ISC", + "dependencies": { + "kdbush": "^4.0.2" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/synckit": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", + "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/tagged-tag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", + "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.17.tgz", + "integrity": "sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==", + "license": "MIT" + }, + "node_modules/tailwindcss-primeui": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/tailwindcss-primeui/-/tailwindcss-primeui-0.4.0.tgz", + "integrity": "sha512-YYC7B7Yyzm1/4pEGgpf1ABAhbrKY++LuPoUamnKE7fTPO5Ct/Qr/dT+Uq2yiVhQnaW1zHQpYnThxfksaxhlDfQ==", + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.1.0" + } + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/terser": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", + "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/text-extensions": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", + "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/thingies": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", + "integrity": "sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "^2" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-dump": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/ts-morph": { + "version": "23.0.0", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-23.0.0.tgz", + "integrity": "sha512-FcvFx7a9E8TUe6T3ShihXJLiJOiqyafzFKUO4aqIHDUCIvADdGNShcbc2W5PMr3LerXRv7mafvFZ9lRENxJmug==", + "license": "MIT", + "dependencies": { + "@ts-morph/common": "~0.24.0", + "code-block-writer": "^13.0.1" + } + }, + "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/tsx": { + "version": "4.20.6", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.6.tgz", + "integrity": "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==", + "license": "MIT", + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tuf-js": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-3.1.0.tgz", + "integrity": "sha512-3T3T04WzowbwV2FDiGXBbr81t64g1MUGGJRgT4x5o97N+8ArdhVCAF9IxFrxuSJmM3E5Asn7nKHkao0ibcZXAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "3.0.1", + "debug": "^4.4.1", + "make-fetch-happen": "^14.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.2.0.tgz", + "integrity": "sha512-xxCJm+Bckc6kQBknN7i9fnP/xobQRsRQxR01CztFkp/h++yfVxUUcmMgfR2HttJx/dpWjS9ubVuyspJv24Q9DA==", + "license": "(MIT OR CC0-1.0)", + "dependencies": { + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true, + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.46.4.tgz", + "integrity": "sha512-KALyxkpYV5Ix7UhvjTwJXZv76VWsHG+NjNlt/z+a17SOQSiOcBdUXdbJdyXi7RPxrBFECtFOiPwUJQusJuCqrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.46.4", + "@typescript-eslint/parser": "8.46.4", + "@typescript-eslint/typescript-estree": "8.46.4", + "@typescript-eslint/utils": "8.46.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.41", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.41.tgz", + "integrity": "sha512-O3oYyCMPYgNNHuO7Jjk3uacJWZF8loBgwrfd/5LE/HyZ3lUIOdniQ7DNXJcIgZbwioZxk0fLfI4EVnetdiX5jg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "license": "MIT", + "bin": { + "ua-parser-js": "script/cli.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unique-filename": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", + "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/unique-slug": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", + "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/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/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz", + "integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", + "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.2.tgz", + "integrity": "sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/vite/node_modules/@rollup/rollup-android-arm64": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.2.tgz", + "integrity": "sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/vite/node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.2.tgz", + "integrity": "sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/vite/node_modules/@rollup/rollup-darwin-x64": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.2.tgz", + "integrity": "sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/vite/node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.2.tgz", + "integrity": "sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/vite/node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.2.tgz", + "integrity": "sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/vite/node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.2.tgz", + "integrity": "sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/vite/node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.2.tgz", + "integrity": "sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/vite/node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.2.tgz", + "integrity": "sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/vite/node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.2.tgz", + "integrity": "sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/vite/node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.2.tgz", + "integrity": "sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/vite/node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.2.tgz", + "integrity": "sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/vite/node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.2.tgz", + "integrity": "sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/vite/node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.2.tgz", + "integrity": "sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/vite/node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.2.tgz", + "integrity": "sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/vite/node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.2.tgz", + "integrity": "sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/vite/node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.2.tgz", + "integrity": "sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/vite/node_modules/rollup": { + "version": "4.53.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.2.tgz", + "integrity": "sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.53.2", + "@rollup/rollup-android-arm64": "4.53.2", + "@rollup/rollup-darwin-arm64": "4.53.2", + "@rollup/rollup-darwin-x64": "4.53.2", + "@rollup/rollup-freebsd-arm64": "4.53.2", + "@rollup/rollup-freebsd-x64": "4.53.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.53.2", + "@rollup/rollup-linux-arm-musleabihf": "4.53.2", + "@rollup/rollup-linux-arm64-gnu": "4.53.2", + "@rollup/rollup-linux-arm64-musl": "4.53.2", + "@rollup/rollup-linux-loong64-gnu": "4.53.2", + "@rollup/rollup-linux-ppc64-gnu": "4.53.2", + "@rollup/rollup-linux-riscv64-gnu": "4.53.2", + "@rollup/rollup-linux-riscv64-musl": "4.53.2", + "@rollup/rollup-linux-s390x-gnu": "4.53.2", + "@rollup/rollup-linux-x64-gnu": "4.53.2", + "@rollup/rollup-linux-x64-musl": "4.53.2", + "@rollup/rollup-openharmony-arm64": "4.53.2", + "@rollup/rollup-win32-arm64-msvc": "4.53.2", + "@rollup/rollup-win32-ia32-msvc": "4.53.2", + "@rollup/rollup-win32-x64-gnu": "4.53.2", + "@rollup/rollup-win32-x64-msvc": "4.53.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "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/webpack": { + "version": "5.98.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", + "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", + "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^4.6.0", + "mime-types": "^2.1.31", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", + "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/express-serve-static-core": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "express": "^4.21.2", + "graceful-fs": "^4.2.6", + "http-proxy-middleware": "^2.0.9", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/webpack/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", + "license": "Apache-2.0", + "dependencies": { + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + }, + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zone.js": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.1.tgz", + "integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==", + "license": "MIT" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..2eab4f3 --- /dev/null +++ b/package.json @@ -0,0 +1,106 @@ +{ + "name": "browser-strutture-musa", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "prebuild:dev": "npm ci", + "build:dev": "ng build -c dev", + "postbuild:dev": "cp -r -d ./dist/browser/. /var/www/html/webApp", + "prebuild:dev:musa": "npm ci", + "build:dev:musa": "ng build -c musa-dev", + "postbuild:dev:musa": "cp -r -d ./dist/browser/. /var/www/html/webApp", + "prebuild:prod": "npm ci", + "build:prod": "ng build -c production", + "postbuild:prod": "cp -r -d ./dist/browser/. /var/www/html/webApp", + "prebuild:prod:musa": "npm ci", + "build:prod:musa": "ng build -c musa-prod", + "postbuild:prod:musa": "cp -r -d ./dist/browser/. /var/www/html/webApp", + "tool:openapig": "ng-openapi-gen -c openapi-gen.json", + "posttool:openapig": "tsx scripts/fixup-models.ts; prettier . --write;", + "watch": "ng build --watch --configuration development", + "test": "ng test", + "prepare": "husky install" + }, + "private": true, + "dependencies": { + "@angular/animations": "^19.1.0", + "@angular/common": "^19.1.0", + "@angular/compiler": "^19.1.0", + "@angular/core": "^19.1.0", + "@angular/forms": "^19.1.0", + "@angular/google-maps": "^19.2.19", + "@angular/platform-browser": "^19.1.0", + "@angular/platform-browser-dynamic": "^19.1.0", + "@angular/router": "^19.1.0", + "@fortawesome/angular-fontawesome": "^1.0.0", + "@fortawesome/free-brands-svg-icons": "^6.7.2", + "@fortawesome/free-regular-svg-icons": "^6.7.2", + "@fortawesome/free-solid-svg-icons": "^6.7.2", + "@googlemaps/markerclusterer": "^2.6.2", + "@ngneat/until-destroy": "^10.0.0", + "@primeng/themes": "^19.0.6", + "@rx-angular/cdk": "^19.1.0", + "@rx-angular/state": "^19.0.3", + "@rx-angular/template": "^19.2.1", + "@tailwindcss/postcss": "^4.0.6", + "dayjs": "^1.11.13", + "file-saver": "^2.0.5", + "iban": "^0.0.14", + "inputmask": "^5.0.9", + "lodash": "^4.17.21", + "ng-openapi-gen": "^0.52.0", + "postcss": "^8.5.2", + "primeflex": "^3.3.1", + "primeicons": "^7.0.0", + "primeng": "^19.1.4", + "prismjs": "^1.29.0", + "rxjs": "~7.8.0", + "tailwindcss": "^4.0.6", + "tailwindcss-primeui": "^0.4.0", + "tslib": "^2.3.0", + "tsx": "^4.19.3", + "type-fest": "^5.0.1", + "xlsx": "^0.18.5", + "zone.js": "~0.15.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^19.1.6", + "@angular/cli": "^19.1.6", + "@angular/compiler-cli": "^19.1.0", + "@commitlint/cli": "^19.7.1", + "@commitlint/config-conventional": "^19.7.1", + "@eslint/js": "^9.20.0", + "@types/file-saver": "^2.0.7", + "@types/google.maps": "^3.58.1", + "@types/googlemaps": "^3.43.3", + "@types/iban": "^0.0.35", + "@types/inputmask": "^5.0.7", + "@types/jasmine": "~5.1.0", + "@types/jest": "^29.5.14", + "@types/lodash": "^4.17.15", + "@types/node": "^22.13.1", + "autoprefixer": "^10.4.20", + "eslint": "^9.20.1", + "eslint-config-prettier": "^10.0.1", + "eslint-plugin-prettier": "^5.2.3", + "husky": "^9.1.7", + "jasmine-core": "~5.5.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "lint-staged": "^16.0.0", + "prettier": "3.5.1", + "typescript": "~5.7.2", + "typescript-eslint": "^8.24.1" + }, + "lint-staged": { + "*.{js,jsx,ts,tsx,json,css,scss,md}": [ + "prettier . --write", + "eslint --fix" + ] + } +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..e31069a Binary files /dev/null and b/public/favicon.ico differ diff --git a/scripts/fixup-models.ts b/scripts/fixup-models.ts new file mode 100644 index 0000000..448e0a9 --- /dev/null +++ b/scripts/fixup-models.ts @@ -0,0 +1,7 @@ +import fs from 'fs'; +import path from 'path'; + +const modelsPath = path.join(__dirname, '..', 'src', 'api', 'models.ts'); +const models = fs.readFileSync(modelsPath, 'utf-8'); +const fixedModels = models.replace(/^export\s+/gm, 'export type '); +fs.writeFileSync(modelsPath, fixedModels); diff --git a/src/.htaccess b/src/.htaccess new file mode 100644 index 0000000..38e17b8 --- /dev/null +++ b/src/.htaccess @@ -0,0 +1,12 @@ + + RewriteEngine on + + # Don't rewrite files or directories + RewriteCond %{REQUEST_FILENAME} -f [OR] + RewriteCond %{REQUEST_FILENAME} -d + RewriteRule ^ - [L] + + # Rewrite everything else to index.html + # to allow html5 state links + RewriteRule ^ index.html [L] + diff --git a/src/api/api-configuration.ts b/src/api/api-configuration.ts new file mode 100644 index 0000000..5f96088 --- /dev/null +++ b/src/api/api-configuration.ts @@ -0,0 +1,22 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { Injectable } from '@angular/core'; + +/** + * Global configuration + */ +@Injectable({ + providedIn: 'root', +}) +export class ApiConfiguration { + rootUrl: string = ''; +} + +/** + * Parameters for `ApiModule.forRoot()` + */ +export interface ApiConfigurationParams { + rootUrl?: string; +} diff --git a/src/api/api.module.ts b/src/api/api.module.ts new file mode 100644 index 0000000..698233e --- /dev/null +++ b/src/api/api.module.ts @@ -0,0 +1,73 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { + NgModule, + ModuleWithProviders, + SkipSelf, + Optional, +} from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { ApiConfiguration, ApiConfigurationParams } from './api-configuration'; + +import { StruttureApiClient } from './services/strutture-api-client'; +import { AuthApiClient } from './services/auth-api-client'; +import { AccountsApiClient } from './services/accounts-api-client'; +import { StipulatoriApiClient } from './services/stipulatori-api-client'; +import { RolesApiClient } from './services/roles-api-client'; +import { NomenclatoreApiClient } from './services/nomenclatore-api-client'; +import { LuoghiApiClient } from './services/luoghi-api-client'; +import { StrutturePubblicheApiClient } from './services/strutture-pubbliche-api-client'; + +/** + * Module that provides all services and configuration. + */ +@NgModule({ + imports: [], + exports: [], + declarations: [], + providers: [ + StruttureApiClient, + AuthApiClient, + AccountsApiClient, + StipulatoriApiClient, + RolesApiClient, + NomenclatoreApiClient, + LuoghiApiClient, + StrutturePubblicheApiClient, + ApiConfiguration, + ], +}) +export class ApiModule { + static forRoot( + params: ApiConfigurationParams, + ): ModuleWithProviders { + return { + ngModule: ApiModule, + providers: [ + { + provide: ApiConfiguration, + useValue: params, + }, + ], + }; + } + + constructor( + @Optional() @SkipSelf() parentModule: ApiModule, + @Optional() http: HttpClient, + ) { + if (parentModule) { + throw new Error( + 'ApiModule is already loaded. Import in your base AppModule only.', + ); + } + if (!http) { + throw new Error( + 'You need to import the HttpClientModule in your AppModule! \n' + + 'See also https://github.com/angular/angular/issues/20575', + ); + } + } +} diff --git a/src/api/base-service.ts b/src/api/base-service.ts new file mode 100644 index 0000000..59b3cfe --- /dev/null +++ b/src/api/base-service.ts @@ -0,0 +1,35 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { ApiConfiguration } from './api-configuration'; + +/** + * Base class for services + */ +@Injectable() +export class BaseService { + constructor( + protected config: ApiConfiguration, + protected http: HttpClient, + ) {} + + private _rootUrl?: string; + + /** + * Returns the root url for all operations in this service. If not set directly in this + * service, will fallback to `ApiConfiguration.rootUrl`. + */ + get rootUrl(): string { + return this._rootUrl || this.config.rootUrl; + } + + /** + * Sets the root URL for API operations in this service. + */ + set rootUrl(rootUrl: string) { + this._rootUrl = rootUrl; + } +} diff --git a/src/api/fn/accounts/accounts-controller-create-account.ts b/src/api/fn/accounts/accounts-controller-create-account.ts new file mode 100644 index 0000000..dabce5d --- /dev/null +++ b/src/api/fn/accounts/accounts-controller-create-account.ts @@ -0,0 +1,45 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { CreateAccountDto } from '../../models/create-account-dto'; +import { FindAccountResDto } from '../../models/find-account-res-dto'; + +export interface AccountsControllerCreateAccount$Params { + body: CreateAccountDto; +} + +export function accountsControllerCreateAccount( + http: HttpClient, + rootUrl: string, + params: AccountsControllerCreateAccount$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + accountsControllerCreateAccount.PATH, + 'post', + ); + if (params) { + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +accountsControllerCreateAccount.PATH = '/admin/accounts'; diff --git a/src/api/fn/accounts/accounts-controller-delete-account.ts b/src/api/fn/accounts/accounts-controller-delete-account.ts new file mode 100644 index 0000000..8b9b281 --- /dev/null +++ b/src/api/fn/accounts/accounts-controller-delete-account.ts @@ -0,0 +1,44 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { GenericMessageDto } from '../../models/generic-message-dto'; + +export interface AccountsControllerDeleteAccount$Params { + id: number; +} + +export function accountsControllerDeleteAccount( + http: HttpClient, + rootUrl: string, + params: AccountsControllerDeleteAccount$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + accountsControllerDeleteAccount.PATH, + 'delete', + ); + if (params) { + rb.path('id', params.id, {}); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +accountsControllerDeleteAccount.PATH = '/admin/accounts/id/{id}'; diff --git a/src/api/fn/accounts/accounts-controller-edit-account-stipulatori.ts b/src/api/fn/accounts/accounts-controller-edit-account-stipulatori.ts new file mode 100644 index 0000000..ef83925 --- /dev/null +++ b/src/api/fn/accounts/accounts-controller-edit-account-stipulatori.ts @@ -0,0 +1,48 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { EditAccountStipulatoriDto } from '../../models/edit-account-stipulatori-dto'; +import { FindAccountStipulatoriResDto } from '../../models/find-account-stipulatori-res-dto'; + +export interface AccountsControllerEditAccountStipulatori$Params { + id: number; + body: EditAccountStipulatoriDto; +} + +export function accountsControllerEditAccountStipulatori( + http: HttpClient, + rootUrl: string, + params: AccountsControllerEditAccountStipulatori$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + accountsControllerEditAccountStipulatori.PATH, + 'patch', + ); + if (params) { + rb.path('id', params.id, {}); + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +accountsControllerEditAccountStipulatori.PATH = + '/admin/accounts/id/{id}/stipulatori'; diff --git a/src/api/fn/accounts/accounts-controller-edit-account.ts b/src/api/fn/accounts/accounts-controller-edit-account.ts new file mode 100644 index 0000000..9cfaec9 --- /dev/null +++ b/src/api/fn/accounts/accounts-controller-edit-account.ts @@ -0,0 +1,47 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { EditAccountDto } from '../../models/edit-account-dto'; +import { FindAccountResDto } from '../../models/find-account-res-dto'; + +export interface AccountsControllerEditAccount$Params { + id: number; + body: EditAccountDto; +} + +export function accountsControllerEditAccount( + http: HttpClient, + rootUrl: string, + params: AccountsControllerEditAccount$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + accountsControllerEditAccount.PATH, + 'patch', + ); + if (params) { + rb.path('id', params.id, {}); + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +accountsControllerEditAccount.PATH = '/admin/accounts/id/{id}'; diff --git a/src/api/fn/accounts/accounts-controller-edit-anagrafica-personale.ts b/src/api/fn/accounts/accounts-controller-edit-anagrafica-personale.ts new file mode 100644 index 0000000..3e0cb05 --- /dev/null +++ b/src/api/fn/accounts/accounts-controller-edit-anagrafica-personale.ts @@ -0,0 +1,46 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { EditAnagraficaPersonaleDto } from '../../models/edit-anagrafica-personale-dto'; +import { GenericMessageDto } from '../../models/generic-message-dto'; + +export interface AccountsControllerEditAnagraficaPersonale$Params { + body: EditAnagraficaPersonaleDto; +} + +export function accountsControllerEditAnagraficaPersonale( + http: HttpClient, + rootUrl: string, + params: AccountsControllerEditAnagraficaPersonale$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + accountsControllerEditAnagraficaPersonale.PATH, + 'post', + ); + if (params) { + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +accountsControllerEditAnagraficaPersonale.PATH = + '/admin/accounts/edit-anagrafica'; diff --git a/src/api/fn/accounts/accounts-controller-edit-password-personale.ts b/src/api/fn/accounts/accounts-controller-edit-password-personale.ts new file mode 100644 index 0000000..6877ee9 --- /dev/null +++ b/src/api/fn/accounts/accounts-controller-edit-password-personale.ts @@ -0,0 +1,45 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { EditPasswordPersonaleDto } from '../../models/edit-password-personale-dto'; +import { GenericMessageDto } from '../../models/generic-message-dto'; + +export interface AccountsControllerEditPasswordPersonale$Params { + body: EditPasswordPersonaleDto; +} + +export function accountsControllerEditPasswordPersonale( + http: HttpClient, + rootUrl: string, + params: AccountsControllerEditPasswordPersonale$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + accountsControllerEditPasswordPersonale.PATH, + 'post', + ); + if (params) { + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +accountsControllerEditPasswordPersonale.PATH = '/admin/accounts/edit-password'; diff --git a/src/api/fn/accounts/accounts-controller-fetch-account-status.ts b/src/api/fn/accounts/accounts-controller-fetch-account-status.ts new file mode 100644 index 0000000..138ab43 --- /dev/null +++ b/src/api/fn/accounts/accounts-controller-fetch-account-status.ts @@ -0,0 +1,41 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { FindAccountStatusResDto } from '../../models/find-account-status-res-dto'; + +export interface AccountsControllerFetchAccountStatus$Params {} + +export function accountsControllerFetchAccountStatus( + http: HttpClient, + rootUrl: string, + params?: AccountsControllerFetchAccountStatus$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + accountsControllerFetchAccountStatus.PATH, + 'get', + ); + if (params) { + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +accountsControllerFetchAccountStatus.PATH = '/admin/accounts/status'; diff --git a/src/api/fn/accounts/accounts-controller-fetch-account.ts b/src/api/fn/accounts/accounts-controller-fetch-account.ts new file mode 100644 index 0000000..dcd9fc1 --- /dev/null +++ b/src/api/fn/accounts/accounts-controller-fetch-account.ts @@ -0,0 +1,44 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { FindAccountResDto } from '../../models/find-account-res-dto'; + +export interface AccountsControllerFetchAccount$Params { + id: number; +} + +export function accountsControllerFetchAccount( + http: HttpClient, + rootUrl: string, + params: AccountsControllerFetchAccount$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + accountsControllerFetchAccount.PATH, + 'get', + ); + if (params) { + rb.path('id', params.id, {}); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +accountsControllerFetchAccount.PATH = '/admin/accounts/id/{id}'; diff --git a/src/api/fn/accounts/accounts-controller-fetch-accounts.ts b/src/api/fn/accounts/accounts-controller-fetch-accounts.ts new file mode 100644 index 0000000..9d676d2 --- /dev/null +++ b/src/api/fn/accounts/accounts-controller-fetch-accounts.ts @@ -0,0 +1,45 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { FindAccountsResDto } from '../../models/find-accounts-res-dto'; +import { LazyLoadEventDto } from '../../models/lazy-load-event-dto'; + +export interface AccountsControllerFetchAccounts$Params { + body: LazyLoadEventDto; +} + +export function accountsControllerFetchAccounts( + http: HttpClient, + rootUrl: string, + params: AccountsControllerFetchAccounts$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + accountsControllerFetchAccounts.PATH, + 'post', + ); + if (params) { + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +accountsControllerFetchAccounts.PATH = '/admin/accounts/list'; diff --git a/src/api/fn/accounts/accounts-controller-get-account-stipulatori.ts b/src/api/fn/accounts/accounts-controller-get-account-stipulatori.ts new file mode 100644 index 0000000..69c85f8 --- /dev/null +++ b/src/api/fn/accounts/accounts-controller-get-account-stipulatori.ts @@ -0,0 +1,45 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { Stipulatore } from '../../models/stipulatore'; + +export interface AccountsControllerGetAccountStipulatori$Params { + id: number; +} + +export function accountsControllerGetAccountStipulatori( + http: HttpClient, + rootUrl: string, + params: AccountsControllerGetAccountStipulatori$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + accountsControllerGetAccountStipulatori.PATH, + 'get', + ); + if (params) { + rb.path('id', params.id, {}); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +accountsControllerGetAccountStipulatori.PATH = + '/admin/accounts/id/{id}/stipulatori'; diff --git a/src/api/fn/accounts/accounts-controller-send-activation-link.ts b/src/api/fn/accounts/accounts-controller-send-activation-link.ts new file mode 100644 index 0000000..dbee3a2 --- /dev/null +++ b/src/api/fn/accounts/accounts-controller-send-activation-link.ts @@ -0,0 +1,45 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { GenericMessageDto } from '../../models/generic-message-dto'; + +export interface AccountsControllerSendActivationLink$Params { + id: number; +} + +export function accountsControllerSendActivationLink( + http: HttpClient, + rootUrl: string, + params: AccountsControllerSendActivationLink$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + accountsControllerSendActivationLink.PATH, + 'get', + ); + if (params) { + rb.path('id', params.id, {}); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +accountsControllerSendActivationLink.PATH = + '/admin/accounts/send-activation-mail/{id}'; diff --git a/src/api/fn/auth/auth-controller-link-verification.ts b/src/api/fn/auth/auth-controller-link-verification.ts new file mode 100644 index 0000000..bb51b31 --- /dev/null +++ b/src/api/fn/auth/auth-controller-link-verification.ts @@ -0,0 +1,45 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { GenericMessageDto } from '../../models/generic-message-dto'; +import { LinkVerificationDto } from '../../models/link-verification-dto'; + +export interface AuthControllerLinkVerification$Params { + body: LinkVerificationDto; +} + +export function authControllerLinkVerification( + http: HttpClient, + rootUrl: string, + params: AuthControllerLinkVerification$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + authControllerLinkVerification.PATH, + 'post', + ); + if (params) { + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +authControllerLinkVerification.PATH = '/auth/link-verification'; diff --git a/src/api/fn/auth/auth-controller-login.ts b/src/api/fn/auth/auth-controller-login.ts new file mode 100644 index 0000000..c89fe2c --- /dev/null +++ b/src/api/fn/auth/auth-controller-login.ts @@ -0,0 +1,41 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { AccountDto } from '../../models/account-dto'; +import { AccountResDto } from '../../models/account-res-dto'; + +export interface AuthControllerLogin$Params { + body: AccountDto; +} + +export function authControllerLogin( + http: HttpClient, + rootUrl: string, + params: AuthControllerLogin$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder(rootUrl, authControllerLogin.PATH, 'post'); + if (params) { + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +authControllerLogin.PATH = '/auth/login'; diff --git a/src/api/fn/auth/auth-controller-me.ts b/src/api/fn/auth/auth-controller-me.ts new file mode 100644 index 0000000..bad6f07 --- /dev/null +++ b/src/api/fn/auth/auth-controller-me.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { AccountResDto } from '../../models/account-res-dto'; + +export interface AuthControllerMe$Params {} + +export function authControllerMe( + http: HttpClient, + rootUrl: string, + params?: AuthControllerMe$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder(rootUrl, authControllerMe.PATH, 'get'); + if (params) { + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +authControllerMe.PATH = '/auth/me'; diff --git a/src/api/fn/auth/auth-controller-recovery-password.ts b/src/api/fn/auth/auth-controller-recovery-password.ts new file mode 100644 index 0000000..f38f272 --- /dev/null +++ b/src/api/fn/auth/auth-controller-recovery-password.ts @@ -0,0 +1,45 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { GenericMessageDto } from '../../models/generic-message-dto'; +import { RecoveryDto } from '../../models/recovery-dto'; + +export interface AuthControllerRecoveryPassword$Params { + body: RecoveryDto; +} + +export function authControllerRecoveryPassword( + http: HttpClient, + rootUrl: string, + params: AuthControllerRecoveryPassword$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + authControllerRecoveryPassword.PATH, + 'post', + ); + if (params) { + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +authControllerRecoveryPassword.PATH = '/auth/recovery-password'; diff --git a/src/api/fn/auth/auth-controller-set-password.ts b/src/api/fn/auth/auth-controller-set-password.ts new file mode 100644 index 0000000..ba3378c --- /dev/null +++ b/src/api/fn/auth/auth-controller-set-password.ts @@ -0,0 +1,45 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { EditPasswordDto } from '../../models/edit-password-dto'; +import { GenericMessageDto } from '../../models/generic-message-dto'; + +export interface AuthControllerSetPassword$Params { + body: EditPasswordDto; +} + +export function authControllerSetPassword( + http: HttpClient, + rootUrl: string, + params: AuthControllerSetPassword$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + authControllerSetPassword.PATH, + 'post', + ); + if (params) { + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +authControllerSetPassword.PATH = '/auth/set-password'; diff --git a/src/api/fn/luoghi/luoghi-controller-find-luogo-by-autocomplete.ts b/src/api/fn/luoghi/luoghi-controller-find-luogo-by-autocomplete.ts new file mode 100644 index 0000000..4ba3fbf --- /dev/null +++ b/src/api/fn/luoghi/luoghi-controller-find-luogo-by-autocomplete.ts @@ -0,0 +1,59 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { LuogoRes } from '../../models/luogo-res'; + +export interface LuoghiControllerFindLuogoByAutocomplete$Params { + /** + * Search query for places, must be at least 3 characters long + */ + q: string; + + /** + * Filter by active status (0 = inactive, 1 = active) + */ + flagAttivo?: number; + + /** + * Filter stati esteri (0 = inactive, 1 = active) + */ + statiEsteri?: number; +} + +export function luoghiControllerFindLuogoByAutocomplete( + http: HttpClient, + rootUrl: string, + params: LuoghiControllerFindLuogoByAutocomplete$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + luoghiControllerFindLuogoByAutocomplete.PATH, + 'get', + ); + if (params) { + rb.query('q', params.q, {}); + rb.query('flagAttivo', params.flagAttivo, {}); + rb.query('statiEsteri', params.statiEsteri, {}); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +luoghiControllerFindLuogoByAutocomplete.PATH = '/public/luoghi/cerca'; diff --git a/src/api/fn/luoghi/luoghi-controller-find-luogo-esteso.ts b/src/api/fn/luoghi/luoghi-controller-find-luogo-esteso.ts new file mode 100644 index 0000000..b999db8 --- /dev/null +++ b/src/api/fn/luoghi/luoghi-controller-find-luogo-esteso.ts @@ -0,0 +1,53 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { LuogoRes } from '../../models/luogo-res'; + +export interface LuoghiControllerFindLuogoEsteso$Params { + /** + * Search query for places, must be at least 3 characters long + */ + q: string; + + /** + * Filter by active status (0 = inactive, 1 = active) + */ + flagAttivo?: number; +} + +export function luoghiControllerFindLuogoEsteso( + http: HttpClient, + rootUrl: string, + params: LuoghiControllerFindLuogoEsteso$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + luoghiControllerFindLuogoEsteso.PATH, + 'get', + ); + if (params) { + rb.query('q', params.q, {}); + rb.query('flagAttivo', params.flagAttivo, {}); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +luoghiControllerFindLuogoEsteso.PATH = '/public/luoghi/cerca-esteso'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-create-nomenclatore-livello-1.ts b/src/api/fn/nomenclatore/nomenclatore-controller-create-nomenclatore-livello-1.ts new file mode 100644 index 0000000..9cab53e --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-create-nomenclatore-livello-1.ts @@ -0,0 +1,46 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { CreateNomenclatoreLivello1 } from '../../models/create-nomenclatore-livello-1'; +import { NomenclatoreLivello1ResDto } from '../../models/nomenclatore-livello-1-res-dto'; + +export interface NomenclatoreControllerCreateNomenclatoreLivello1$Params { + body: CreateNomenclatoreLivello1; +} + +export function nomenclatoreControllerCreateNomenclatoreLivello1( + http: HttpClient, + rootUrl: string, + params: NomenclatoreControllerCreateNomenclatoreLivello1$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerCreateNomenclatoreLivello1.PATH, + 'post', + ); + if (params) { + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +nomenclatoreControllerCreateNomenclatoreLivello1.PATH = + '/nomenclatore/livello-1'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-create-nomenclatore-livello-2.ts b/src/api/fn/nomenclatore/nomenclatore-controller-create-nomenclatore-livello-2.ts new file mode 100644 index 0000000..a651d55 --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-create-nomenclatore-livello-2.ts @@ -0,0 +1,46 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { CreateNomenclatoreLivello2 } from '../../models/create-nomenclatore-livello-2'; +import { NomenclatoreLivello2ResDto } from '../../models/nomenclatore-livello-2-res-dto'; + +export interface NomenclatoreControllerCreateNomenclatoreLivello2$Params { + body: CreateNomenclatoreLivello2; +} + +export function nomenclatoreControllerCreateNomenclatoreLivello2( + http: HttpClient, + rootUrl: string, + params: NomenclatoreControllerCreateNomenclatoreLivello2$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerCreateNomenclatoreLivello2.PATH, + 'post', + ); + if (params) { + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +nomenclatoreControllerCreateNomenclatoreLivello2.PATH = + '/nomenclatore/livello-2'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-create-nomenclatore-livello-3.ts b/src/api/fn/nomenclatore/nomenclatore-controller-create-nomenclatore-livello-3.ts new file mode 100644 index 0000000..4df5041 --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-create-nomenclatore-livello-3.ts @@ -0,0 +1,46 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { CreateNomenclatoreLivello3 } from '../../models/create-nomenclatore-livello-3'; +import { NomenclatoreLivello3ResDto } from '../../models/nomenclatore-livello-3-res-dto'; + +export interface NomenclatoreControllerCreateNomenclatoreLivello3$Params { + body: CreateNomenclatoreLivello3; +} + +export function nomenclatoreControllerCreateNomenclatoreLivello3( + http: HttpClient, + rootUrl: string, + params: NomenclatoreControllerCreateNomenclatoreLivello3$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerCreateNomenclatoreLivello3.PATH, + 'post', + ); + if (params) { + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +nomenclatoreControllerCreateNomenclatoreLivello3.PATH = + '/nomenclatore/livello-3'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-create-nomenclatore-livello-4.ts b/src/api/fn/nomenclatore/nomenclatore-controller-create-nomenclatore-livello-4.ts new file mode 100644 index 0000000..c8f73b4 --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-create-nomenclatore-livello-4.ts @@ -0,0 +1,46 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { CreateNomenclatoreLivello4 } from '../../models/create-nomenclatore-livello-4'; +import { NomenclatoreLivello4ResDto } from '../../models/nomenclatore-livello-4-res-dto'; + +export interface NomenclatoreControllerCreateNomenclatoreLivello4$Params { + body: CreateNomenclatoreLivello4; +} + +export function nomenclatoreControllerCreateNomenclatoreLivello4( + http: HttpClient, + rootUrl: string, + params: NomenclatoreControllerCreateNomenclatoreLivello4$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerCreateNomenclatoreLivello4.PATH, + 'post', + ); + if (params) { + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +nomenclatoreControllerCreateNomenclatoreLivello4.PATH = + '/nomenclatore/livello-4'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-create-nomenclatore.ts b/src/api/fn/nomenclatore/nomenclatore-controller-create-nomenclatore.ts new file mode 100644 index 0000000..d0426bf --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-create-nomenclatore.ts @@ -0,0 +1,45 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { CreateNomenclatore } from '../../models/create-nomenclatore'; +import { NomenclatoreRes } from '../../models/nomenclatore-res'; + +export interface NomenclatoreControllerCreateNomenclatore$Params { + body: CreateNomenclatore; +} + +export function nomenclatoreControllerCreateNomenclatore( + http: HttpClient, + rootUrl: string, + params: NomenclatoreControllerCreateNomenclatore$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerCreateNomenclatore.PATH, + 'post', + ); + if (params) { + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +nomenclatoreControllerCreateNomenclatore.PATH = '/nomenclatore'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-export-nomenclatore.ts b/src/api/fn/nomenclatore/nomenclatore-controller-export-nomenclatore.ts new file mode 100644 index 0000000..13ff729 --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-export-nomenclatore.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +export interface NomenclatoreControllerExportNomenclatore$Params {} + +export function nomenclatoreControllerExportNomenclatore( + http: HttpClient, + rootUrl: string, + params?: NomenclatoreControllerExportNomenclatore$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerExportNomenclatore.PATH, + 'get', + ); + if (params) { + } + + return http + .request( + rb.build({ + responseType: 'blob', + accept: 'application/octet-stream', + context, + }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +nomenclatoreControllerExportNomenclatore.PATH = '/nomenclatore/export'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-find-many-categorie-prestazione.ts b/src/api/fn/nomenclatore/nomenclatore-controller-find-many-categorie-prestazione.ts new file mode 100644 index 0000000..c779973 --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-find-many-categorie-prestazione.ts @@ -0,0 +1,42 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { CategoriaPrestazioneResDto } from '../../models/categoria-prestazione-res-dto'; + +export interface NomenclatoreControllerFindManyCategoriePrestazione$Params {} + +export function nomenclatoreControllerFindManyCategoriePrestazione( + http: HttpClient, + rootUrl: string, + params?: NomenclatoreControllerFindManyCategoriePrestazione$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerFindManyCategoriePrestazione.PATH, + 'get', + ); + if (params) { + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +nomenclatoreControllerFindManyCategoriePrestazione.PATH = + '/nomenclatore/categorie-prestazione'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-find-many-elementi.ts b/src/api/fn/nomenclatore/nomenclatore-controller-find-many-elementi.ts new file mode 100644 index 0000000..18483a0 --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-find-many-elementi.ts @@ -0,0 +1,41 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { ElementiResDto } from '../../models/elementi-res-dto'; + +export interface NomenclatoreControllerFindManyElementi$Params {} + +export function nomenclatoreControllerFindManyElementi( + http: HttpClient, + rootUrl: string, + params?: NomenclatoreControllerFindManyElementi$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerFindManyElementi.PATH, + 'get', + ); + if (params) { + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +nomenclatoreControllerFindManyElementi.PATH = '/nomenclatore/elementi'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-find-many-livello-1-nomenclatore.ts b/src/api/fn/nomenclatore/nomenclatore-controller-find-many-livello-1-nomenclatore.ts new file mode 100644 index 0000000..e441a79 --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-find-many-livello-1-nomenclatore.ts @@ -0,0 +1,42 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { NomenclatoreLivello1ResDto } from '../../models/nomenclatore-livello-1-res-dto'; + +export interface NomenclatoreControllerFindManyLivello1Nomenclatore$Params {} + +export function nomenclatoreControllerFindManyLivello1Nomenclatore( + http: HttpClient, + rootUrl: string, + params?: NomenclatoreControllerFindManyLivello1Nomenclatore$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerFindManyLivello1Nomenclatore.PATH, + 'get', + ); + if (params) { + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +nomenclatoreControllerFindManyLivello1Nomenclatore.PATH = + '/nomenclatore/livello-1'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-find-many-livello-2-nomenclatore.ts b/src/api/fn/nomenclatore/nomenclatore-controller-find-many-livello-2-nomenclatore.ts new file mode 100644 index 0000000..465529b --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-find-many-livello-2-nomenclatore.ts @@ -0,0 +1,42 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { NomenclatoreLivello2ResDto } from '../../models/nomenclatore-livello-2-res-dto'; + +export interface NomenclatoreControllerFindManyLivello2Nomenclatore$Params {} + +export function nomenclatoreControllerFindManyLivello2Nomenclatore( + http: HttpClient, + rootUrl: string, + params?: NomenclatoreControllerFindManyLivello2Nomenclatore$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerFindManyLivello2Nomenclatore.PATH, + 'get', + ); + if (params) { + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +nomenclatoreControllerFindManyLivello2Nomenclatore.PATH = + '/nomenclatore/livello-2'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-find-many-livello-3-nomenclatore.ts b/src/api/fn/nomenclatore/nomenclatore-controller-find-many-livello-3-nomenclatore.ts new file mode 100644 index 0000000..94f0650 --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-find-many-livello-3-nomenclatore.ts @@ -0,0 +1,42 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { NomenclatoreLivello3ResDto } from '../../models/nomenclatore-livello-3-res-dto'; + +export interface NomenclatoreControllerFindManyLivello3Nomenclatore$Params {} + +export function nomenclatoreControllerFindManyLivello3Nomenclatore( + http: HttpClient, + rootUrl: string, + params?: NomenclatoreControllerFindManyLivello3Nomenclatore$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerFindManyLivello3Nomenclatore.PATH, + 'get', + ); + if (params) { + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +nomenclatoreControllerFindManyLivello3Nomenclatore.PATH = + '/nomenclatore/livello-3'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-find-many-livello-4-nomenclatore.ts b/src/api/fn/nomenclatore/nomenclatore-controller-find-many-livello-4-nomenclatore.ts new file mode 100644 index 0000000..251944a --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-find-many-livello-4-nomenclatore.ts @@ -0,0 +1,42 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { NomenclatoreLivello4ResDto } from '../../models/nomenclatore-livello-4-res-dto'; + +export interface NomenclatoreControllerFindManyLivello4Nomenclatore$Params {} + +export function nomenclatoreControllerFindManyLivello4Nomenclatore( + http: HttpClient, + rootUrl: string, + params?: NomenclatoreControllerFindManyLivello4Nomenclatore$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerFindManyLivello4Nomenclatore.PATH, + 'get', + ); + if (params) { + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +nomenclatoreControllerFindManyLivello4Nomenclatore.PATH = + '/nomenclatore/livello-4'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-find-many-nomenclatore.ts b/src/api/fn/nomenclatore/nomenclatore-controller-find-many-nomenclatore.ts new file mode 100644 index 0000000..600a7eb --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-find-many-nomenclatore.ts @@ -0,0 +1,41 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { NomenclatoreExcerptRes } from '../../models/nomenclatore-excerpt-res'; + +export interface NomenclatoreControllerFindManyNomenclatore$Params {} + +export function nomenclatoreControllerFindManyNomenclatore( + http: HttpClient, + rootUrl: string, + params?: NomenclatoreControllerFindManyNomenclatore$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerFindManyNomenclatore.PATH, + 'get', + ); + if (params) { + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +nomenclatoreControllerFindManyNomenclatore.PATH = '/nomenclatore'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-find-many-tipi-prestazione.ts b/src/api/fn/nomenclatore/nomenclatore-controller-find-many-tipi-prestazione.ts new file mode 100644 index 0000000..333e2ff --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-find-many-tipi-prestazione.ts @@ -0,0 +1,42 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { TipoPrestazioneResDto } from '../../models/tipo-prestazione-res-dto'; + +export interface NomenclatoreControllerFindManyTipiPrestazione$Params {} + +export function nomenclatoreControllerFindManyTipiPrestazione( + http: HttpClient, + rootUrl: string, + params?: NomenclatoreControllerFindManyTipiPrestazione$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerFindManyTipiPrestazione.PATH, + 'get', + ); + if (params) { + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +nomenclatoreControllerFindManyTipiPrestazione.PATH = + '/nomenclatore/tipi-prestazione'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-find-many-tipi-struttura.ts b/src/api/fn/nomenclatore/nomenclatore-controller-find-many-tipi-struttura.ts new file mode 100644 index 0000000..b0fbc12 --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-find-many-tipi-struttura.ts @@ -0,0 +1,42 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { TipoStrutturaResDto } from '../../models/tipo-struttura-res-dto'; + +export interface NomenclatoreControllerFindManyTipiStruttura$Params {} + +export function nomenclatoreControllerFindManyTipiStruttura( + http: HttpClient, + rootUrl: string, + params?: NomenclatoreControllerFindManyTipiStruttura$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerFindManyTipiStruttura.PATH, + 'get', + ); + if (params) { + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +nomenclatoreControllerFindManyTipiStruttura.PATH = + '/nomenclatore/tipi-struttura'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-find-many-unita-di-misura.ts b/src/api/fn/nomenclatore/nomenclatore-controller-find-many-unita-di-misura.ts new file mode 100644 index 0000000..53a2a33 --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-find-many-unita-di-misura.ts @@ -0,0 +1,42 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { UnitaDiMisuraResDto } from '../../models/unita-di-misura-res-dto'; + +export interface NomenclatoreControllerFindManyUnitaDiMisura$Params {} + +export function nomenclatoreControllerFindManyUnitaDiMisura( + http: HttpClient, + rootUrl: string, + params?: NomenclatoreControllerFindManyUnitaDiMisura$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerFindManyUnitaDiMisura.PATH, + 'get', + ); + if (params) { + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +nomenclatoreControllerFindManyUnitaDiMisura.PATH = + '/nomenclatore/unita-di-misura'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-get-one-nomenclatore-by-id.ts b/src/api/fn/nomenclatore/nomenclatore-controller-get-one-nomenclatore-by-id.ts new file mode 100644 index 0000000..f69a44d --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-get-one-nomenclatore-by-id.ts @@ -0,0 +1,44 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { NomenclatoreRes } from '../../models/nomenclatore-res'; + +export interface NomenclatoreControllerGetOneNomenclatoreById$Params { + id: number; +} + +export function nomenclatoreControllerGetOneNomenclatoreById( + http: HttpClient, + rootUrl: string, + params: NomenclatoreControllerGetOneNomenclatoreById$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerGetOneNomenclatoreById.PATH, + 'get', + ); + if (params) { + rb.path('id', params.id, {}); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +nomenclatoreControllerGetOneNomenclatoreById.PATH = '/nomenclatore/id/{id}'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-update-nomenclatore-livello-1.ts b/src/api/fn/nomenclatore/nomenclatore-controller-update-nomenclatore-livello-1.ts new file mode 100644 index 0000000..bcf51d2 --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-update-nomenclatore-livello-1.ts @@ -0,0 +1,48 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { NomenclatoreLivello1ResDto } from '../../models/nomenclatore-livello-1-res-dto'; +import { UpdateNomenclatoreLivello1 } from '../../models/update-nomenclatore-livello-1'; + +export interface NomenclatoreControllerUpdateNomenclatoreLivello1$Params { + id: number; + body: UpdateNomenclatoreLivello1; +} + +export function nomenclatoreControllerUpdateNomenclatoreLivello1( + http: HttpClient, + rootUrl: string, + params: NomenclatoreControllerUpdateNomenclatoreLivello1$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerUpdateNomenclatoreLivello1.PATH, + 'patch', + ); + if (params) { + rb.path('id', params.id, {}); + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +nomenclatoreControllerUpdateNomenclatoreLivello1.PATH = + '/nomenclatore/livello-1/id/{id}'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-update-nomenclatore-livello-2.ts b/src/api/fn/nomenclatore/nomenclatore-controller-update-nomenclatore-livello-2.ts new file mode 100644 index 0000000..1870030 --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-update-nomenclatore-livello-2.ts @@ -0,0 +1,48 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { NomenclatoreLivello2ResDto } from '../../models/nomenclatore-livello-2-res-dto'; +import { UpdateNomenclatoreLivello2 } from '../../models/update-nomenclatore-livello-2'; + +export interface NomenclatoreControllerUpdateNomenclatoreLivello2$Params { + id: number; + body: UpdateNomenclatoreLivello2; +} + +export function nomenclatoreControllerUpdateNomenclatoreLivello2( + http: HttpClient, + rootUrl: string, + params: NomenclatoreControllerUpdateNomenclatoreLivello2$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerUpdateNomenclatoreLivello2.PATH, + 'patch', + ); + if (params) { + rb.path('id', params.id, {}); + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +nomenclatoreControllerUpdateNomenclatoreLivello2.PATH = + '/nomenclatore/livello-2/id/{id}'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-update-nomenclatore-livello-3.ts b/src/api/fn/nomenclatore/nomenclatore-controller-update-nomenclatore-livello-3.ts new file mode 100644 index 0000000..e74b5cd --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-update-nomenclatore-livello-3.ts @@ -0,0 +1,48 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { NomenclatoreLivello3ResDto } from '../../models/nomenclatore-livello-3-res-dto'; +import { UpdateNomenclatoreLivello3 } from '../../models/update-nomenclatore-livello-3'; + +export interface NomenclatoreControllerUpdateNomenclatoreLivello3$Params { + id: number; + body: UpdateNomenclatoreLivello3; +} + +export function nomenclatoreControllerUpdateNomenclatoreLivello3( + http: HttpClient, + rootUrl: string, + params: NomenclatoreControllerUpdateNomenclatoreLivello3$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerUpdateNomenclatoreLivello3.PATH, + 'patch', + ); + if (params) { + rb.path('id', params.id, {}); + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +nomenclatoreControllerUpdateNomenclatoreLivello3.PATH = + '/nomenclatore/livello-3/id/{id}'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-update-nomenclatore-livello-4.ts b/src/api/fn/nomenclatore/nomenclatore-controller-update-nomenclatore-livello-4.ts new file mode 100644 index 0000000..8851859 --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-update-nomenclatore-livello-4.ts @@ -0,0 +1,48 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { NomenclatoreLivello4ResDto } from '../../models/nomenclatore-livello-4-res-dto'; +import { UpdateNomenclatoreLivello4 } from '../../models/update-nomenclatore-livello-4'; + +export interface NomenclatoreControllerUpdateNomenclatoreLivello4$Params { + id: number; + body: UpdateNomenclatoreLivello4; +} + +export function nomenclatoreControllerUpdateNomenclatoreLivello4( + http: HttpClient, + rootUrl: string, + params: NomenclatoreControllerUpdateNomenclatoreLivello4$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerUpdateNomenclatoreLivello4.PATH, + 'patch', + ); + if (params) { + rb.path('id', params.id, {}); + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +nomenclatoreControllerUpdateNomenclatoreLivello4.PATH = + '/nomenclatore/livello-4/id/{id}'; diff --git a/src/api/fn/nomenclatore/nomenclatore-controller-update-nomenclatore.ts b/src/api/fn/nomenclatore/nomenclatore-controller-update-nomenclatore.ts new file mode 100644 index 0000000..45f3b53 --- /dev/null +++ b/src/api/fn/nomenclatore/nomenclatore-controller-update-nomenclatore.ts @@ -0,0 +1,47 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { NomenclatoreRes } from '../../models/nomenclatore-res'; +import { UpdateNomenclatore } from '../../models/update-nomenclatore'; + +export interface NomenclatoreControllerUpdateNomenclatore$Params { + id: number; + body: UpdateNomenclatore; +} + +export function nomenclatoreControllerUpdateNomenclatore( + http: HttpClient, + rootUrl: string, + params: NomenclatoreControllerUpdateNomenclatore$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + nomenclatoreControllerUpdateNomenclatore.PATH, + 'patch', + ); + if (params) { + rb.path('id', params.id, {}); + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +nomenclatoreControllerUpdateNomenclatore.PATH = '/nomenclatore/id/{id}'; diff --git a/src/api/fn/ping/app-controller-get-hello.ts b/src/api/fn/ping/app-controller-get-hello.ts new file mode 100644 index 0000000..34cebeb --- /dev/null +++ b/src/api/fn/ping/app-controller-get-hello.ts @@ -0,0 +1,35 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +export interface AppControllerGetHello$Params {} + +export function appControllerGetHello( + http: HttpClient, + rootUrl: string, + params?: AppControllerGetHello$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder(rootUrl, appControllerGetHello.PATH, 'get'); + if (params) { + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +appControllerGetHello.PATH = '/'; diff --git a/src/api/fn/roles/roles-controller-delete-role-privilege.ts b/src/api/fn/roles/roles-controller-delete-role-privilege.ts new file mode 100644 index 0000000..4a15a9f --- /dev/null +++ b/src/api/fn/roles/roles-controller-delete-role-privilege.ts @@ -0,0 +1,44 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { FindPrivilegeResDto } from '../../models/find-privilege-res-dto'; + +export interface RolesControllerDeleteRolePrivilege$Params { + id: number; +} + +export function rolesControllerDeleteRolePrivilege( + http: HttpClient, + rootUrl: string, + params: RolesControllerDeleteRolePrivilege$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + rolesControllerDeleteRolePrivilege.PATH, + 'delete', + ); + if (params) { + rb.path('id', params.id, {}); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +rolesControllerDeleteRolePrivilege.PATH = '/admin/roles/privilege/id/{id}'; diff --git a/src/api/fn/roles/roles-controller-fetch-roles.ts b/src/api/fn/roles/roles-controller-fetch-roles.ts new file mode 100644 index 0000000..9090347 --- /dev/null +++ b/src/api/fn/roles/roles-controller-fetch-roles.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { FindRoleResDto } from '../../models/find-role-res-dto'; + +export interface RolesControllerFetchRoles$Params {} + +export function rolesControllerFetchRoles( + http: HttpClient, + rootUrl: string, + params?: RolesControllerFetchRoles$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder(rootUrl, rolesControllerFetchRoles.PATH, 'get'); + if (params) { + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +rolesControllerFetchRoles.PATH = '/admin/roles'; diff --git a/src/api/fn/roles/roles-controller-get-available-role-privileges.ts b/src/api/fn/roles/roles-controller-get-available-role-privileges.ts new file mode 100644 index 0000000..76c515f --- /dev/null +++ b/src/api/fn/roles/roles-controller-get-available-role-privileges.ts @@ -0,0 +1,45 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { FindActionResDto } from '../../models/find-action-res-dto'; + +export interface RolesControllerGetAvailableRolePrivileges$Params { + id: number; +} + +export function rolesControllerGetAvailableRolePrivileges( + http: HttpClient, + rootUrl: string, + params: RolesControllerGetAvailableRolePrivileges$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + rolesControllerGetAvailableRolePrivileges.PATH, + 'get', + ); + if (params) { + rb.path('id', params.id, {}); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +rolesControllerGetAvailableRolePrivileges.PATH = + '/admin/roles/id/{id}/privileges/available'; diff --git a/src/api/fn/roles/roles-controller-get-role-privileges.ts b/src/api/fn/roles/roles-controller-get-role-privileges.ts new file mode 100644 index 0000000..74a13e0 --- /dev/null +++ b/src/api/fn/roles/roles-controller-get-role-privileges.ts @@ -0,0 +1,44 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { FindPrivilegeResDto } from '../../models/find-privilege-res-dto'; + +export interface RolesControllerGetRolePrivileges$Params { + id: number; +} + +export function rolesControllerGetRolePrivileges( + http: HttpClient, + rootUrl: string, + params: RolesControllerGetRolePrivileges$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + rolesControllerGetRolePrivileges.PATH, + 'get', + ); + if (params) { + rb.path('id', params.id, {}); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +rolesControllerGetRolePrivileges.PATH = '/admin/roles/id/{id}/privileges'; diff --git a/src/api/fn/roles/roles-controller-set-privilege-flag-enabled.ts b/src/api/fn/roles/roles-controller-set-privilege-flag-enabled.ts new file mode 100644 index 0000000..f39fd23 --- /dev/null +++ b/src/api/fn/roles/roles-controller-set-privilege-flag-enabled.ts @@ -0,0 +1,48 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { EditPrivilegeFlagEnabledDto } from '../../models/edit-privilege-flag-enabled-dto'; +import { FindPrivilegeResDto } from '../../models/find-privilege-res-dto'; + +export interface RolesControllerSetPrivilegeFlagEnabled$Params { + id: number; + body: EditPrivilegeFlagEnabledDto; +} + +export function rolesControllerSetPrivilegeFlagEnabled( + http: HttpClient, + rootUrl: string, + params: RolesControllerSetPrivilegeFlagEnabled$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + rolesControllerSetPrivilegeFlagEnabled.PATH, + 'patch', + ); + if (params) { + rb.path('id', params.id, {}); + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +rolesControllerSetPrivilegeFlagEnabled.PATH = + '/admin/roles/privilege/id/{id}/flag-enabled'; diff --git a/src/api/fn/roles/roles-controller-set-privilege-flag-readonly.ts b/src/api/fn/roles/roles-controller-set-privilege-flag-readonly.ts new file mode 100644 index 0000000..b5d5ebd --- /dev/null +++ b/src/api/fn/roles/roles-controller-set-privilege-flag-readonly.ts @@ -0,0 +1,48 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { EditPrivilegeFlagReadonlyDto } from '../../models/edit-privilege-flag-readonly-dto'; +import { FindPrivilegeResDto } from '../../models/find-privilege-res-dto'; + +export interface RolesControllerSetPrivilegeFlagReadonly$Params { + id: number; + body: EditPrivilegeFlagReadonlyDto; +} + +export function rolesControllerSetPrivilegeFlagReadonly( + http: HttpClient, + rootUrl: string, + params: RolesControllerSetPrivilegeFlagReadonly$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + rolesControllerSetPrivilegeFlagReadonly.PATH, + 'patch', + ); + if (params) { + rb.path('id', params.id, {}); + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +rolesControllerSetPrivilegeFlagReadonly.PATH = + '/admin/roles/privilege/id/{id}/flag-readonly'; diff --git a/src/api/fn/roles/roles-controller-set-role-privileges.ts b/src/api/fn/roles/roles-controller-set-role-privileges.ts new file mode 100644 index 0000000..0394dd3 --- /dev/null +++ b/src/api/fn/roles/roles-controller-set-role-privileges.ts @@ -0,0 +1,47 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { CreateActionsDto } from '../../models/create-actions-dto'; +import { FindPrivilegeResDto } from '../../models/find-privilege-res-dto'; + +export interface RolesControllerSetRolePrivileges$Params { + id: number; + body: CreateActionsDto; +} + +export function rolesControllerSetRolePrivileges( + http: HttpClient, + rootUrl: string, + params: RolesControllerSetRolePrivileges$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + rolesControllerSetRolePrivileges.PATH, + 'post', + ); + if (params) { + rb.path('id', params.id, {}); + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +rolesControllerSetRolePrivileges.PATH = '/admin/roles/id/{id}/privileges'; diff --git a/src/api/fn/stipulatori/stipulatori-controller-find-many-stipulatori-by-account.ts b/src/api/fn/stipulatori/stipulatori-controller-find-many-stipulatori-by-account.ts new file mode 100644 index 0000000..b40b257 --- /dev/null +++ b/src/api/fn/stipulatori/stipulatori-controller-find-many-stipulatori-by-account.ts @@ -0,0 +1,42 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { Stipulatore } from '../../models/stipulatore'; + +export interface StipulatoriControllerFindManyStipulatoriByAccount$Params {} + +export function stipulatoriControllerFindManyStipulatoriByAccount( + http: HttpClient, + rootUrl: string, + params?: StipulatoriControllerFindManyStipulatoriByAccount$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + stipulatoriControllerFindManyStipulatoriByAccount.PATH, + 'get', + ); + if (params) { + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +stipulatoriControllerFindManyStipulatoriByAccount.PATH = + '/stipulatori/by-accounts'; diff --git a/src/api/fn/stipulatori/stipulatori-controller-find-many-stipulatori.ts b/src/api/fn/stipulatori/stipulatori-controller-find-many-stipulatori.ts new file mode 100644 index 0000000..ccc26c7 --- /dev/null +++ b/src/api/fn/stipulatori/stipulatori-controller-find-many-stipulatori.ts @@ -0,0 +1,41 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { Stipulatore } from '../../models/stipulatore'; + +export interface StipulatoriControllerFindManyStipulatori$Params {} + +export function stipulatoriControllerFindManyStipulatori( + http: HttpClient, + rootUrl: string, + params?: StipulatoriControllerFindManyStipulatori$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + stipulatoriControllerFindManyStipulatori.PATH, + 'get', + ); + if (params) { + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +stipulatoriControllerFindManyStipulatori.PATH = '/stipulatori'; diff --git a/src/api/fn/strutture-pubbliche/strutture-pubbliche-controller-find-many-strutture.ts b/src/api/fn/strutture-pubbliche/strutture-pubbliche-controller-find-many-strutture.ts new file mode 100644 index 0000000..7239320 --- /dev/null +++ b/src/api/fn/strutture-pubbliche/strutture-pubbliche-controller-find-many-strutture.ts @@ -0,0 +1,71 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { StrutturePubblicheResDto } from '../../models/strutture-pubbliche-res-dto'; + +export interface StrutturePubblicheControllerFindManyStrutture$Params { + /** + * Nome della struttura + */ + nome?: string | null; + + /** + * Indirizzo calcola distanza da + */ + indirizzo?: string | null; + + /** + * Luogo calcola distanza da + */ + luogo?: string | null; + + /** + * Tipo luogo calcola distanza da + */ + 'luogo.tipo'?: string | null; + + /** + * Tipo della struttura + */ + tipoStruttura?: string | null; +} + +export function strutturePubblicheControllerFindManyStrutture( + http: HttpClient, + rootUrl: string, + params?: StrutturePubblicheControllerFindManyStrutture$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + strutturePubblicheControllerFindManyStrutture.PATH, + 'get', + ); + if (params) { + rb.query('nome', params.nome, {}); + rb.query('indirizzo', params.indirizzo, {}); + rb.query('luogo', params.luogo, {}); + rb.query('luogo.tipo', params['luogo.tipo'], {}); + rb.query('tipoStruttura', params.tipoStruttura, {}); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +strutturePubblicheControllerFindManyStrutture.PATH = '/public/strutture'; diff --git a/src/api/fn/strutture-pubbliche/strutture-pubbliche-controller-find-many-tipi-strutture.ts b/src/api/fn/strutture-pubbliche/strutture-pubbliche-controller-find-many-tipi-strutture.ts new file mode 100644 index 0000000..cf1cb5b --- /dev/null +++ b/src/api/fn/strutture-pubbliche/strutture-pubbliche-controller-find-many-tipi-strutture.ts @@ -0,0 +1,42 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { TipoStruttura } from '../../models/tipo-struttura'; + +export interface StrutturePubblicheControllerFindManyTipiStrutture$Params {} + +export function strutturePubblicheControllerFindManyTipiStrutture( + http: HttpClient, + rootUrl: string, + params?: StrutturePubblicheControllerFindManyTipiStrutture$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + strutturePubblicheControllerFindManyTipiStrutture.PATH, + 'get', + ); + if (params) { + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +strutturePubblicheControllerFindManyTipiStrutture.PATH = + '/public/strutture/tipi'; diff --git a/src/api/fn/strutture/strutture-controller-create-convenzione.ts b/src/api/fn/strutture/strutture-controller-create-convenzione.ts new file mode 100644 index 0000000..0fef415 --- /dev/null +++ b/src/api/fn/strutture/strutture-controller-create-convenzione.ts @@ -0,0 +1,47 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { ConvenzioniStrutture } from '../../models/convenzioni-strutture'; +import { CreateConvenzioneStruttura } from '../../models/create-convenzione-struttura'; + +export interface StruttureControllerCreateConvenzione$Params { + id: number; + body: CreateConvenzioneStruttura; +} + +export function struttureControllerCreateConvenzione( + http: HttpClient, + rootUrl: string, + params: StruttureControllerCreateConvenzione$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + struttureControllerCreateConvenzione.PATH, + 'post', + ); + if (params) { + rb.path('id', params.id, {}); + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +struttureControllerCreateConvenzione.PATH = '/id/{id}/convenzioni'; diff --git a/src/api/fn/strutture/strutture-controller-create-struttura.ts b/src/api/fn/strutture/strutture-controller-create-struttura.ts new file mode 100644 index 0000000..6ba504a --- /dev/null +++ b/src/api/fn/strutture/strutture-controller-create-struttura.ts @@ -0,0 +1,45 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { CreateStruttura } from '../../models/create-struttura'; +import { Struttura } from '../../models/struttura'; + +export interface StruttureControllerCreateStruttura$Params { + body: CreateStruttura; +} + +export function struttureControllerCreateStruttura( + http: HttpClient, + rootUrl: string, + params: StruttureControllerCreateStruttura$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + struttureControllerCreateStruttura.PATH, + 'post', + ); + if (params) { + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +struttureControllerCreateStruttura.PATH = '/add'; diff --git a/src/api/fn/strutture/strutture-controller-delete-allegato-convenzione.ts b/src/api/fn/strutture/strutture-controller-delete-allegato-convenzione.ts new file mode 100644 index 0000000..e2f6bc3 --- /dev/null +++ b/src/api/fn/strutture/strutture-controller-delete-allegato-convenzione.ts @@ -0,0 +1,49 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { GenericMessageDto } from '../../models/generic-message-dto'; + +export interface StruttureControllerDeleteAllegatoConvenzione$Params { + id: number; + idConvenzione: number; + fileName: string; +} + +export function struttureControllerDeleteAllegatoConvenzione( + http: HttpClient, + rootUrl: string, + params: StruttureControllerDeleteAllegatoConvenzione$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + struttureControllerDeleteAllegatoConvenzione.PATH, + 'delete', + ); + if (params) { + rb.path('id', params.id, {}); + rb.path('idConvenzione', params.idConvenzione, {}); + rb.path('fileName', params.fileName, {}); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +struttureControllerDeleteAllegatoConvenzione.PATH = + '/id/{id}/allegati/convenzioni/{idConvenzione}/delete/{fileName}'; diff --git a/src/api/fn/strutture/strutture-controller-download-allegato-convenzione.ts b/src/api/fn/strutture/strutture-controller-download-allegato-convenzione.ts new file mode 100644 index 0000000..80045cc --- /dev/null +++ b/src/api/fn/strutture/strutture-controller-download-allegato-convenzione.ts @@ -0,0 +1,49 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { DownloadFile } from '../../models/download-file'; + +export interface StruttureControllerDownloadAllegatoConvenzione$Params { + id: number; + idConvenzione: number; + fileName: string; +} + +export function struttureControllerDownloadAllegatoConvenzione( + http: HttpClient, + rootUrl: string, + params: StruttureControllerDownloadAllegatoConvenzione$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + struttureControllerDownloadAllegatoConvenzione.PATH, + 'get', + ); + if (params) { + rb.path('id', params.id, {}); + rb.path('idConvenzione', params.idConvenzione, {}); + rb.path('fileName', params.fileName, {}); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +struttureControllerDownloadAllegatoConvenzione.PATH = + '/id/{id}/allegati/convenzioni/{idConvenzione}/download/{fileName}'; diff --git a/src/api/fn/strutture/strutture-controller-export-strutture.ts b/src/api/fn/strutture/strutture-controller-export-strutture.ts new file mode 100644 index 0000000..d4f9590 --- /dev/null +++ b/src/api/fn/strutture/strutture-controller-export-strutture.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +export interface StruttureControllerExportStrutture$Params {} + +export function struttureControllerExportStrutture( + http: HttpClient, + rootUrl: string, + params?: StruttureControllerExportStrutture$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + struttureControllerExportStrutture.PATH, + 'get', + ); + if (params) { + } + + return http + .request( + rb.build({ + responseType: 'blob', + accept: 'application/octet-stream', + context, + }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +struttureControllerExportStrutture.PATH = '/export'; diff --git a/src/api/fn/strutture/strutture-controller-find-many-strutture-by-autocomplete.ts b/src/api/fn/strutture/strutture-controller-find-many-strutture-by-autocomplete.ts new file mode 100644 index 0000000..a9d1b5e --- /dev/null +++ b/src/api/fn/strutture/strutture-controller-find-many-strutture-by-autocomplete.ts @@ -0,0 +1,53 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { StrutturaExcerptRes } from '../../models/struttura-excerpt-res'; + +export interface StruttureControllerFindManyStruttureByAutocomplete$Params { + /** + * Se true restituisce solo le struttureMadri + */ + flagOnlyStrutturaMadre?: number; + + /** + * Search query for places, must be at least 3 characters long + */ + q: string; +} + +export function struttureControllerFindManyStruttureByAutocomplete( + http: HttpClient, + rootUrl: string, + params: StruttureControllerFindManyStruttureByAutocomplete$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + struttureControllerFindManyStruttureByAutocomplete.PATH, + 'get', + ); + if (params) { + rb.query('flagOnlyStrutturaMadre', params.flagOnlyStrutturaMadre, {}); + rb.query('q', params.q, {}); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +struttureControllerFindManyStruttureByAutocomplete.PATH = '/'; diff --git a/src/api/fn/strutture/strutture-controller-find-many-strutture.ts b/src/api/fn/strutture/strutture-controller-find-many-strutture.ts new file mode 100644 index 0000000..6c17025 --- /dev/null +++ b/src/api/fn/strutture/strutture-controller-find-many-strutture.ts @@ -0,0 +1,45 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { FindStrutture } from '../../models/find-strutture'; +import { StrutturaExcerptRes } from '../../models/struttura-excerpt-res'; + +export interface StruttureControllerFindManyStrutture$Params { + body: FindStrutture; +} + +export function struttureControllerFindManyStrutture( + http: HttpClient, + rootUrl: string, + params: StruttureControllerFindManyStrutture$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + struttureControllerFindManyStrutture.PATH, + 'post', + ); + if (params) { + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +struttureControllerFindManyStrutture.PATH = '/'; diff --git a/src/api/fn/strutture/strutture-controller-find-many-tipi-gestioni.ts b/src/api/fn/strutture/strutture-controller-find-many-tipi-gestioni.ts new file mode 100644 index 0000000..d34fd3a --- /dev/null +++ b/src/api/fn/strutture/strutture-controller-find-many-tipi-gestioni.ts @@ -0,0 +1,41 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { TipoGestione } from '../../models/tipo-gestione'; + +export interface StruttureControllerFindManyTipiGestioni$Params {} + +export function struttureControllerFindManyTipiGestioni( + http: HttpClient, + rootUrl: string, + params?: StruttureControllerFindManyTipiGestioni$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + struttureControllerFindManyTipiGestioni.PATH, + 'get', + ); + if (params) { + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +struttureControllerFindManyTipiGestioni.PATH = '/tipi-gestioni'; diff --git a/src/api/fn/strutture/strutture-controller-find-many-tipi-strutture.ts b/src/api/fn/strutture/strutture-controller-find-many-tipi-strutture.ts new file mode 100644 index 0000000..4b091b8 --- /dev/null +++ b/src/api/fn/strutture/strutture-controller-find-many-tipi-strutture.ts @@ -0,0 +1,41 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { TipoStruttura } from '../../models/tipo-struttura'; + +export interface StruttureControllerFindManyTipiStrutture$Params {} + +export function struttureControllerFindManyTipiStrutture( + http: HttpClient, + rootUrl: string, + params?: StruttureControllerFindManyTipiStrutture$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + struttureControllerFindManyTipiStrutture.PATH, + 'get', + ); + if (params) { + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +struttureControllerFindManyTipiStrutture.PATH = '/tipi-strutture'; diff --git a/src/api/fn/strutture/strutture-controller-get-allegati-convenzione.ts b/src/api/fn/strutture/strutture-controller-get-allegati-convenzione.ts new file mode 100644 index 0000000..bb995f9 --- /dev/null +++ b/src/api/fn/strutture/strutture-controller-get-allegati-convenzione.ts @@ -0,0 +1,47 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { FileDetails } from '../../models/file-details'; + +export interface StruttureControllerGetAllegatiConvenzione$Params { + id: number; + idConvenzione: number; +} + +export function struttureControllerGetAllegatiConvenzione( + http: HttpClient, + rootUrl: string, + params: StruttureControllerGetAllegatiConvenzione$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + struttureControllerGetAllegatiConvenzione.PATH, + 'get', + ); + if (params) { + rb.path('id', params.id, {}); + rb.path('idConvenzione', params.idConvenzione, {}); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +struttureControllerGetAllegatiConvenzione.PATH = + '/id/{id}/allegati/convenzioni/{idConvenzione}'; diff --git a/src/api/fn/strutture/strutture-controller-get-convenzioni-by-struttura-id.ts b/src/api/fn/strutture/strutture-controller-get-convenzioni-by-struttura-id.ts new file mode 100644 index 0000000..e553e3a --- /dev/null +++ b/src/api/fn/strutture/strutture-controller-get-convenzioni-by-struttura-id.ts @@ -0,0 +1,44 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { ConvenzioniStrutture } from '../../models/convenzioni-strutture'; + +export interface StruttureControllerGetConvenzioniByStrutturaId$Params { + id: number; +} + +export function struttureControllerGetConvenzioniByStrutturaId( + http: HttpClient, + rootUrl: string, + params: StruttureControllerGetConvenzioniByStrutturaId$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + struttureControllerGetConvenzioniByStrutturaId.PATH, + 'get', + ); + if (params) { + rb.path('id', params.id, {}); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +struttureControllerGetConvenzioniByStrutturaId.PATH = '/id/{id}/convenzioni'; diff --git a/src/api/fn/strutture/strutture-controller-get-one-struttura-by-id.ts b/src/api/fn/strutture/strutture-controller-get-one-struttura-by-id.ts new file mode 100644 index 0000000..e5a3276 --- /dev/null +++ b/src/api/fn/strutture/strutture-controller-get-one-struttura-by-id.ts @@ -0,0 +1,44 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { Struttura } from '../../models/struttura'; + +export interface StruttureControllerGetOneStrutturaById$Params { + id: number; +} + +export function struttureControllerGetOneStrutturaById( + http: HttpClient, + rootUrl: string, + params: StruttureControllerGetOneStrutturaById$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + struttureControllerGetOneStrutturaById.PATH, + 'get', + ); + if (params) { + rb.path('id', params.id, {}); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +struttureControllerGetOneStrutturaById.PATH = '/id/{id}'; diff --git a/src/api/fn/strutture/strutture-controller-update-convenzione.ts b/src/api/fn/strutture/strutture-controller-update-convenzione.ts new file mode 100644 index 0000000..99a9e23 --- /dev/null +++ b/src/api/fn/strutture/strutture-controller-update-convenzione.ts @@ -0,0 +1,50 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { ConvenzioniStrutture } from '../../models/convenzioni-strutture'; +import { UpdateConvenzioneStruttura } from '../../models/update-convenzione-struttura'; + +export interface StruttureControllerUpdateConvenzione$Params { + id: number; + idConvenzione: number; + body: UpdateConvenzioneStruttura; +} + +export function struttureControllerUpdateConvenzione( + http: HttpClient, + rootUrl: string, + params: StruttureControllerUpdateConvenzione$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + struttureControllerUpdateConvenzione.PATH, + 'patch', + ); + if (params) { + rb.path('id', params.id, {}); + rb.path('idConvenzione', params.idConvenzione, {}); + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +struttureControllerUpdateConvenzione.PATH = + '/id/{id}/convenzioni/{idConvenzione}'; diff --git a/src/api/fn/strutture/strutture-controller-update-struttura.ts b/src/api/fn/strutture/strutture-controller-update-struttura.ts new file mode 100644 index 0000000..cc23e3b --- /dev/null +++ b/src/api/fn/strutture/strutture-controller-update-struttura.ts @@ -0,0 +1,47 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { Struttura } from '../../models/struttura'; +import { UpdateStruttura } from '../../models/update-struttura'; + +export interface StruttureControllerUpdateStruttura$Params { + id: number; + body: UpdateStruttura; +} + +export function struttureControllerUpdateStruttura( + http: HttpClient, + rootUrl: string, + params: StruttureControllerUpdateStruttura$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + struttureControllerUpdateStruttura.PATH, + 'patch', + ); + if (params) { + rb.path('id', params.id, {}); + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +struttureControllerUpdateStruttura.PATH = '/id/{id}'; diff --git a/src/api/fn/strutture/strutture-controller-update-visibilita-struttura.ts b/src/api/fn/strutture/strutture-controller-update-visibilita-struttura.ts new file mode 100644 index 0000000..9d5f475 --- /dev/null +++ b/src/api/fn/strutture/strutture-controller-update-visibilita-struttura.ts @@ -0,0 +1,47 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { UpdateVisibilitaStruttura } from '../../models/update-visibilita-struttura'; +import { VisibilitaStruttura } from '../../models/visibilita-struttura'; + +export interface StruttureControllerUpdateVisibilitaStruttura$Params { + id: number; + body: UpdateVisibilitaStruttura; +} + +export function struttureControllerUpdateVisibilitaStruttura( + http: HttpClient, + rootUrl: string, + params: StruttureControllerUpdateVisibilitaStruttura$Params, + context?: HttpContext, +): Observable>> { + const rb = new RequestBuilder( + rootUrl, + struttureControllerUpdateVisibilitaStruttura.PATH, + 'patch', + ); + if (params) { + rb.path('id', params.id, {}); + rb.body(params.body, 'application/json'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }), + ); +} + +struttureControllerUpdateVisibilitaStruttura.PATH = '/id/{id}/visibilita'; diff --git a/src/api/fn/strutture/strutture-controller-upload-files.ts b/src/api/fn/strutture/strutture-controller-upload-files.ts new file mode 100644 index 0000000..b6a5577 --- /dev/null +++ b/src/api/fn/strutture/strutture-controller-upload-files.ts @@ -0,0 +1,50 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { FilesUploadDto } from '../../models/files-upload-dto'; +import { GenericMessageDto } from '../../models/generic-message-dto'; + +export interface StruttureControllerUploadFiles$Params { + id: number; + idConvenzione: number; + body: FilesUploadDto; +} + +export function struttureControllerUploadFiles( + http: HttpClient, + rootUrl: string, + params: StruttureControllerUploadFiles$Params, + context?: HttpContext, +): Observable> { + const rb = new RequestBuilder( + rootUrl, + struttureControllerUploadFiles.PATH, + 'put', + ); + if (params) { + rb.path('id', params.id, {}); + rb.path('idConvenzione', params.idConvenzione, {}); + rb.body(params.body, 'multipart/form-data'); + } + + return http + .request( + rb.build({ responseType: 'json', accept: 'application/json', context }), + ) + .pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse; + }), + ); +} + +struttureControllerUploadFiles.PATH = + '/id/{id}/allegati/convenzioni/{idConvenzione}/upload'; diff --git a/src/api/models.ts b/src/api/models.ts new file mode 100644 index 0000000..859ce40 --- /dev/null +++ b/src/api/models.ts @@ -0,0 +1,82 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export type { AccountDto } from './models/account-dto'; +export type { AccountResDto } from './models/account-res-dto'; +export type { BufferJson } from './models/buffer-json'; +export type { CategoriaPrestazioneResDto } from './models/categoria-prestazione-res-dto'; +export type { CodiceLuogo } from './models/codice-luogo'; +export type { CodiceLuogoExcerptResDto } from './models/codice-luogo-excerpt-res-dto'; +export type { ConvenzioniStrutture } from './models/convenzioni-strutture'; +export type { CreateAccountDto } from './models/create-account-dto'; +export type { CreateActionsDto } from './models/create-actions-dto'; +export type { CreateConvenzioneStruttura } from './models/create-convenzione-struttura'; +export type { CreateNomenclatore } from './models/create-nomenclatore'; +export type { CreateNomenclatoreLivello1 } from './models/create-nomenclatore-livello-1'; +export type { CreateNomenclatoreLivello2 } from './models/create-nomenclatore-livello-2'; +export type { CreateNomenclatoreLivello3 } from './models/create-nomenclatore-livello-3'; +export type { CreateNomenclatoreLivello4 } from './models/create-nomenclatore-livello-4'; +export type { CreateStruttura } from './models/create-struttura'; +export type { DownloadFile } from './models/download-file'; +export type { EditAccountDto } from './models/edit-account-dto'; +export type { EditAccountStipulatoriDto } from './models/edit-account-stipulatori-dto'; +export type { EditAnagraficaPersonaleDto } from './models/edit-anagrafica-personale-dto'; +export type { EditPasswordDto } from './models/edit-password-dto'; +export type { EditPasswordPersonaleDto } from './models/edit-password-personale-dto'; +export type { EditPrivilegeFlagEnabledDto } from './models/edit-privilege-flag-enabled-dto'; +export type { EditPrivilegeFlagReadonlyDto } from './models/edit-privilege-flag-readonly-dto'; +export type { ElementiResDto } from './models/elementi-res-dto'; +export type { FileDetails } from './models/file-details'; +export type { FilesUploadDto } from './models/files-upload-dto'; +export type { FiltriStrutture } from './models/filtri-strutture'; +export type { FindAccountResDto } from './models/find-account-res-dto'; +export type { FindAccountsResDto } from './models/find-accounts-res-dto'; +export type { FindAccountStatusResDto } from './models/find-account-status-res-dto'; +export type { FindAccountStipulatoriResDto } from './models/find-account-stipulatori-res-dto'; +export type { FindActionResDto } from './models/find-action-res-dto'; +export type { FindLuogoAutocomplete } from './models/find-luogo-autocomplete'; +export type { FindPrivilegeResDto } from './models/find-privilege-res-dto'; +export type { FindProfileResDto } from './models/find-profile-res-dto'; +export type { FindRoleResDto } from './models/find-role-res-dto'; +export type { FindStatusResDto } from './models/find-status-res-dto'; +export type { FindStrutture } from './models/find-strutture'; +export type { Function } from './models/function'; +export type { GenericMessageDto } from './models/generic-message-dto'; +export type { GetPrivilegesResDto } from './models/get-privileges-res-dto'; +export type { GetRolesResDto } from './models/get-roles-res-dto'; +export type { LatLng } from './models/lat-lng'; +export type { LazyLoadEventDto } from './models/lazy-load-event-dto'; +export type { LazyLoadEventParametersDto } from './models/lazy-load-event-parameters-dto'; +export type { LinkVerificationDto } from './models/link-verification-dto'; +export type { LuogoRes } from './models/luogo-res'; +export type { NomenclatoreExcerptRes } from './models/nomenclatore-excerpt-res'; +export type { NomenclatoreLivello1ResDto } from './models/nomenclatore-livello-1-res-dto'; +export type { NomenclatoreLivello2ResDto } from './models/nomenclatore-livello-2-res-dto'; +export type { NomenclatoreLivello3ResDto } from './models/nomenclatore-livello-3-res-dto'; +export type { NomenclatoreLivello4ResDto } from './models/nomenclatore-livello-4-res-dto'; +export type { NomenclatoreRes } from './models/nomenclatore-res'; +export type { RecoveryDto } from './models/recovery-dto'; +export type { SortMetaDto } from './models/sort-meta-dto'; +export type { Stipulatore } from './models/stipulatore'; +export type { Struttura } from './models/struttura'; +export type { StrutturaExcerptRes } from './models/struttura-excerpt-res'; +export type { StrutturaMadre } from './models/struttura-madre'; +export type { StrutturaTipoStruttura } from './models/struttura-tipo-struttura'; +export type { StrutturePubblicheExcerptResDto } from './models/strutture-pubbliche-excerpt-res-dto'; +export type { StrutturePubblicheResDto } from './models/strutture-pubbliche-res-dto'; +export type { TipoGestione } from './models/tipo-gestione'; +export type { TipoPrestazioneResDto } from './models/tipo-prestazione-res-dto'; +export type { TipoStruttura } from './models/tipo-struttura'; +export type { TipoStrutturaResDto } from './models/tipo-struttura-res-dto'; +export type { UnitaDiMisuraResDto } from './models/unita-di-misura-res-dto'; +export type { UpdateConvenzioneStruttura } from './models/update-convenzione-struttura'; +export type { UpdateNomenclatore } from './models/update-nomenclatore'; +export type { UpdateNomenclatoreLivello1 } from './models/update-nomenclatore-livello-1'; +export type { UpdateNomenclatoreLivello2 } from './models/update-nomenclatore-livello-2'; +export type { UpdateNomenclatoreLivello3 } from './models/update-nomenclatore-livello-3'; +export type { UpdateNomenclatoreLivello4 } from './models/update-nomenclatore-livello-4'; +export type { UpdateStruttura } from './models/update-struttura'; +export type { UpdateVisibilitaStruttura } from './models/update-visibilita-struttura'; +export type { VisibilitaStruttura } from './models/visibilita-struttura'; +export type { VisibilitaStrutturaDto } from './models/visibilita-struttura-dto'; diff --git a/src/api/models/account-dto.ts b/src/api/models/account-dto.ts new file mode 100644 index 0000000..a0b034f --- /dev/null +++ b/src/api/models/account-dto.ts @@ -0,0 +1,17 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface AccountDto { + /** + * The password for the account + * The password must be at least 8 characters long, containing at least one lowercase letter, one uppercase letter, one number, and one special character + */ + password: string; + + /** + * The username of the account + * Must be a valid email address + */ + username: string; +} diff --git a/src/api/models/account-res-dto.ts b/src/api/models/account-res-dto.ts new file mode 100644 index 0000000..174ac9f --- /dev/null +++ b/src/api/models/account-res-dto.ts @@ -0,0 +1,61 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { FindStatusResDto } from '../models/find-status-res-dto'; +import { GetPrivilegesResDto } from '../models/get-privileges-res-dto'; +import { GetRolesResDto } from '../models/get-roles-res-dto'; +export interface AccountResDto { + /** + * The account creation date, can be null + */ + creationDate: string | null; + + /** + * The account expiration date, can be null + */ + expireDate: string | null; + + /** + * The first name of the user, can be null + */ + firstName: string | null; + + /** + * The last login date of the user, can be null + */ + lastLogin: string | null; + + /** + * The last name of the user, can be null + */ + lastName: string | null; + + /** + * A list of user's privileges + * @type GetPrivilegesResDto[] + */ + privileges: Array; + + /** + * A list of user's roles + * @type GetRolesResDto[] + */ + roles: Array; + + /** + * The status of the account + * @type FindStatusResDto + */ + status: FindStatusResDto; + + /** + * The user's access token + */ + token: string; + + /** + * The username of the account + */ + username: string; +} diff --git a/src/api/models/buffer-json.ts b/src/api/models/buffer-json.ts new file mode 100644 index 0000000..c14533c --- /dev/null +++ b/src/api/models/buffer-json.ts @@ -0,0 +1,15 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface BufferJson { + /** + * array buffer + */ + data: Array; + + /** + * type of the buffer + */ + type: string; +} diff --git a/src/api/models/categoria-prestazione-res-dto.ts b/src/api/models/categoria-prestazione-res-dto.ts new file mode 100644 index 0000000..6731a4f --- /dev/null +++ b/src/api/models/categoria-prestazione-res-dto.ts @@ -0,0 +1,20 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface CategoriaPrestazioneResDto { + /** + * Codice categoria-prestazione + */ + codice: string | null; + + /** + * Descrizione categoria-prestazione + */ + descrizione: string | null; + + /** + * Unique identifier for categoria-prestazione + */ + id: number; +} diff --git a/src/api/models/codice-luogo-excerpt-res-dto.ts b/src/api/models/codice-luogo-excerpt-res-dto.ts new file mode 100644 index 0000000..9dede5c --- /dev/null +++ b/src/api/models/codice-luogo-excerpt-res-dto.ts @@ -0,0 +1,20 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface CodiceLuogoExcerptResDto { + /** + * Name of the municipality + */ + comune: string; + + /** + * Full name of the province + */ + provincia: string; + + /** + * Abbreviation of the province + */ + siglaProvincia: string; +} diff --git a/src/api/models/codice-luogo.ts b/src/api/models/codice-luogo.ts new file mode 100644 index 0000000..c467ec9 --- /dev/null +++ b/src/api/models/codice-luogo.ts @@ -0,0 +1,50 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface CodiceLuogo { + /** + * Unique code identifying the place + */ + codice: string; + + /** + * Code identifying the region + */ + codiceRegione: string; + + /** + * Code identifying the state + */ + codiceStato: string; + + /** + * Name of the municipality + */ + comune: string; + + /** + * Indicates whether the location is active (1 = active, 0 = inactive) + */ + flagAttivo: boolean; + + /** + * Full name of the province + */ + provincia: string; + + /** + * Name of the region + */ + regione: string; + + /** + * Abbreviation of the province + */ + siglaProvincia: string; + + /** + * Name of the state + */ + stato: string; +} diff --git a/src/api/models/convenzioni-strutture.ts b/src/api/models/convenzioni-strutture.ts new file mode 100644 index 0000000..4a25e5f --- /dev/null +++ b/src/api/models/convenzioni-strutture.ts @@ -0,0 +1,87 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { Stipulatore } from '../models/stipulatore'; +export interface ConvenzioniStrutture { + /** + * General terms and conditions of the convention + */ + condizioniGeneraliConvenzione: string | null; + + /** + * End date of the convention + */ + dataFine: string; + + /** + * Start date of the convention + */ + dataInizio: string; + + /** + * Date and time of creation + */ + dataOraCreazione: string | null; + + /** + * Date and time of last modification + */ + dataOraModifica: string | null; + + /** + * Indicates whether the convention is direct + */ + flagConvenzioneDiretta: boolean; + + /** + * Indicates whether the convention is indirect + */ + flagConvenzioneIndiretta: boolean; + + /** + * Indicates whether the convention is related to ticketing + */ + flagConvenzioneTicket: boolean; + + /** + * Indicates whether the convention includes the choice of a doctor + */ + flagSceltaMedico: boolean; + + /** + * Indicates whether the convention is currently suspended + */ + flagSospesa: boolean; + + /** + * Indicates whether the pricing is based on the parent company's tariff + */ + flagUsaTariffarioCasaMadre: boolean; + + /** + * Unique identifier for the convention + */ + id: number; + + /** + * Identifier of the structure associated with the convention + */ + idStruttura: number; + + /** + * Stipulatore della convenzione + * @type Stipulatore + */ + stipulatore: Stipulatore; + + /** + * User who created the structure + */ + utenteCreazione: string | null; + + /** + * User who last modified the structure + */ + utenteModifica: string | null; +} diff --git a/src/api/models/create-account-dto.ts b/src/api/models/create-account-dto.ts new file mode 100644 index 0000000..68f6c0a --- /dev/null +++ b/src/api/models/create-account-dto.ts @@ -0,0 +1,26 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface CreateAccountDto { + /** + * First name of the user. This field is optional and can be null. + */ + firstName?: string | null; + + /** + * Last name of the user. This field is optional and can be null. + */ + lastName?: string | null; + + /** + * Role assigned to the account. + * @type number + */ + roleId: number; + + /** + * Unique username for the account. + */ + username: string; +} diff --git a/src/api/models/create-actions-dto.ts b/src/api/models/create-actions-dto.ts new file mode 100644 index 0000000..76f2c74 --- /dev/null +++ b/src/api/models/create-actions-dto.ts @@ -0,0 +1,10 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface CreateActionsDto { + /** + * Lista degli identificativi delle azioni da creare. + */ + actionIds: Array; +} diff --git a/src/api/models/create-convenzione-struttura.ts b/src/api/models/create-convenzione-struttura.ts new file mode 100644 index 0000000..54cbb88 --- /dev/null +++ b/src/api/models/create-convenzione-struttura.ts @@ -0,0 +1,55 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface CreateConvenzioneStruttura { + /** + * General terms and conditions of the convention + */ + condizioniGeneraliConvenzione: string | null; + + /** + * End date of the convention + */ + dataFine: string | null; + + /** + * Start date of the convention + */ + dataInizio: string; + + /** + * Indicates whether the convention is direct + */ + flagConvenzioneDiretta: boolean; + + /** + * Indicates whether the convention is indirect + */ + flagConvenzioneIndiretta: boolean; + + /** + * Indicates whether the convention is related to ticketing + */ + flagConvenzioneTicket: boolean; + + /** + * Indicates whether the convention includes the choice of a doctor + */ + flagSceltaMedico: boolean; + + /** + * Indicates whether the convention is currently suspended + */ + flagSospesa: boolean; + + /** + * Indicates whether the pricing is based on the parent company's tariff + */ + flagUsaTariffarioCasaMadre: boolean; + + /** + * Identifier of the stipulatore + */ + idStipulatore: number | null; +} diff --git a/src/api/models/create-nomenclatore-livello-1.ts b/src/api/models/create-nomenclatore-livello-1.ts new file mode 100644 index 0000000..0718820 --- /dev/null +++ b/src/api/models/create-nomenclatore-livello-1.ts @@ -0,0 +1,15 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface CreateNomenclatoreLivello1 { + /** + * Codice nomenclatore livello 1 + */ + codice: string; + + /** + * Descrizione nomenclatore livello 1 + */ + descrizione: string; +} diff --git a/src/api/models/create-nomenclatore-livello-2.ts b/src/api/models/create-nomenclatore-livello-2.ts new file mode 100644 index 0000000..e259fea --- /dev/null +++ b/src/api/models/create-nomenclatore-livello-2.ts @@ -0,0 +1,20 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface CreateNomenclatoreLivello2 { + /** + * Codice nomenclatore livello 2 + */ + codice: string; + + /** + * Descrizione nomenclatore livello 2 + */ + descrizione: string; + + /** + * Unique identifier for nomenclatore livello 1 + */ + idLivello1: number; +} diff --git a/src/api/models/create-nomenclatore-livello-3.ts b/src/api/models/create-nomenclatore-livello-3.ts new file mode 100644 index 0000000..383d0bd --- /dev/null +++ b/src/api/models/create-nomenclatore-livello-3.ts @@ -0,0 +1,20 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface CreateNomenclatoreLivello3 { + /** + * Codice nomenclatore livello 3 + */ + codice: string; + + /** + * Descrizione nomenclatore livello 3 + */ + descrizione: string; + + /** + * Unique identifier for nomenclatore livello 2 + */ + idLivello2: number; +} diff --git a/src/api/models/create-nomenclatore-livello-4.ts b/src/api/models/create-nomenclatore-livello-4.ts new file mode 100644 index 0000000..9b2fb8a --- /dev/null +++ b/src/api/models/create-nomenclatore-livello-4.ts @@ -0,0 +1,20 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface CreateNomenclatoreLivello4 { + /** + * Codice nomenclatore livello 4 + */ + codice: string; + + /** + * Descrizione nomenclatore livello 4 + */ + descrizione: string; + + /** + * Unique identifier for nomenclatore livello 3 + */ + idLivello3: number; +} diff --git a/src/api/models/create-nomenclatore.ts b/src/api/models/create-nomenclatore.ts new file mode 100644 index 0000000..9b24203 --- /dev/null +++ b/src/api/models/create-nomenclatore.ts @@ -0,0 +1,95 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface CreateNomenclatore { + /** + * Chiavi di ricerca per il nomenclatore + */ + chiaviRicerca?: string | null; + + /** + * Codice nomenclatore livello 4 + */ + codice: string; + + /** + * Codice fasi del nomenclatore + */ + codiceFasi?: string | null; + + /** + * Data di fine validità + */ + dataFineValidita: string; + + /** + * Data di inizio validità + */ + dataInizioValidita: string; + + /** + * Descrizione nomenclatore livello 4 + */ + descrizione: string; + + /** + * Descrizione del rimborso + */ + descrizioneRimborso: string | null; + + /** + * Flag per accorpamento del livello + */ + flagAccorpaLivello?: boolean | null; + + /** + * Flag per necessità di documentazione + */ + flagNecessitaDocumentazione?: boolean | null; + + /** + * Flag per selezionabilità da utenti + */ + flagSelezionabileDaUtenti?: boolean | null; + + /** + * Unique identifier for elemento + */ + idElemento: number; + + /** + * Unique identifier for nomenclatore livello 1 + */ + idLivello1: number; + + /** + * Unique identifier for nomenclatore livello 2 + */ + idLivello2: number; + + /** + * Unique identifier for nomenclatore livello 3 + */ + idLivello3: number; + + /** + * Unique identifier for nomenclatore livello 4 + */ + idLivello4: number; + + /** + * Unique identifier for tipo prestazione + */ + idTipoPrestazione: number; + + /** + * Unique identifier for unità di misura + */ + idUnitaDiMisura: number; + + /** + * Note del nomenclatore + */ + note?: string | null; +} diff --git a/src/api/models/create-struttura.ts b/src/api/models/create-struttura.ts new file mode 100644 index 0000000..23c34e6 --- /dev/null +++ b/src/api/models/create-struttura.ts @@ -0,0 +1,115 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface CreateStruttura { + /** + * CAP della struttura + */ + cap?: string | null; + + /** + * Codice della provincia + */ + codiceLuogo: string; + + /** + * CUP per prenotazioni private + */ + cupPrivato?: string | null; + + /** + * CUP per prenotazioni pubbliche + */ + cupPubblico?: string | null; + + /** + * Email della struttura + */ + email?: string | null; + + /** + * Numero di fax della struttura + */ + fax?: string | null; + + /** + * Indica se la struttura è filtrata per la pubblicazione + */ + filtraPubblicazione?: boolean; + + /** + * Indica se la struttura è convenzionata + */ + flagConvenzionata?: boolean; + + /** + * ID degli stipulatori associati a questa struttura + */ + idStipulatori: Array; + + /** + * ID della struttura madre + */ + idStrutturaMadre?: number | null; + + /** + * ID del tipo di struttura + */ + idTipiStruttura: Array; + + /** + * ID del tipo di gestione + */ + idTipoGestione: number; + + /** + * Indirizzo della struttura + */ + indirizzo?: string | null; + + /** + * Nome della struttura + */ + nome: string; + + /** + * Note aggiuntive sulla struttura + */ + note?: string | null; + + /** + * Numero identificativo della struttura + */ + numero?: number | null; + + /** + * Numero civico della struttura + */ + numeroCivico?: string | null; + + /** + * Partita IVA della struttura + */ + partitaIva?: string | null; + + /** + * Sito web della struttura + */ + sitoWeb?: string | null; + + /** + * Numero di stelle della struttura + */ + stelline: number; + + /** + * Telefono principale della struttura + */ + telefono1?: string | null; + + /** + * Telefono secondario della struttura + */ + telefono2?: string | null; +} diff --git a/src/api/models/download-file.ts b/src/api/models/download-file.ts new file mode 100644 index 0000000..79e1d8e --- /dev/null +++ b/src/api/models/download-file.ts @@ -0,0 +1,27 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { BufferJson } from '../models/buffer-json'; +export interface DownloadFile { + /** + * Buffer JSON of the file + * @type {BufferJson} + */ + buffer: BufferJson; + + /** + * File extension + */ + ext: string; + + /** + * fileName of the file + */ + fileName?: string; + + /** + * mimeType of the file + */ + mimeType: string; +} diff --git a/src/api/models/edit-account-dto.ts b/src/api/models/edit-account-dto.ts new file mode 100644 index 0000000..564ea87 --- /dev/null +++ b/src/api/models/edit-account-dto.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface EditAccountDto { + /** + * Unique username for the account. + */ + expireDate?: string | null; + + /** + * First name of the user. This field is optional and can be null. + */ + firstName?: string | null; + + /** + * Last name of the user. This field is optional and can be null. + */ + lastName?: string | null; + + /** + * Profile assigned to the account. + * @type number + */ + profileId: number; + + /** + * Role assigned to the account. + * @type number + */ + roleId: number; + + /** + * Unique username for the account. + */ + username: string; +} diff --git a/src/api/models/edit-account-stipulatori-dto.ts b/src/api/models/edit-account-stipulatori-dto.ts new file mode 100644 index 0000000..037d28e --- /dev/null +++ b/src/api/models/edit-account-stipulatori-dto.ts @@ -0,0 +1,10 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface EditAccountStipulatoriDto { + /** + * Unique username for the account. + */ + stipulatori: Array; +} diff --git a/src/api/models/edit-anagrafica-personale-dto.ts b/src/api/models/edit-anagrafica-personale-dto.ts new file mode 100644 index 0000000..88782c9 --- /dev/null +++ b/src/api/models/edit-anagrafica-personale-dto.ts @@ -0,0 +1,15 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface EditAnagraficaPersonaleDto { + /** + * Nuovo valore per il cognome + */ + cognome: string; + + /** + * Nuovo valore per il nome + */ + nome: string; +} diff --git a/src/api/models/edit-password-dto.ts b/src/api/models/edit-password-dto.ts new file mode 100644 index 0000000..9c7cea2 --- /dev/null +++ b/src/api/models/edit-password-dto.ts @@ -0,0 +1,26 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface EditPasswordDto { + /** + * The unique identifier for the user + */ + id: number; + + /** + * The new password for the account + * The password must be at least 8 characters long, containing at least one lowercase letter, one uppercase letter, one number, and one special character + */ + password: string; + + /** + * The verification token + */ + token: string; + + /** + * The username of the account + */ + username: string; +} diff --git a/src/api/models/edit-password-personale-dto.ts b/src/api/models/edit-password-personale-dto.ts new file mode 100644 index 0000000..a285016 --- /dev/null +++ b/src/api/models/edit-password-personale-dto.ts @@ -0,0 +1,16 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface EditPasswordPersonaleDto { + /** + * Vecchia password da comparare + */ + oldPassword: string; + + /** + * The new password for the account + * The password must be at least 8 characters long, containing at least one lowercase letter, one uppercase letter, one number, and one special character + */ + password: string; +} diff --git a/src/api/models/edit-privilege-flag-enabled-dto.ts b/src/api/models/edit-privilege-flag-enabled-dto.ts new file mode 100644 index 0000000..c57f63e --- /dev/null +++ b/src/api/models/edit-privilege-flag-enabled-dto.ts @@ -0,0 +1,10 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface EditPrivilegeFlagEnabledDto { + /** + * Flag che indica se il privilegio deve essere abilitato. + */ + flagEnabled: boolean; +} diff --git a/src/api/models/edit-privilege-flag-readonly-dto.ts b/src/api/models/edit-privilege-flag-readonly-dto.ts new file mode 100644 index 0000000..bff81ac --- /dev/null +++ b/src/api/models/edit-privilege-flag-readonly-dto.ts @@ -0,0 +1,10 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface EditPrivilegeFlagReadonlyDto { + /** + * Flag che indica se il privilegio deve essere impostato in sola lettura. + */ + flagReadOnly: boolean; +} diff --git a/src/api/models/elementi-res-dto.ts b/src/api/models/elementi-res-dto.ts new file mode 100644 index 0000000..7813f99 --- /dev/null +++ b/src/api/models/elementi-res-dto.ts @@ -0,0 +1,20 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface ElementiResDto { + /** + * Codice categoria-prestazione + */ + codice: string; + + /** + * Descrizione categoria-prestazione + */ + descrizione: string; + + /** + * Unique identifier for categoria-prestazione + */ + id: number; +} diff --git a/src/api/models/file-details.ts b/src/api/models/file-details.ts new file mode 100644 index 0000000..0ccc5af --- /dev/null +++ b/src/api/models/file-details.ts @@ -0,0 +1,25 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface FileDetails { + /** + * File extension + */ + ext: string; + + /** + * Size of the file in bytes + */ + fileSizeInBytes: number; + + /** + * Last modified date of the file + */ + lastModified: string; + + /** + * Complete name for the file + */ + name: string; +} diff --git a/src/api/models/files-upload-dto.ts b/src/api/models/files-upload-dto.ts new file mode 100644 index 0000000..8fb18b6 --- /dev/null +++ b/src/api/models/files-upload-dto.ts @@ -0,0 +1,7 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface FilesUploadDto { + files: Array; +} diff --git a/src/api/models/filtri-strutture.ts b/src/api/models/filtri-strutture.ts new file mode 100644 index 0000000..bdab6f8 --- /dev/null +++ b/src/api/models/filtri-strutture.ts @@ -0,0 +1,42 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { FindLuogoAutocomplete } from '../models/find-luogo-autocomplete'; +export interface FiltriStrutture { + /** + * Convenzioni chiuse nel periodo + */ + dataFine?: Array | null; + + /** + * Convenzioni aperte nel periodo + */ + dataInizio?: Array | null; + + /** + * Indica se cercare solo le strutture madri + */ + flagOnlyStrutturaMadre?: boolean | null; + + /** + * Type of the structure + */ + idTipoStruttura?: Array | null; + + /** + * Luogo of the structure + * @type FindLuogoAutocomplete + */ + luogo?: FindLuogoAutocomplete | null; + + /** + * Name of struttura + */ + nome?: string | null; + + /** + * Stato convenzione + */ + statoConvenzione?: ('ATTIVO' | 'CHIUSO' | 'TUTTI') | null; +} diff --git a/src/api/models/find-account-res-dto.ts b/src/api/models/find-account-res-dto.ts new file mode 100644 index 0000000..219d0a1 --- /dev/null +++ b/src/api/models/find-account-res-dto.ts @@ -0,0 +1,50 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { FindProfileResDto } from '../models/find-profile-res-dto'; +import { FindStatusResDto } from '../models/find-status-res-dto'; +export interface FindAccountResDto { + /** + * The account creation date, can be null + */ + creationDate: string | null; + + /** + * The account expiration date, can be null + */ + expireDate: string | null; + + /** + * First name of the account holder + * Can be null + */ + firstName?: string | null; + + /** + * Unique identifier for the account + */ + id: number; + + /** + * Last name of the account holder + * Can be null + */ + lastName?: string | null; + + /** + * List of profiles associated with the account + */ + profiles: Array; + + /** + * Status of the account + * @type FindStatusResDto + */ + status: FindStatusResDto; + + /** + * Username of the account + */ + username: string; +} diff --git a/src/api/models/find-account-status-res-dto.ts b/src/api/models/find-account-status-res-dto.ts new file mode 100644 index 0000000..04b3377 --- /dev/null +++ b/src/api/models/find-account-status-res-dto.ts @@ -0,0 +1,25 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface FindAccountStatusResDto { + /** + * Optional description of the status + */ + description?: string | null; + + /** + * Unique identifier for the AccountStatus + */ + id: number; + + /** + * Standard code representing the status + */ + standardCode: string; + + /** + * Standard name of the status + */ + standardName: string; +} diff --git a/src/api/models/find-account-stipulatori-res-dto.ts b/src/api/models/find-account-stipulatori-res-dto.ts new file mode 100644 index 0000000..a33a1f4 --- /dev/null +++ b/src/api/models/find-account-stipulatori-res-dto.ts @@ -0,0 +1,20 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface FindAccountStipulatoriResDto { + /** + * Unique identifier for the account-stipulatore + */ + id: number; + + /** + * Unique identifier for the account + */ + idAccount: number; + + /** + * Unique identifier for the stipulatore + */ + idStipulatore: number; +} diff --git a/src/api/models/find-accounts-res-dto.ts b/src/api/models/find-accounts-res-dto.ts new file mode 100644 index 0000000..5d180f3 --- /dev/null +++ b/src/api/models/find-accounts-res-dto.ts @@ -0,0 +1,17 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { FindAccountResDto } from '../models/find-account-res-dto'; +export interface FindAccountsResDto { + /** + * List of account details + * @type FindAccountResDto[] + */ + accounts: Array; + + /** + * Total count of accounts available + */ + count: number; +} diff --git a/src/api/models/find-action-res-dto.ts b/src/api/models/find-action-res-dto.ts new file mode 100644 index 0000000..2adf4a0 --- /dev/null +++ b/src/api/models/find-action-res-dto.ts @@ -0,0 +1,30 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface FindActionResDto { + /** + * Optional description of the action + */ + description: string | null; + + /** + * Enable/disable dropdown readonly + */ + flagEnabledReadonly: boolean; + + /** + * Unique identifier for the Action + */ + id: number; + + /** + * Standard code representing the action + */ + standardCode: string; + + /** + * Standard name of the action + */ + standardName: string; +} diff --git a/src/api/models/find-luogo-autocomplete.ts b/src/api/models/find-luogo-autocomplete.ts new file mode 100644 index 0000000..e283657 --- /dev/null +++ b/src/api/models/find-luogo-autocomplete.ts @@ -0,0 +1,15 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface FindLuogoAutocomplete { + /** + * Name of struttura + */ + luogo: string; + + /** + * Name of struttura + */ + tipo: string; +} diff --git a/src/api/models/find-privilege-res-dto.ts b/src/api/models/find-privilege-res-dto.ts new file mode 100644 index 0000000..2bfd602 --- /dev/null +++ b/src/api/models/find-privilege-res-dto.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { FindActionResDto } from '../models/find-action-res-dto'; +export interface FindPrivilegeResDto { + /** + * Dettagli dell'azione associata. + * @type FindActionResDto + */ + action: FindActionResDto; + + /** + * Identificativo dell'azione associata. + */ + actionId: number; + + /** + * Indica se il privilegio è abilitato. + */ + flagEnabled: boolean; + + /** + * Indica se il privilegio è in sola lettura. + */ + flagReadOnly: boolean; + + /** + * Identificativo univoco del privilegio. + */ + id: number; + + /** + * Identificativo del ruolo associato. + */ + roleId: number; +} diff --git a/src/api/models/find-profile-res-dto.ts b/src/api/models/find-profile-res-dto.ts new file mode 100644 index 0000000..72b294f --- /dev/null +++ b/src/api/models/find-profile-res-dto.ts @@ -0,0 +1,27 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { FindRoleResDto } from '../models/find-role-res-dto'; +export interface FindProfileResDto { + /** + * Identifier of the associated account + */ + accountId: number; + + /** + * Unique identifier for the profile + */ + id: number; + + /** + * Detailed information about the role + * @type FindRoleResDto + */ + role: FindRoleResDto; + + /** + * Identifier of the associated role + */ + roleId: number; +} diff --git a/src/api/models/find-role-res-dto.ts b/src/api/models/find-role-res-dto.ts new file mode 100644 index 0000000..2fda8d6 --- /dev/null +++ b/src/api/models/find-role-res-dto.ts @@ -0,0 +1,26 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface FindRoleResDto { + /** + * Detailed description of the role + * Can be null + */ + description: string | null; + + /** + * Unique identifier for the role + */ + id: number; + + /** + * Standard code representing the role + */ + standardCode: string; + + /** + * Standard name of the role + */ + standardName: string; +} diff --git a/src/api/models/find-status-res-dto.ts b/src/api/models/find-status-res-dto.ts new file mode 100644 index 0000000..6434017 --- /dev/null +++ b/src/api/models/find-status-res-dto.ts @@ -0,0 +1,28 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface FindStatusResDto { + /** + * Detailed description of the status + * Can be null + */ + description?: string | null; + + /** + * Unique identifier for the status + */ + id: number; + + /** + * Standard code representing the status + * Can be null + */ + standardCode?: string | null; + + /** + * Standard name of the status + * Can be null + */ + standardName?: string | null; +} diff --git a/src/api/models/find-strutture.ts b/src/api/models/find-strutture.ts new file mode 100644 index 0000000..1cc143f --- /dev/null +++ b/src/api/models/find-strutture.ts @@ -0,0 +1,11 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { FiltriStrutture } from '../models/filtri-strutture'; +export interface FindStrutture { + /** + * Filtri + */ + filters: FiltriStrutture; +} diff --git a/src/api/models/function.ts b/src/api/models/function.ts new file mode 100644 index 0000000..cfd273d --- /dev/null +++ b/src/api/models/function.ts @@ -0,0 +1,5 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface Function {} diff --git a/src/api/models/generic-message-dto.ts b/src/api/models/generic-message-dto.ts new file mode 100644 index 0000000..1085b18 --- /dev/null +++ b/src/api/models/generic-message-dto.ts @@ -0,0 +1,7 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface GenericMessageDto { + message: string; +} diff --git a/src/api/models/get-privileges-res-dto.ts b/src/api/models/get-privileges-res-dto.ts new file mode 100644 index 0000000..51286a1 --- /dev/null +++ b/src/api/models/get-privileges-res-dto.ts @@ -0,0 +1,45 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface GetPrivilegesResDto { + /** + * Identifier of the associated account + */ + accountId: number; + + /** + * Human-readable name of the action + */ + action: string; + + /** + * Code representing the action + */ + actionCode: string; + + /** + * Identifier of the action associated with this privilege + */ + actionId: number; + + /** + * Human-readable name of the action + */ + flagEnabled: boolean; + + /** + * Human-readable name of the action + */ + flagReadOnly: boolean; + + /** + * Unique identifier for the privilege + */ + id: number; + + /** + * Username of the account with this privilege + */ + username: string; +} diff --git a/src/api/models/get-roles-res-dto.ts b/src/api/models/get-roles-res-dto.ts new file mode 100644 index 0000000..3b02148 --- /dev/null +++ b/src/api/models/get-roles-res-dto.ts @@ -0,0 +1,35 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface GetRolesResDto { + /** + * Identifier of the associated account + */ + accountId: number; + + /** + * Unique identifier for the role record + */ + id: number; + + /** + * Human-readable name of the role + */ + role: string; + + /** + * Code representing the role + */ + roleCode: string; + + /** + * Identifier of the role assigned to the account + */ + roleId: number; + + /** + * Username of the account with this role + */ + username: string; +} diff --git a/src/api/models/lat-lng.ts b/src/api/models/lat-lng.ts new file mode 100644 index 0000000..f958a9c --- /dev/null +++ b/src/api/models/lat-lng.ts @@ -0,0 +1,15 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface LatLng { + /** + * Latitudine della struttura + */ + lat: number; + + /** + * Longitudine della struttura + */ + lng: number; +} diff --git a/src/api/models/lazy-load-event-dto.ts b/src/api/models/lazy-load-event-dto.ts new file mode 100644 index 0000000..8283f69 --- /dev/null +++ b/src/api/models/lazy-load-event-dto.ts @@ -0,0 +1,17 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { LazyLoadEventParametersDto } from '../models/lazy-load-event-parameters-dto'; +export interface LazyLoadEventDto { + /** + * Lazy load event parameters + * @type LazyLoadEventParametersDto + */ + event?: LazyLoadEventParametersDto; + + /** + * Se true restituisce solo le struttureMadri + */ + flagOnlyStrutturaMadre?: boolean; +} diff --git a/src/api/models/lazy-load-event-parameters-dto.ts b/src/api/models/lazy-load-event-parameters-dto.ts new file mode 100644 index 0000000..9737de4 --- /dev/null +++ b/src/api/models/lazy-load-event-parameters-dto.ts @@ -0,0 +1,50 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { Function } from '../models/function'; +import { SortMetaDto } from '../models/sort-meta-dto'; +export interface LazyLoadEventParametersDto { + /** + * Filters applied to the data. + * @type [FilterMetadataDto] + */ + filters?: {}; + + /** + * Index of the first record to fetch + */ + first?: number; + forceUpdate?: Function; + + /** + * Global filter applied to the data + */ + globalFilter?: {}; + + /** + * Index of the last record to fetch + */ + last?: number; + + /** + * Array of multiple sort criteria + * @type SortMetaDto[] + */ + multiSortMeta?: Array; + + /** + * Number of rows to fetch + */ + rows?: number; + + /** + * Field to sort by + */ + sortField?: string; + + /** + * Sort order (1 for ascending, -1 for descending) + */ + sortOrder?: number; +} diff --git a/src/api/models/link-verification-dto.ts b/src/api/models/link-verification-dto.ts new file mode 100644 index 0000000..dedf826 --- /dev/null +++ b/src/api/models/link-verification-dto.ts @@ -0,0 +1,20 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface LinkVerificationDto { + /** + * The unique identifier for the user + */ + id: number; + + /** + * The verification token + */ + token: string; + + /** + * The username of the account + */ + username: string; +} diff --git a/src/api/models/luogo-res.ts b/src/api/models/luogo-res.ts new file mode 100644 index 0000000..70a526e --- /dev/null +++ b/src/api/models/luogo-res.ts @@ -0,0 +1,60 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface LuogoRes { + /** + * Total number of structures in the system + */ + codice: string | null; + + /** + * Total number of structures in the system + */ + codiceRegione: string | null; + + /** + * Total number of structures in the system + */ + codiceStato: string; + + /** + * Total number of structures in the system + */ + comune: string | null; + + /** + * Total number of structures in the system + */ + flagAttivo: boolean; + + /** + * Location name + */ + luogo?: string; + + /** + * Total number of structures in the system + */ + provincia: string | null; + + /** + * Total number of structures in the system + */ + regione: string | null; + + /** + * Total number of structures in the system + */ + siglaProvincia: string | null; + + /** + * Total number of structures in the system + */ + stato: string; + + /** + * Tipo of the place (comune, provincia, regione) + */ + tipo?: string; +} diff --git a/src/api/models/nomenclatore-excerpt-res.ts b/src/api/models/nomenclatore-excerpt-res.ts new file mode 100644 index 0000000..dd3499f --- /dev/null +++ b/src/api/models/nomenclatore-excerpt-res.ts @@ -0,0 +1,40 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface NomenclatoreExcerptRes { + /** + * Codice nomenclatore livello 4 + */ + codice: string; + + /** + * Descrizione nomenclatore livello 4 + */ + descrizione: string; + + /** + * Unique identifier for nomenclatore + */ + id: number; + + /** + * Unique identifier for nomenclatore livello 1 + */ + idLivello1: number; + + /** + * Unique identifier for nomenclatore livello 2 + */ + idLivello2: number; + + /** + * Unique identifier for nomenclatore livello 3 + */ + idLivello3: number; + + /** + * Unique identifier for nomenclatore livello 4 + */ + idLivello4: number; +} diff --git a/src/api/models/nomenclatore-livello-1-res-dto.ts b/src/api/models/nomenclatore-livello-1-res-dto.ts new file mode 100644 index 0000000..1915f2f --- /dev/null +++ b/src/api/models/nomenclatore-livello-1-res-dto.ts @@ -0,0 +1,20 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface NomenclatoreLivello1ResDto { + /** + * Codice nomenclatore livello 1 + */ + codice: string; + + /** + * Descrizione nomenclatore livello 1 + */ + descrizione: string; + + /** + * Unique identifier for nomenclatore livello 1 + */ + id: number; +} diff --git a/src/api/models/nomenclatore-livello-2-res-dto.ts b/src/api/models/nomenclatore-livello-2-res-dto.ts new file mode 100644 index 0000000..9750127 --- /dev/null +++ b/src/api/models/nomenclatore-livello-2-res-dto.ts @@ -0,0 +1,25 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface NomenclatoreLivello2ResDto { + /** + * Codice nomenclatore livello 2 + */ + codice: string; + + /** + * Descrizione nomenclatore livello 2 + */ + descrizione: string; + + /** + * Unique identifier for nomenclatore livello 2 + */ + id: number; + + /** + * Unique identifier for nomenclatore livello 1 + */ + idLivello1: number | null; +} diff --git a/src/api/models/nomenclatore-livello-3-res-dto.ts b/src/api/models/nomenclatore-livello-3-res-dto.ts new file mode 100644 index 0000000..27226db --- /dev/null +++ b/src/api/models/nomenclatore-livello-3-res-dto.ts @@ -0,0 +1,25 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface NomenclatoreLivello3ResDto { + /** + * Codice nomenclatore livello 3 + */ + codice: string; + + /** + * Descrizione nomenclatore livello 3 + */ + descrizione: string; + + /** + * Unique identifier for nomenclatore livello 3 + */ + id: number; + + /** + * Unique identifier for nomenclatore livello 2 + */ + idLivello2: number | null; +} diff --git a/src/api/models/nomenclatore-livello-4-res-dto.ts b/src/api/models/nomenclatore-livello-4-res-dto.ts new file mode 100644 index 0000000..e6ab99e --- /dev/null +++ b/src/api/models/nomenclatore-livello-4-res-dto.ts @@ -0,0 +1,25 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface NomenclatoreLivello4ResDto { + /** + * Codice nomenclatore livello 4 + */ + codice: string; + + /** + * Descrizione nomenclatore livello 4 + */ + descrizione: string; + + /** + * Unique identifier for nomenclatore livello 4 + */ + id: number; + + /** + * Unique identifier for nomenclatore livello 3 + */ + idLivello3: number | null; +} diff --git a/src/api/models/nomenclatore-res.ts b/src/api/models/nomenclatore-res.ts new file mode 100644 index 0000000..8ffbbf5 --- /dev/null +++ b/src/api/models/nomenclatore-res.ts @@ -0,0 +1,120 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface NomenclatoreRes { + /** + * Chiavi di ricerca per il nomenclatore + */ + chiaviRicerca: string | null; + + /** + * Codice nomenclatore livello 4 + */ + codice: string; + + /** + * Codice fasi del nomenclatore + */ + codiceFasi: string | null; + + /** + * Data di fine validità + */ + dataFineValidita: string; + + /** + * Data di inizio validità + */ + dataInizioValidita: string; + + /** + * Data e ora di creazione del record + */ + dataOraCreazione: string | null; + + /** + * Data e ora di modifica del record + */ + dataOraModifica: string | null; + + /** + * Descrizione nomenclatore livello 4 + */ + descrizione: string; + + /** + * Descrizione del rimborso + */ + descrizioneRimborso: string | null; + + /** + * Flag per accorpamento del livello + */ + flagAccorpaLivello: boolean; + + /** + * Flag per necessità di documentazione + */ + flagNecessitaDocumentazione: boolean; + + /** + * Flag per selezionabilità da utenti + */ + flagSelezionabileDaUtenti: boolean; + + /** + * Unique identifier for nomenclatore + */ + id: number; + + /** + * Unique identifier for elemento + */ + idElemento: number | null; + + /** + * Unique identifier for nomenclatore livello 1 + */ + idLivello1: number; + + /** + * Unique identifier for nomenclatore livello 2 + */ + idLivello2: number; + + /** + * Unique identifier for nomenclatore livello 3 + */ + idLivello3: number; + + /** + * Unique identifier for nomenclatore livello 4 + */ + idLivello4: number; + + /** + * Unique identifier for tipo prestazione + */ + idTipoPrestazione: number | null; + + /** + * Unique identifier for unità di misura + */ + idUnitaDiMisura: number | null; + + /** + * Note del nomenclatore + */ + note: string | null; + + /** + * Utente che ha creato il record + */ + utenteCreazione: string | null; + + /** + * Utente che ha modificato il record + */ + utenteModifica: string | null; +} diff --git a/src/api/models/recovery-dto.ts b/src/api/models/recovery-dto.ts new file mode 100644 index 0000000..9512909 --- /dev/null +++ b/src/api/models/recovery-dto.ts @@ -0,0 +1,10 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface RecoveryDto { + /** + * The email address of the user for account recovery + */ + username: string; +} diff --git a/src/api/models/sort-meta-dto.ts b/src/api/models/sort-meta-dto.ts new file mode 100644 index 0000000..0117b90 --- /dev/null +++ b/src/api/models/sort-meta-dto.ts @@ -0,0 +1,15 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface SortMetaDto { + /** + * Field name to sort by + */ + field: string; + + /** + * Sort order (1 for ascending, -1 for descending) + */ + order: number; +} diff --git a/src/api/models/stipulatore.ts b/src/api/models/stipulatore.ts new file mode 100644 index 0000000..917a638 --- /dev/null +++ b/src/api/models/stipulatore.ts @@ -0,0 +1,20 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface Stipulatore { + /** + * Code representing the stipulatore + */ + codice: string; + + /** + * Unique identifier for the stipulatore + */ + id: number; + + /** + * Nome of the stipulatore + */ + nome: string; +} diff --git a/src/api/models/struttura-excerpt-res.ts b/src/api/models/struttura-excerpt-res.ts new file mode 100644 index 0000000..1fd9b36 --- /dev/null +++ b/src/api/models/struttura-excerpt-res.ts @@ -0,0 +1,70 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { CodiceLuogo } from '../models/codice-luogo'; +import { StrutturaMadre } from '../models/struttura-madre'; +import { StrutturaTipoStruttura } from '../models/struttura-tipo-struttura'; +import { TipoGestione } from '../models/tipo-gestione'; +import { VisibilitaStruttura } from '../models/visibilita-struttura'; +export interface StrutturaExcerptRes { + /** + * Postal code (CAP) of the structure (can be null) + */ + cap: string | null; + + /** + * Location code details (if available) + * @type CodiceLuogo + */ + codiceLuogo: CodiceLuogo | null; + + /** + * Unique identifier for the structure + */ + id: number; + + /** + * Address of the structure (can be null) + */ + indirizzo: string | null; + + /** + * Name of the structure + */ + nome: string; + + /** + * Civic number of the structure (can be null) + */ + numeroCivico: string | null; + + /** + * VAT number of the structure (can be null) + */ + partitaIva: string | null; + + /** + * Parent structure details (if available) + * @type StrutturaMadre + */ + strutturaMadre: StrutturaMadre; + + /** + * Types of the structure + * @type [StrutturaTipoStruttura] + */ + struttureTipiStrutture: Array; + + /** + * Management type of the structure + * @type TipoGestione + */ + tipoGestione: TipoGestione; + + /** + * Visibilità struttura details + * @type VisibilitaStruttura + */ + visibilitaStrutture: Array; +} diff --git a/src/api/models/struttura-madre.ts b/src/api/models/struttura-madre.ts new file mode 100644 index 0000000..105fa90 --- /dev/null +++ b/src/api/models/struttura-madre.ts @@ -0,0 +1,20 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface StrutturaMadre { + /** + * Unique identifier for the structure + */ + id: number; + + /** + * Name of the structure + */ + nome: string; + + /** + * VAT number of the structure (can be null) + */ + partitaIva: string | null; +} diff --git a/src/api/models/struttura-tipo-struttura.ts b/src/api/models/struttura-tipo-struttura.ts new file mode 100644 index 0000000..0f3fc0e --- /dev/null +++ b/src/api/models/struttura-tipo-struttura.ts @@ -0,0 +1,17 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { TipoStruttura } from '../models/tipo-struttura'; +export interface StrutturaTipoStruttura { + /** + * Unique identifier for StrutturaTipoStruttura + */ + id: number; + + /** + * Tipo della struttura + * @type TipoStruttura + */ + tipo: TipoStruttura; +} diff --git a/src/api/models/struttura.ts b/src/api/models/struttura.ts new file mode 100644 index 0000000..ecb6f5c --- /dev/null +++ b/src/api/models/struttura.ts @@ -0,0 +1,197 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { CodiceLuogo } from '../models/codice-luogo'; +import { ConvenzioniStrutture } from '../models/convenzioni-strutture'; +import { StrutturaMadre } from '../models/struttura-madre'; +import { StrutturaTipoStruttura } from '../models/struttura-tipo-struttura'; +import { TipoGestione } from '../models/tipo-gestione'; +import { VisibilitaStruttura } from '../models/visibilita-struttura'; +export interface Struttura { + /** + * Postal code (CAP) of the structure (can be null) + */ + cap: string | null; + + /** + * Location code details (if available) + * @type CodiceLuogo + */ + codiceLuogo: CodiceLuogo | null; + + /** + * List of conventions associated with the structure + * @type [ConvenzioniStrutture] + */ + convenzioniStrutture: Array; + + /** + * Private CUP code of the structure (can be null) + */ + cupPrivato: string | null; + + /** + * Public CUP code of the structure (can be null) + */ + cupPubblico: string | null; + + /** + * Date and time of creation + */ + dataOraCreazione: string | null; + + /** + * Date and time of last modification + */ + dataOraModifica: string | null; + + /** + * Email address of the structure (can be null) + */ + email: string | null; + + /** + * Fax number of the structure (can be null) + */ + fax: string | null; + + /** + * Indicates if the structure is filtered for publication + */ + filtraPubblicazione: boolean; + + /** + * Indicates if the structure is conventioned + */ + flagConvenzionata: boolean; + + /** + * Unique identifier for the structure + */ + id: number; + + /** + * Parent structure ID (if available) + */ + idStrutturaMadre: number; + + /** + * Type of management of the structure + */ + idTipoGestione: number; + + /** + * Type of the structure + */ + idTipoStruttura: number; + + /** + * Address of the structure (can be null) + */ + indirizzo: string | null; + + /** + * Latitude of the structure (can be null) + */ + latitudine: string | null; + + /** + * City or locality of the structure (can be null) + */ + localita: string | null; + + /** + * Longitude of the structure (can be null) + */ + longitudine: string | null; + + /** + * Name of the structure + */ + nome: string; + + /** + * Additional notes about the structure (can be null) + */ + note: string | null; + + /** + * Number of the structure (can be null) + */ + numero: number | null; + + /** + * Civic number of the structure (can be null) + */ + numeroCivico: string | null; + + /** + * VAT number of the structure (can be null) + */ + partitaIva: string | null; + + /** + * Province ID of the structure (can be null) + */ + provincia: number | null; + + /** + * Website of the structure (can be null) + */ + sitoWeb: string | null; + + /** + * Status ID of the structure (can be null) + */ + stato: number | null; + + /** + * Number of stars of the structure (can be null) + */ + stelline: number; + + /** + * Parent structure details (if available) + * @type StrutturaMadre + */ + strutturaMadre: StrutturaMadre; + + /** + * Types of the structure + * @type [StrutturaTipoStruttura] + */ + struttureTipiStrutture: Array; + + /** + * First phone number of the structure (can be null) + */ + telefono1: string | null; + + /** + * Second phone number of the structure (can be null) + */ + telefono2: string | null; + + /** + * Management type of the structure + * @type TipoGestione + */ + tipoGestione: TipoGestione; + + /** + * User who created the structure + */ + utenteCreazione: string | null; + + /** + * User who last modified the structure + */ + utenteModifica: string | null; + + /** + * Visibilità struttura details + * @type VisibilitaStruttura + */ + visibilitaStrutture: Array; +} diff --git a/src/api/models/strutture-pubbliche-excerpt-res-dto.ts b/src/api/models/strutture-pubbliche-excerpt-res-dto.ts new file mode 100644 index 0000000..8f600e8 --- /dev/null +++ b/src/api/models/strutture-pubbliche-excerpt-res-dto.ts @@ -0,0 +1,91 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { CodiceLuogoExcerptResDto } from '../models/codice-luogo-excerpt-res-dto'; +export interface StrutturePubblicheExcerptResDto { + /** + * cap della struttura + */ + cap: string | null; + + /** + * Luogo della struttura + */ + codiceLuogo: CodiceLuogoExcerptResDto; + + /** + * cupPrivato della struttura + */ + cupPrivato: string | null; + + /** + * cupPubblico della struttura + */ + cupPubblico: string | null; + + /** + * email della struttura + */ + email: string | null; + + /** + * fax della struttura + */ + fax: string | null; + + /** + * Id della struttura + */ + id: number; + + /** + * indirizzo della struttura + */ + indirizzo: string | null; + + /** + * latitudine della struttura + */ + latitudine: string | null; + + /** + * longitudine della struttura + */ + longitudine: string | null; + + /** + * Nome della struttura + */ + nome: string; + + /** + * numeroCivico della struttura + */ + numeroCivico: string | null; + + /** + * partitaIva della struttura + */ + partitaIva: string | null; + + /** + * sitoWeb della struttura + */ + sitoWeb: string | null; + + /** + * stelline della struttura + */ + stelline: string; + + /** + * telefono1 della struttura + */ + telefono1: string | null; + + /** + * telefono2 della struttura + */ + telefono2: string | null; +} diff --git a/src/api/models/strutture-pubbliche-res-dto.ts b/src/api/models/strutture-pubbliche-res-dto.ts new file mode 100644 index 0000000..9279c91 --- /dev/null +++ b/src/api/models/strutture-pubbliche-res-dto.ts @@ -0,0 +1,17 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { LatLng } from '../models/lat-lng'; +import { StrutturePubblicheExcerptResDto } from '../models/strutture-pubbliche-excerpt-res-dto'; +export interface StrutturePubblicheResDto { + /** + * Latitudine e Longitudine di partenza + */ + startingLocation?: LatLng | null; + + /** + * Struttura + */ + struttura: StrutturePubblicheExcerptResDto; +} diff --git a/src/api/models/tipo-gestione.ts b/src/api/models/tipo-gestione.ts new file mode 100644 index 0000000..1f0c369 --- /dev/null +++ b/src/api/models/tipo-gestione.ts @@ -0,0 +1,20 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface TipoGestione { + /** + * Code representing the management type + */ + codice: string; + + /** + * Description of the management type + */ + descrizione: string; + + /** + * Unique identifier for the management type + */ + id: number; +} diff --git a/src/api/models/tipo-prestazione-res-dto.ts b/src/api/models/tipo-prestazione-res-dto.ts new file mode 100644 index 0000000..38cc6e8 --- /dev/null +++ b/src/api/models/tipo-prestazione-res-dto.ts @@ -0,0 +1,20 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface TipoPrestazioneResDto { + /** + * Codice tipo-prestazione + */ + codice: string; + + /** + * Descrizione tipo-prestazione + */ + descrizione: string; + + /** + * Unique identifier for tipo-prestazione + */ + id: number; +} diff --git a/src/api/models/tipo-struttura-res-dto.ts b/src/api/models/tipo-struttura-res-dto.ts new file mode 100644 index 0000000..4412a11 --- /dev/null +++ b/src/api/models/tipo-struttura-res-dto.ts @@ -0,0 +1,20 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface TipoStrutturaResDto { + /** + * Codice tipo-struttura + */ + codice: string; + + /** + * Descrizione tipo-struttura + */ + descrizione: string; + + /** + * Unique identifier for tipo-struttura + */ + id: number; +} diff --git a/src/api/models/tipo-struttura.ts b/src/api/models/tipo-struttura.ts new file mode 100644 index 0000000..9f4fce5 --- /dev/null +++ b/src/api/models/tipo-struttura.ts @@ -0,0 +1,20 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface TipoStruttura { + /** + * Code representing the structure type + */ + codice: string; + + /** + * Description of the structure type + */ + descrizione: string; + + /** + * Unique identifier for the structure type + */ + id: number; +} diff --git a/src/api/models/unita-di-misura-res-dto.ts b/src/api/models/unita-di-misura-res-dto.ts new file mode 100644 index 0000000..77ba66e --- /dev/null +++ b/src/api/models/unita-di-misura-res-dto.ts @@ -0,0 +1,20 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface UnitaDiMisuraResDto { + /** + * Codice unita-di-misura + */ + codice: string; + + /** + * Descrizione unita-di-misura + */ + descrizione: string; + + /** + * Unique identifier for unita-di-misura + */ + id: number; +} diff --git a/src/api/models/update-convenzione-struttura.ts b/src/api/models/update-convenzione-struttura.ts new file mode 100644 index 0000000..dee86e2 --- /dev/null +++ b/src/api/models/update-convenzione-struttura.ts @@ -0,0 +1,55 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface UpdateConvenzioneStruttura { + /** + * General terms and conditions of the convention + */ + condizioniGeneraliConvenzione: string | null; + + /** + * End date of the convention + */ + dataFine: string | null; + + /** + * Start date of the convention + */ + dataInizio: string; + + /** + * Indicates whether the convention is direct + */ + flagConvenzioneDiretta: boolean; + + /** + * Indicates whether the convention is indirect + */ + flagConvenzioneIndiretta: boolean; + + /** + * Indicates whether the convention is related to ticketing + */ + flagConvenzioneTicket: boolean; + + /** + * Indicates whether the convention includes the choice of a doctor + */ + flagSceltaMedico: boolean; + + /** + * Indicates whether the convention is currently suspended + */ + flagSospesa: boolean; + + /** + * Indicates whether the pricing is based on the parent company's tariff + */ + flagUsaTariffarioCasaMadre: boolean; + + /** + * Identifier of the stipulatore + */ + idStipulatore: number | null; +} diff --git a/src/api/models/update-nomenclatore-livello-1.ts b/src/api/models/update-nomenclatore-livello-1.ts new file mode 100644 index 0000000..9d990ff --- /dev/null +++ b/src/api/models/update-nomenclatore-livello-1.ts @@ -0,0 +1,15 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface UpdateNomenclatoreLivello1 { + /** + * Codice nomenclatore livello 1 + */ + codice: string; + + /** + * Descrizione nomenclatore livello 1 + */ + descrizione: string; +} diff --git a/src/api/models/update-nomenclatore-livello-2.ts b/src/api/models/update-nomenclatore-livello-2.ts new file mode 100644 index 0000000..d5b3772 --- /dev/null +++ b/src/api/models/update-nomenclatore-livello-2.ts @@ -0,0 +1,15 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface UpdateNomenclatoreLivello2 { + /** + * Codice nomenclatore livello 2 + */ + codice: string; + + /** + * Descrizione nomenclatore livello 2 + */ + descrizione: string; +} diff --git a/src/api/models/update-nomenclatore-livello-3.ts b/src/api/models/update-nomenclatore-livello-3.ts new file mode 100644 index 0000000..e6febf9 --- /dev/null +++ b/src/api/models/update-nomenclatore-livello-3.ts @@ -0,0 +1,15 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface UpdateNomenclatoreLivello3 { + /** + * Codice nomenclatore livello 3 + */ + codice: string; + + /** + * Descrizione nomenclatore livello 3 + */ + descrizione: string; +} diff --git a/src/api/models/update-nomenclatore-livello-4.ts b/src/api/models/update-nomenclatore-livello-4.ts new file mode 100644 index 0000000..f2a2377 --- /dev/null +++ b/src/api/models/update-nomenclatore-livello-4.ts @@ -0,0 +1,15 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface UpdateNomenclatoreLivello4 { + /** + * Codice nomenclatore livello 4 + */ + codice: string; + + /** + * Descrizione nomenclatore livello 4 + */ + descrizione: string; +} diff --git a/src/api/models/update-nomenclatore.ts b/src/api/models/update-nomenclatore.ts new file mode 100644 index 0000000..89f8112 --- /dev/null +++ b/src/api/models/update-nomenclatore.ts @@ -0,0 +1,95 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface UpdateNomenclatore { + /** + * Chiavi di ricerca per il nomenclatore + */ + chiaviRicerca?: string | null; + + /** + * Codice nomenclatore livello 4 + */ + codice: string; + + /** + * Codice fasi del nomenclatore + */ + codiceFasi?: string | null; + + /** + * Data di fine validità + */ + dataFineValidita: string; + + /** + * Data di inizio validità + */ + dataInizioValidita: string; + + /** + * Descrizione nomenclatore livello 4 + */ + descrizione: string; + + /** + * Descrizione del rimborso + */ + descrizioneRimborso: string | null; + + /** + * Flag per accorpamento del livello + */ + flagAccorpaLivello?: boolean | null; + + /** + * Flag per necessità di documentazione + */ + flagNecessitaDocumentazione?: boolean | null; + + /** + * Flag per selezionabilità da utenti + */ + flagSelezionabileDaUtenti?: boolean | null; + + /** + * Unique identifier for elemento + */ + idElemento: number; + + /** + * Unique identifier for nomenclatore livello 1 + */ + idLivello1: number; + + /** + * Unique identifier for nomenclatore livello 2 + */ + idLivello2: number; + + /** + * Unique identifier for nomenclatore livello 3 + */ + idLivello3: number; + + /** + * Unique identifier for nomenclatore livello 4 + */ + idLivello4: number; + + /** + * Unique identifier for tipo prestazione + */ + idTipoPrestazione: number; + + /** + * Unique identifier for unità di misura + */ + idUnitaDiMisura: number; + + /** + * Note del nomenclatore + */ + note?: string | null; +} diff --git a/src/api/models/update-struttura.ts b/src/api/models/update-struttura.ts new file mode 100644 index 0000000..e6f159b --- /dev/null +++ b/src/api/models/update-struttura.ts @@ -0,0 +1,110 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface UpdateStruttura { + /** + * CAP della struttura + */ + cap?: string | null; + + /** + * Codice della provincia + */ + codiceLuogo: string; + + /** + * CUP per prenotazioni private + */ + cupPrivato?: string | null; + + /** + * CUP per prenotazioni pubbliche + */ + cupPubblico?: string | null; + + /** + * Email della struttura + */ + email?: string | null; + + /** + * Numero di fax della struttura + */ + fax?: string | null; + + /** + * Indica se la struttura è filtrata per la pubblicazione + */ + filtraPubblicazione?: boolean; + + /** + * Indica se la struttura è convenzionata + */ + flagConvenzionata?: boolean; + + /** + * ID della struttura madre + */ + idStrutturaMadre?: number | null; + + /** + * ID del tipo di struttura + */ + idTipiStruttura: Array; + + /** + * ID del tipo di gestione + */ + idTipoGestione: number; + + /** + * Indirizzo della struttura + */ + indirizzo?: string | null; + + /** + * Nome della struttura + */ + nome: string; + + /** + * Note aggiuntive sulla struttura + */ + note?: string | null; + + /** + * Numero identificativo della struttura + */ + numero?: number | null; + + /** + * Numero civico della struttura + */ + numeroCivico?: string | null; + + /** + * Partita IVA della struttura + */ + partitaIva?: string | null; + + /** + * Sito web della struttura + */ + sitoWeb?: string | null; + + /** + * Numero di stelle della struttura + */ + stelline: number; + + /** + * Telefono principale della struttura + */ + telefono1?: string | null; + + /** + * Telefono secondario della struttura + */ + telefono2?: string | null; +} diff --git a/src/api/models/update-visibilita-struttura.ts b/src/api/models/update-visibilita-struttura.ts new file mode 100644 index 0000000..beb3846 --- /dev/null +++ b/src/api/models/update-visibilita-struttura.ts @@ -0,0 +1,12 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { VisibilitaStrutturaDto } from '../models/visibilita-struttura-dto'; +export interface UpdateVisibilitaStruttura { + /** + * Array di visibilità + * @type VisibilitaStrutturaDto[] + */ + visibilitaStrutture: Array; +} diff --git a/src/api/models/visibilita-struttura-dto.ts b/src/api/models/visibilita-struttura-dto.ts new file mode 100644 index 0000000..a7262f7 --- /dev/null +++ b/src/api/models/visibilita-struttura-dto.ts @@ -0,0 +1,15 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface VisibilitaStrutturaDto { + /** + * Flag proprietario della struttura + */ + flagProprietario: boolean; + + /** + * Identifier of the stipulatore + */ + idStipulatore: number; +} diff --git a/src/api/models/visibilita-struttura.ts b/src/api/models/visibilita-struttura.ts new file mode 100644 index 0000000..e804a7b --- /dev/null +++ b/src/api/models/visibilita-struttura.ts @@ -0,0 +1,25 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export interface VisibilitaStruttura { + /** + * Flag proprietario + */ + flagProprietario: boolean; + + /** + * Unique identifier for the visibilità struttura + */ + id: number; + + /** + * Id stipulatore + */ + idStipulatore: number; + + /** + * Id struttura + */ + idStruttura: number; +} diff --git a/src/api/request-builder.ts b/src/api/request-builder.ts new file mode 100644 index 0000000..83c949f --- /dev/null +++ b/src/api/request-builder.ts @@ -0,0 +1,418 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { + HttpRequest, + HttpParameterCodec, + HttpParams, + HttpHeaders, + HttpContext, +} from '@angular/common/http'; + +/** + * Custom parameter codec to correctly handle the plus sign in parameter + * values. See https://github.com/angular/angular/issues/18261 + */ +class ParameterCodec implements HttpParameterCodec { + encodeKey(key: string): string { + return encodeURIComponent(key); + } + + encodeValue(value: string): string { + return encodeURIComponent(value); + } + + decodeKey(key: string): string { + return decodeURIComponent(key); + } + + decodeValue(value: string): string { + return decodeURIComponent(value); + } +} +const ParameterCodecInstance = new ParameterCodec(); + +/** + * Defines the options for appending a parameter + */ +interface ParameterOptions { + style?: string; + explode?: boolean; +} + +/** + * Base class for a parameter + */ +abstract class Parameter { + constructor( + public name: string, + public value: any, + public options: ParameterOptions, + defaultStyle: string, + defaultExplode: boolean, + ) { + this.options = options || {}; + if (this.options.style === null || this.options.style === undefined) { + this.options.style = defaultStyle; + } + if (this.options.explode === null || this.options.explode === undefined) { + this.options.explode = defaultExplode; + } + } + + serializeValue(value: any, separator = ','): string { + if (value === null || value === undefined) { + return ''; + } else if (value instanceof Array) { + return value + .map((v) => + this.serializeValue(v) + .split(separator) + .join(encodeURIComponent(separator)), + ) + .join(separator); + } else if (typeof value === 'object') { + const array: string[] = []; + for (const key of Object.keys(value)) { + let propVal = value[key]; + if (propVal !== null && propVal !== undefined) { + propVal = this.serializeValue(propVal) + .split(separator) + .join(encodeURIComponent(separator)); + if (this.options.explode) { + array.push(`${key}=${propVal}`); + } else { + array.push(key); + array.push(propVal); + } + } + } + return array.join(separator); + } else { + return String(value); + } + } +} + +/** + * A parameter in the operation path + */ +class PathParameter extends Parameter { + constructor(name: string, value: any, options: ParameterOptions) { + super(name, value, options, 'simple', false); + } + + append(path: string): string { + let value = this.value; + if (value === null || value === undefined) { + value = ''; + } + let prefix = this.options.style === 'label' ? '.' : ''; + let separator = this.options.explode ? (prefix === '' ? ',' : prefix) : ','; + let alreadySerialized = false; + if (this.options.style === 'matrix') { + // The parameter name is just used as prefix, except in some cases... + prefix = `;${this.name}=`; + if (this.options.explode && typeof value === 'object') { + prefix = ';'; + if (value instanceof Array) { + // For arrays we have to repeat the name for each element + value = value.map( + (v) => `${this.name}=${this.serializeValue(v, ';')}`, + ); + value = value.join(';'); + alreadySerialized = true; + } else { + // For objects we have to put each the key / value pairs + value = this.serializeValue(value, ';'); + alreadySerialized = true; + } + } + } + value = + prefix + + (alreadySerialized ? value : this.serializeValue(value, separator)); + // Replace both the plain variable and the corresponding variant taking in the prefix and explode into account + path = path.replace(`{${this.name}}`, value); + path = path.replace( + `{${prefix}${this.name}${this.options.explode ? '*' : ''}}`, + value, + ); + return path; + } + + // @ts-ignore + serializeValue(value: any, separator = ','): string { + var result = + typeof value === 'string' + ? encodeURIComponent(value) + : super.serializeValue(value, separator); + result = result.replace(/%3D/g, '='); + result = result.replace(/%3B/g, ';'); + result = result.replace(/%2C/g, ','); + return result; + } +} + +/** + * A parameter in the query + */ +class QueryParameter extends Parameter { + constructor(name: string, value: any, options: ParameterOptions) { + super(name, value, options, 'form', true); + } + + append(params: HttpParams): HttpParams { + if (this.value instanceof Array) { + // Array serialization + if (this.options.explode) { + for (const v of this.value) { + params = params.append(this.name, this.serializeValue(v)); + } + } else { + const separator = + this.options.style === 'spaceDelimited' + ? ' ' + : this.options.style === 'pipeDelimited' + ? '|' + : ','; + return params.append( + this.name, + this.serializeValue(this.value, separator), + ); + } + } else if (this.value !== null && typeof this.value === 'object') { + // Object serialization + if (this.options.style === 'deepObject') { + // Append a parameter for each key, in the form `name[key]` + for (const key of Object.keys(this.value)) { + const propVal = this.value[key]; + if (propVal !== null && propVal !== undefined) { + params = params.append( + `${this.name}[${key}]`, + this.serializeValue(propVal), + ); + } + } + } else if (this.options.explode) { + // Append a parameter for each key without using the parameter name + for (const key of Object.keys(this.value)) { + const propVal = this.value[key]; + if (propVal !== null && propVal !== undefined) { + params = params.append(key, this.serializeValue(propVal)); + } + } + } else { + // Append a single parameter whose values are a comma-separated list of key,value,key,value... + const array: any[] = []; + for (const key of Object.keys(this.value)) { + const propVal = this.value[key]; + if (propVal !== null && propVal !== undefined) { + array.push(key); + array.push(propVal); + } + } + params = params.append(this.name, this.serializeValue(array)); + } + } else if (this.value !== null && this.value !== undefined) { + // Plain value + params = params.append(this.name, this.serializeValue(this.value)); + } + return params; + } +} + +/** + * A parameter in the HTTP request header + */ +class HeaderParameter extends Parameter { + constructor(name: string, value: any, options: ParameterOptions) { + super(name, value, options, 'simple', false); + } + + append(headers: HttpHeaders): HttpHeaders { + if (this.value !== null && this.value !== undefined) { + if (this.value instanceof Array) { + for (const v of this.value) { + headers = headers.append(this.name, this.serializeValue(v)); + } + } else { + headers = headers.append(this.name, this.serializeValue(this.value)); + } + } + return headers; + } +} + +/** + * Helper to build http requests from parameters + */ +export class RequestBuilder { + private _path = new Map(); + private _query = new Map(); + private _header = new Map(); + _bodyContent: any | null; + _bodyContentType?: string; + + constructor( + public rootUrl: string, + public operationPath: string, + public method: string, + ) {} + + /** + * Sets a path parameter + */ + path(name: string, value: any, options?: ParameterOptions): void { + this._path.set(name, new PathParameter(name, value, options || {})); + } + + /** + * Sets a query parameter + */ + query(name: string, value: any, options?: ParameterOptions): void { + this._query.set(name, new QueryParameter(name, value, options || {})); + } + + /** + * Sets a header parameter + */ + header(name: string, value: any, options?: ParameterOptions): void { + this._header.set(name, new HeaderParameter(name, value, options || {})); + } + + /** + * Sets the body content, along with the content type + */ + body(value: any, contentType = 'application/json'): void { + if (value instanceof Blob) { + this._bodyContentType = value.type; + } else { + this._bodyContentType = contentType; + } + if ( + this._bodyContentType === 'application/x-www-form-urlencoded' && + value !== null && + typeof value === 'object' + ) { + // Handle URL-encoded data + const pairs: Array<[string, string]> = []; + for (const key of Object.keys(value)) { + let val = value[key]; + if (!(val instanceof Array)) { + val = [val]; + } + for (const v of val) { + const formValue = this.formDataValue(v); + if (formValue !== null) { + pairs.push([key, formValue]); + } + } + } + this._bodyContent = pairs + .map((p) => `${encodeURIComponent(p[0])}=${encodeURIComponent(p[1])}`) + .join('&'); + } else if (this._bodyContentType === 'multipart/form-data') { + // Handle multipart form data + const formData = new FormData(); + if (value !== null && value !== undefined) { + for (const key of Object.keys(value)) { + const val = value[key]; + if (val instanceof Array) { + for (const v of val) { + const toAppend = this.formDataValue(v); + if (toAppend !== null) { + formData.append(key, toAppend); + } + } + } else { + const toAppend = this.formDataValue(val); + if (toAppend !== null) { + formData.set(key, toAppend); + } + } + } + } + this._bodyContent = formData; + } else { + // The body is the plain content + this._bodyContent = value; + } + } + + private formDataValue(value: any): any { + if (value === null || value === undefined) { + return null; + } + if (value instanceof Blob) { + return value; + } + if (typeof value === 'object') { + return new Blob([JSON.stringify(value)], { type: 'application/json' }); + } + return String(value); + } + + /** + * Builds the request with the current set parameters + */ + build(options?: { + /** Which content types to accept */ + accept?: string; + + /** The expected response type */ + responseType?: 'json' | 'text' | 'blob' | 'arraybuffer'; + + /** Whether to report progress on uploads / downloads */ + reportProgress?: boolean; + + /** Allow passing HttpContext for HttpClient */ + context?: HttpContext; + }): HttpRequest { + options = options || {}; + + // Path parameters + let path = this.operationPath; + for (const pathParam of this._path.values()) { + path = pathParam.append(path); + } + const url = this.rootUrl + path; + + // Query parameters + let httpParams = new HttpParams({ + encoder: ParameterCodecInstance, + }); + for (const queryParam of this._query.values()) { + httpParams = queryParam.append(httpParams); + } + + // Header parameters + let httpHeaders = new HttpHeaders(); + if (options.accept) { + httpHeaders = httpHeaders.append('Accept', options.accept); + } + for (const headerParam of this._header.values()) { + httpHeaders = headerParam.append(httpHeaders); + } + + // Request content headers + if (this._bodyContentType && !(this._bodyContent instanceof FormData)) { + httpHeaders = httpHeaders.set('Content-Type', this._bodyContentType); + } + + // Perform the request + return new HttpRequest( + this.method.toUpperCase(), + url, + this._bodyContent, + { + params: httpParams, + headers: httpHeaders, + responseType: options.responseType, + reportProgress: options.reportProgress, + context: options.context, + }, + ); + } +} diff --git a/src/api/services.ts b/src/api/services.ts new file mode 100644 index 0000000..f8a238d --- /dev/null +++ b/src/api/services.ts @@ -0,0 +1,12 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +export { StruttureApiClient } from './services/strutture-api-client'; +export { AuthApiClient } from './services/auth-api-client'; +export { AccountsApiClient } from './services/accounts-api-client'; +export { StipulatoriApiClient } from './services/stipulatori-api-client'; +export { RolesApiClient } from './services/roles-api-client'; +export { NomenclatoreApiClient } from './services/nomenclatore-api-client'; +export { LuoghiApiClient } from './services/luoghi-api-client'; +export { StrutturePubblicheApiClient } from './services/strutture-pubbliche-api-client'; diff --git a/src/api/services/accounts-api-client.ts b/src/api/services/accounts-api-client.ts new file mode 100644 index 0000000..5d6cd31 --- /dev/null +++ b/src/api/services/accounts-api-client.ts @@ -0,0 +1,586 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +import { BaseService } from '../base-service'; +import { ApiConfiguration } from '../api-configuration'; +import { StrictHttpResponse } from '../strict-http-response'; + +import { accountsControllerCreateAccount } from '../fn/accounts/accounts-controller-create-account'; +import { AccountsControllerCreateAccount$Params } from '../fn/accounts/accounts-controller-create-account'; +import { accountsControllerDeleteAccount } from '../fn/accounts/accounts-controller-delete-account'; +import { AccountsControllerDeleteAccount$Params } from '../fn/accounts/accounts-controller-delete-account'; +import { accountsControllerEditAccount } from '../fn/accounts/accounts-controller-edit-account'; +import { AccountsControllerEditAccount$Params } from '../fn/accounts/accounts-controller-edit-account'; +import { accountsControllerEditAccountStipulatori } from '../fn/accounts/accounts-controller-edit-account-stipulatori'; +import { AccountsControllerEditAccountStipulatori$Params } from '../fn/accounts/accounts-controller-edit-account-stipulatori'; +import { accountsControllerEditAnagraficaPersonale } from '../fn/accounts/accounts-controller-edit-anagrafica-personale'; +import { AccountsControllerEditAnagraficaPersonale$Params } from '../fn/accounts/accounts-controller-edit-anagrafica-personale'; +import { accountsControllerEditPasswordPersonale } from '../fn/accounts/accounts-controller-edit-password-personale'; +import { AccountsControllerEditPasswordPersonale$Params } from '../fn/accounts/accounts-controller-edit-password-personale'; +import { accountsControllerFetchAccount } from '../fn/accounts/accounts-controller-fetch-account'; +import { AccountsControllerFetchAccount$Params } from '../fn/accounts/accounts-controller-fetch-account'; +import { accountsControllerFetchAccounts } from '../fn/accounts/accounts-controller-fetch-accounts'; +import { AccountsControllerFetchAccounts$Params } from '../fn/accounts/accounts-controller-fetch-accounts'; +import { accountsControllerFetchAccountStatus } from '../fn/accounts/accounts-controller-fetch-account-status'; +import { AccountsControllerFetchAccountStatus$Params } from '../fn/accounts/accounts-controller-fetch-account-status'; +import { accountsControllerGetAccountStipulatori } from '../fn/accounts/accounts-controller-get-account-stipulatori'; +import { AccountsControllerGetAccountStipulatori$Params } from '../fn/accounts/accounts-controller-get-account-stipulatori'; +import { accountsControllerSendActivationLink } from '../fn/accounts/accounts-controller-send-activation-link'; +import { AccountsControllerSendActivationLink$Params } from '../fn/accounts/accounts-controller-send-activation-link'; +import { FindAccountResDto } from '../models/find-account-res-dto'; +import { FindAccountsResDto } from '../models/find-accounts-res-dto'; +import { FindAccountStatusResDto } from '../models/find-account-status-res-dto'; +import { FindAccountStipulatoriResDto } from '../models/find-account-stipulatori-res-dto'; +import { GenericMessageDto } from '../models/generic-message-dto'; +import { Stipulatore } from '../models/stipulatore'; + +@Injectable({ providedIn: 'root' }) +export class AccountsApiClient extends BaseService { + constructor(config: ApiConfiguration, http: HttpClient) { + super(config, http); + } + + /** Path part for operation `accountsControllerFetchAccounts()` */ + static readonly AccountsControllerFetchAccountsPath = '/admin/accounts/list'; + + /** + * Get all Accounts. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `accountsControllerFetchAccounts()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + accountsControllerFetchAccounts$Response( + params: AccountsControllerFetchAccounts$Params, + context?: HttpContext, + ): Observable> { + return accountsControllerFetchAccounts( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get all Accounts. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `accountsControllerFetchAccounts$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + accountsControllerFetchAccounts( + params: AccountsControllerFetchAccounts$Params, + context?: HttpContext, + ): Observable { + return this.accountsControllerFetchAccounts$Response(params, context).pipe( + map( + (r: StrictHttpResponse): FindAccountsResDto => + r.body, + ), + ); + } + + /** Path part for operation `accountsControllerFetchAccountStatus()` */ + static readonly AccountsControllerFetchAccountStatusPath = + '/admin/accounts/status'; + + /** + * Get all status. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `accountsControllerFetchAccountStatus()` instead. + * + * This method doesn't expect any request body. + */ + accountsControllerFetchAccountStatus$Response( + params?: AccountsControllerFetchAccountStatus$Params, + context?: HttpContext, + ): Observable>> { + return accountsControllerFetchAccountStatus( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get all status. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `accountsControllerFetchAccountStatus$Response()` instead. + * + * This method doesn't expect any request body. + */ + accountsControllerFetchAccountStatus( + params?: AccountsControllerFetchAccountStatus$Params, + context?: HttpContext, + ): Observable> { + return this.accountsControllerFetchAccountStatus$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse>, + ): Array => r.body, + ), + ); + } + + /** Path part for operation `accountsControllerFetchAccount()` */ + static readonly AccountsControllerFetchAccountPath = + '/admin/accounts/id/{id}'; + + /** + * Get account detail. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `accountsControllerFetchAccount()` instead. + * + * This method doesn't expect any request body. + */ + accountsControllerFetchAccount$Response( + params: AccountsControllerFetchAccount$Params, + context?: HttpContext, + ): Observable> { + return accountsControllerFetchAccount( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get account detail. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `accountsControllerFetchAccount$Response()` instead. + * + * This method doesn't expect any request body. + */ + accountsControllerFetchAccount( + params: AccountsControllerFetchAccount$Params, + context?: HttpContext, + ): Observable { + return this.accountsControllerFetchAccount$Response(params, context).pipe( + map( + (r: StrictHttpResponse): FindAccountResDto => r.body, + ), + ); + } + + /** Path part for operation `accountsControllerDeleteAccount()` */ + static readonly AccountsControllerDeleteAccountPath = + '/admin/accounts/id/{id}'; + + /** + * Delete account. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `accountsControllerDeleteAccount()` instead. + * + * This method doesn't expect any request body. + */ + accountsControllerDeleteAccount$Response( + params: AccountsControllerDeleteAccount$Params, + context?: HttpContext, + ): Observable> { + return accountsControllerDeleteAccount( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Delete account. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `accountsControllerDeleteAccount$Response()` instead. + * + * This method doesn't expect any request body. + */ + accountsControllerDeleteAccount( + params: AccountsControllerDeleteAccount$Params, + context?: HttpContext, + ): Observable { + return this.accountsControllerDeleteAccount$Response(params, context).pipe( + map( + (r: StrictHttpResponse): GenericMessageDto => r.body, + ), + ); + } + + /** Path part for operation `accountsControllerEditAccount()` */ + static readonly AccountsControllerEditAccountPath = '/admin/accounts/id/{id}'; + + /** + * Edit account. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `accountsControllerEditAccount()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + accountsControllerEditAccount$Response( + params: AccountsControllerEditAccount$Params, + context?: HttpContext, + ): Observable> { + return accountsControllerEditAccount( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Edit account. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `accountsControllerEditAccount$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + accountsControllerEditAccount( + params: AccountsControllerEditAccount$Params, + context?: HttpContext, + ): Observable { + return this.accountsControllerEditAccount$Response(params, context).pipe( + map( + (r: StrictHttpResponse): FindAccountResDto => r.body, + ), + ); + } + + /** Path part for operation `accountsControllerCreateAccount()` */ + static readonly AccountsControllerCreateAccountPath = '/admin/accounts'; + + /** + * Create a new account. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `accountsControllerCreateAccount()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + accountsControllerCreateAccount$Response( + params: AccountsControllerCreateAccount$Params, + context?: HttpContext, + ): Observable> { + return accountsControllerCreateAccount( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Create a new account. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `accountsControllerCreateAccount$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + accountsControllerCreateAccount( + params: AccountsControllerCreateAccount$Params, + context?: HttpContext, + ): Observable { + return this.accountsControllerCreateAccount$Response(params, context).pipe( + map( + (r: StrictHttpResponse): FindAccountResDto => r.body, + ), + ); + } + + /** Path part for operation `accountsControllerSendActivationLink()` */ + static readonly AccountsControllerSendActivationLinkPath = + '/admin/accounts/send-activation-mail/{id}'; + + /** + * Send activation mail. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `accountsControllerSendActivationLink()` instead. + * + * This method doesn't expect any request body. + */ + accountsControllerSendActivationLink$Response( + params: AccountsControllerSendActivationLink$Params, + context?: HttpContext, + ): Observable> { + return accountsControllerSendActivationLink( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Send activation mail. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `accountsControllerSendActivationLink$Response()` instead. + * + * This method doesn't expect any request body. + */ + accountsControllerSendActivationLink( + params: AccountsControllerSendActivationLink$Params, + context?: HttpContext, + ): Observable { + return this.accountsControllerSendActivationLink$Response( + params, + context, + ).pipe( + map( + (r: StrictHttpResponse): GenericMessageDto => r.body, + ), + ); + } + + /** Path part for operation `accountsControllerGetAccountStipulatori()` */ + static readonly AccountsControllerGetAccountStipulatoriPath = + '/admin/accounts/id/{id}/stipulatori'; + + /** + * Get account stipulatori. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `accountsControllerGetAccountStipulatori()` instead. + * + * This method doesn't expect any request body. + */ + accountsControllerGetAccountStipulatori$Response( + params: AccountsControllerGetAccountStipulatori$Params, + context?: HttpContext, + ): Observable>> { + return accountsControllerGetAccountStipulatori( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get account stipulatori. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `accountsControllerGetAccountStipulatori$Response()` instead. + * + * This method doesn't expect any request body. + */ + accountsControllerGetAccountStipulatori( + params: AccountsControllerGetAccountStipulatori$Params, + context?: HttpContext, + ): Observable> { + return this.accountsControllerGetAccountStipulatori$Response( + params, + context, + ).pipe( + map( + (r: StrictHttpResponse>): Array => + r.body, + ), + ); + } + + /** Path part for operation `accountsControllerEditAccountStipulatori()` */ + static readonly AccountsControllerEditAccountStipulatoriPath = + '/admin/accounts/id/{id}/stipulatori'; + + /** + * Edit account stipulatori. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `accountsControllerEditAccountStipulatori()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + accountsControllerEditAccountStipulatori$Response( + params: AccountsControllerEditAccountStipulatori$Params, + context?: HttpContext, + ): Observable>> { + return accountsControllerEditAccountStipulatori( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Edit account stipulatori. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `accountsControllerEditAccountStipulatori$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + accountsControllerEditAccountStipulatori( + params: AccountsControllerEditAccountStipulatori$Params, + context?: HttpContext, + ): Observable> { + return this.accountsControllerEditAccountStipulatori$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse>, + ): Array => r.body, + ), + ); + } + + /** Path part for operation `accountsControllerEditPasswordPersonale()` */ + static readonly AccountsControllerEditPasswordPersonalePath = + '/admin/accounts/edit-password'; + + /** + * Edit password personale. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `accountsControllerEditPasswordPersonale()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + accountsControllerEditPasswordPersonale$Response( + params: AccountsControllerEditPasswordPersonale$Params, + context?: HttpContext, + ): Observable> { + return accountsControllerEditPasswordPersonale( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Edit password personale. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `accountsControllerEditPasswordPersonale$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + accountsControllerEditPasswordPersonale( + params: AccountsControllerEditPasswordPersonale$Params, + context?: HttpContext, + ): Observable { + return this.accountsControllerEditPasswordPersonale$Response( + params, + context, + ).pipe( + map( + (r: StrictHttpResponse): GenericMessageDto => r.body, + ), + ); + } + + /** Path part for operation `accountsControllerEditAnagraficaPersonale()` */ + static readonly AccountsControllerEditAnagraficaPersonalePath = + '/admin/accounts/edit-anagrafica'; + + /** + * Edit anagrafica. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `accountsControllerEditAnagraficaPersonale()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + accountsControllerEditAnagraficaPersonale$Response( + params: AccountsControllerEditAnagraficaPersonale$Params, + context?: HttpContext, + ): Observable> { + return accountsControllerEditAnagraficaPersonale( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Edit anagrafica. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `accountsControllerEditAnagraficaPersonale$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + accountsControllerEditAnagraficaPersonale( + params: AccountsControllerEditAnagraficaPersonale$Params, + context?: HttpContext, + ): Observable { + return this.accountsControllerEditAnagraficaPersonale$Response( + params, + context, + ).pipe( + map( + (r: StrictHttpResponse): GenericMessageDto => r.body, + ), + ); + } +} diff --git a/src/api/services/auth-api-client.ts b/src/api/services/auth-api-client.ts new file mode 100644 index 0000000..95bd288 --- /dev/null +++ b/src/api/services/auth-api-client.ts @@ -0,0 +1,245 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +import { BaseService } from '../base-service'; +import { ApiConfiguration } from '../api-configuration'; +import { StrictHttpResponse } from '../strict-http-response'; + +import { AccountResDto } from '../models/account-res-dto'; +import { authControllerLinkVerification } from '../fn/auth/auth-controller-link-verification'; +import { AuthControllerLinkVerification$Params } from '../fn/auth/auth-controller-link-verification'; +import { authControllerLogin } from '../fn/auth/auth-controller-login'; +import { AuthControllerLogin$Params } from '../fn/auth/auth-controller-login'; +import { authControllerMe } from '../fn/auth/auth-controller-me'; +import { AuthControllerMe$Params } from '../fn/auth/auth-controller-me'; +import { authControllerRecoveryPassword } from '../fn/auth/auth-controller-recovery-password'; +import { AuthControllerRecoveryPassword$Params } from '../fn/auth/auth-controller-recovery-password'; +import { authControllerSetPassword } from '../fn/auth/auth-controller-set-password'; +import { AuthControllerSetPassword$Params } from '../fn/auth/auth-controller-set-password'; +import { GenericMessageDto } from '../models/generic-message-dto'; + +@Injectable({ providedIn: 'root' }) +export class AuthApiClient extends BaseService { + constructor(config: ApiConfiguration, http: HttpClient) { + super(config, http); + } + + /** Path part for operation `authControllerLogin()` */ + static readonly AuthControllerLoginPath = '/auth/login'; + + /** + * Account Login. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `authControllerLogin()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + authControllerLogin$Response( + params: AuthControllerLogin$Params, + context?: HttpContext, + ): Observable> { + return authControllerLogin(this.http, this.rootUrl, params, context); + } + + /** + * Account Login. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `authControllerLogin$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + authControllerLogin( + params: AuthControllerLogin$Params, + context?: HttpContext, + ): Observable { + return this.authControllerLogin$Response(params, context).pipe( + map((r: StrictHttpResponse): AccountResDto => r.body), + ); + } + + /** Path part for operation `authControllerMe()` */ + static readonly AuthControllerMePath = '/auth/me'; + + /** + * Account Info. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `authControllerMe()` instead. + * + * This method doesn't expect any request body. + */ + authControllerMe$Response( + params?: AuthControllerMe$Params, + context?: HttpContext, + ): Observable> { + return authControllerMe(this.http, this.rootUrl, params, context); + } + + /** + * Account Info. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `authControllerMe$Response()` instead. + * + * This method doesn't expect any request body. + */ + authControllerMe( + params?: AuthControllerMe$Params, + context?: HttpContext, + ): Observable { + return this.authControllerMe$Response(params, context).pipe( + map((r: StrictHttpResponse): AccountResDto => r.body), + ); + } + + /** Path part for operation `authControllerRecoveryPassword()` */ + static readonly AuthControllerRecoveryPasswordPath = + '/auth/recovery-password'; + + /** + * Recovery Password. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `authControllerRecoveryPassword()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + authControllerRecoveryPassword$Response( + params: AuthControllerRecoveryPassword$Params, + context?: HttpContext, + ): Observable> { + return authControllerRecoveryPassword( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Recovery Password. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `authControllerRecoveryPassword$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + authControllerRecoveryPassword( + params: AuthControllerRecoveryPassword$Params, + context?: HttpContext, + ): Observable { + return this.authControllerRecoveryPassword$Response(params, context).pipe( + map( + (r: StrictHttpResponse): GenericMessageDto => r.body, + ), + ); + } + + /** Path part for operation `authControllerLinkVerification()` */ + static readonly AuthControllerLinkVerificationPath = + '/auth/link-verification'; + + /** + * Check if recovery string is valid. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `authControllerLinkVerification()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + authControllerLinkVerification$Response( + params: AuthControllerLinkVerification$Params, + context?: HttpContext, + ): Observable> { + return authControllerLinkVerification( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Check if recovery string is valid. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `authControllerLinkVerification$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + authControllerLinkVerification( + params: AuthControllerLinkVerification$Params, + context?: HttpContext, + ): Observable { + return this.authControllerLinkVerification$Response(params, context).pipe( + map( + (r: StrictHttpResponse): GenericMessageDto => r.body, + ), + ); + } + + /** Path part for operation `authControllerSetPassword()` */ + static readonly AuthControllerSetPasswordPath = '/auth/set-password'; + + /** + * Set new password. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `authControllerSetPassword()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + authControllerSetPassword$Response( + params: AuthControllerSetPassword$Params, + context?: HttpContext, + ): Observable> { + return authControllerSetPassword(this.http, this.rootUrl, params, context); + } + + /** + * Set new password. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `authControllerSetPassword$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + authControllerSetPassword( + params: AuthControllerSetPassword$Params, + context?: HttpContext, + ): Observable { + return this.authControllerSetPassword$Response(params, context).pipe( + map( + (r: StrictHttpResponse): GenericMessageDto => r.body, + ), + ); + } +} diff --git a/src/api/services/luoghi-api-client.ts b/src/api/services/luoghi-api-client.ts new file mode 100644 index 0000000..eca4fe6 --- /dev/null +++ b/src/api/services/luoghi-api-client.ts @@ -0,0 +1,118 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +import { BaseService } from '../base-service'; +import { ApiConfiguration } from '../api-configuration'; +import { StrictHttpResponse } from '../strict-http-response'; + +import { luoghiControllerFindLuogoByAutocomplete } from '../fn/luoghi/luoghi-controller-find-luogo-by-autocomplete'; +import { LuoghiControllerFindLuogoByAutocomplete$Params } from '../fn/luoghi/luoghi-controller-find-luogo-by-autocomplete'; +import { luoghiControllerFindLuogoEsteso } from '../fn/luoghi/luoghi-controller-find-luogo-esteso'; +import { LuoghiControllerFindLuogoEsteso$Params } from '../fn/luoghi/luoghi-controller-find-luogo-esteso'; +import { LuogoRes } from '../models/luogo-res'; + +@Injectable({ providedIn: 'root' }) +export class LuoghiApiClient extends BaseService { + constructor(config: ApiConfiguration, http: HttpClient) { + super(config, http); + } + + /** Path part for operation `luoghiControllerFindLuogoByAutocomplete()` */ + static readonly LuoghiControllerFindLuogoByAutocompletePath = + '/public/luoghi/cerca'; + + /** + * Cerca luoghi con autocomplete. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `luoghiControllerFindLuogoByAutocomplete()` instead. + * + * This method doesn't expect any request body. + */ + luoghiControllerFindLuogoByAutocomplete$Response( + params: LuoghiControllerFindLuogoByAutocomplete$Params, + context?: HttpContext, + ): Observable>> { + return luoghiControllerFindLuogoByAutocomplete( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Cerca luoghi con autocomplete. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `luoghiControllerFindLuogoByAutocomplete$Response()` instead. + * + * This method doesn't expect any request body. + */ + luoghiControllerFindLuogoByAutocomplete( + params: LuoghiControllerFindLuogoByAutocomplete$Params, + context?: HttpContext, + ): Observable> { + return this.luoghiControllerFindLuogoByAutocomplete$Response( + params, + context, + ).pipe( + map((r: StrictHttpResponse>): Array => r.body), + ); + } + + /** Path part for operation `luoghiControllerFindLuogoEsteso()` */ + static readonly LuoghiControllerFindLuogoEstesoPath = + '/public/luoghi/cerca-esteso'; + + /** + * Cerca luoghi, province e regioni con autocomplete. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `luoghiControllerFindLuogoEsteso()` instead. + * + * This method doesn't expect any request body. + */ + luoghiControllerFindLuogoEsteso$Response( + params: LuoghiControllerFindLuogoEsteso$Params, + context?: HttpContext, + ): Observable>> { + return luoghiControllerFindLuogoEsteso( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Cerca luoghi, province e regioni con autocomplete. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `luoghiControllerFindLuogoEsteso$Response()` instead. + * + * This method doesn't expect any request body. + */ + luoghiControllerFindLuogoEsteso( + params: LuoghiControllerFindLuogoEsteso$Params, + context?: HttpContext, + ): Observable> { + return this.luoghiControllerFindLuogoEsteso$Response(params, context).pipe( + map((r: StrictHttpResponse>): Array => r.body), + ); + } +} diff --git a/src/api/services/nomenclatore-api-client.ts b/src/api/services/nomenclatore-api-client.ts new file mode 100644 index 0000000..7537960 --- /dev/null +++ b/src/api/services/nomenclatore-api-client.ts @@ -0,0 +1,1192 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +import { BaseService } from '../base-service'; +import { ApiConfiguration } from '../api-configuration'; +import { StrictHttpResponse } from '../strict-http-response'; + +import { CategoriaPrestazioneResDto } from '../models/categoria-prestazione-res-dto'; +import { ElementiResDto } from '../models/elementi-res-dto'; +import { nomenclatoreControllerCreateNomenclatore } from '../fn/nomenclatore/nomenclatore-controller-create-nomenclatore'; +import { NomenclatoreControllerCreateNomenclatore$Params } from '../fn/nomenclatore/nomenclatore-controller-create-nomenclatore'; +import { nomenclatoreControllerCreateNomenclatoreLivello1 } from '../fn/nomenclatore/nomenclatore-controller-create-nomenclatore-livello-1'; +import { NomenclatoreControllerCreateNomenclatoreLivello1$Params } from '../fn/nomenclatore/nomenclatore-controller-create-nomenclatore-livello-1'; +import { nomenclatoreControllerCreateNomenclatoreLivello2 } from '../fn/nomenclatore/nomenclatore-controller-create-nomenclatore-livello-2'; +import { NomenclatoreControllerCreateNomenclatoreLivello2$Params } from '../fn/nomenclatore/nomenclatore-controller-create-nomenclatore-livello-2'; +import { nomenclatoreControllerCreateNomenclatoreLivello3 } from '../fn/nomenclatore/nomenclatore-controller-create-nomenclatore-livello-3'; +import { NomenclatoreControllerCreateNomenclatoreLivello3$Params } from '../fn/nomenclatore/nomenclatore-controller-create-nomenclatore-livello-3'; +import { nomenclatoreControllerCreateNomenclatoreLivello4 } from '../fn/nomenclatore/nomenclatore-controller-create-nomenclatore-livello-4'; +import { NomenclatoreControllerCreateNomenclatoreLivello4$Params } from '../fn/nomenclatore/nomenclatore-controller-create-nomenclatore-livello-4'; +import { nomenclatoreControllerExportNomenclatore } from '../fn/nomenclatore/nomenclatore-controller-export-nomenclatore'; +import { NomenclatoreControllerExportNomenclatore$Params } from '../fn/nomenclatore/nomenclatore-controller-export-nomenclatore'; +import { nomenclatoreControllerFindManyCategoriePrestazione } from '../fn/nomenclatore/nomenclatore-controller-find-many-categorie-prestazione'; +import { NomenclatoreControllerFindManyCategoriePrestazione$Params } from '../fn/nomenclatore/nomenclatore-controller-find-many-categorie-prestazione'; +import { nomenclatoreControllerFindManyElementi } from '../fn/nomenclatore/nomenclatore-controller-find-many-elementi'; +import { NomenclatoreControllerFindManyElementi$Params } from '../fn/nomenclatore/nomenclatore-controller-find-many-elementi'; +import { nomenclatoreControllerFindManyLivello1Nomenclatore } from '../fn/nomenclatore/nomenclatore-controller-find-many-livello-1-nomenclatore'; +import { NomenclatoreControllerFindManyLivello1Nomenclatore$Params } from '../fn/nomenclatore/nomenclatore-controller-find-many-livello-1-nomenclatore'; +import { nomenclatoreControllerFindManyLivello2Nomenclatore } from '../fn/nomenclatore/nomenclatore-controller-find-many-livello-2-nomenclatore'; +import { NomenclatoreControllerFindManyLivello2Nomenclatore$Params } from '../fn/nomenclatore/nomenclatore-controller-find-many-livello-2-nomenclatore'; +import { nomenclatoreControllerFindManyLivello3Nomenclatore } from '../fn/nomenclatore/nomenclatore-controller-find-many-livello-3-nomenclatore'; +import { NomenclatoreControllerFindManyLivello3Nomenclatore$Params } from '../fn/nomenclatore/nomenclatore-controller-find-many-livello-3-nomenclatore'; +import { nomenclatoreControllerFindManyLivello4Nomenclatore } from '../fn/nomenclatore/nomenclatore-controller-find-many-livello-4-nomenclatore'; +import { NomenclatoreControllerFindManyLivello4Nomenclatore$Params } from '../fn/nomenclatore/nomenclatore-controller-find-many-livello-4-nomenclatore'; +import { nomenclatoreControllerFindManyNomenclatore } from '../fn/nomenclatore/nomenclatore-controller-find-many-nomenclatore'; +import { NomenclatoreControllerFindManyNomenclatore$Params } from '../fn/nomenclatore/nomenclatore-controller-find-many-nomenclatore'; +import { nomenclatoreControllerFindManyTipiPrestazione } from '../fn/nomenclatore/nomenclatore-controller-find-many-tipi-prestazione'; +import { NomenclatoreControllerFindManyTipiPrestazione$Params } from '../fn/nomenclatore/nomenclatore-controller-find-many-tipi-prestazione'; +import { nomenclatoreControllerFindManyTipiStruttura } from '../fn/nomenclatore/nomenclatore-controller-find-many-tipi-struttura'; +import { NomenclatoreControllerFindManyTipiStruttura$Params } from '../fn/nomenclatore/nomenclatore-controller-find-many-tipi-struttura'; +import { nomenclatoreControllerFindManyUnitaDiMisura } from '../fn/nomenclatore/nomenclatore-controller-find-many-unita-di-misura'; +import { NomenclatoreControllerFindManyUnitaDiMisura$Params } from '../fn/nomenclatore/nomenclatore-controller-find-many-unita-di-misura'; +import { nomenclatoreControllerGetOneNomenclatoreById } from '../fn/nomenclatore/nomenclatore-controller-get-one-nomenclatore-by-id'; +import { NomenclatoreControllerGetOneNomenclatoreById$Params } from '../fn/nomenclatore/nomenclatore-controller-get-one-nomenclatore-by-id'; +import { nomenclatoreControllerUpdateNomenclatore } from '../fn/nomenclatore/nomenclatore-controller-update-nomenclatore'; +import { NomenclatoreControllerUpdateNomenclatore$Params } from '../fn/nomenclatore/nomenclatore-controller-update-nomenclatore'; +import { nomenclatoreControllerUpdateNomenclatoreLivello1 } from '../fn/nomenclatore/nomenclatore-controller-update-nomenclatore-livello-1'; +import { NomenclatoreControllerUpdateNomenclatoreLivello1$Params } from '../fn/nomenclatore/nomenclatore-controller-update-nomenclatore-livello-1'; +import { nomenclatoreControllerUpdateNomenclatoreLivello2 } from '../fn/nomenclatore/nomenclatore-controller-update-nomenclatore-livello-2'; +import { NomenclatoreControllerUpdateNomenclatoreLivello2$Params } from '../fn/nomenclatore/nomenclatore-controller-update-nomenclatore-livello-2'; +import { nomenclatoreControllerUpdateNomenclatoreLivello3 } from '../fn/nomenclatore/nomenclatore-controller-update-nomenclatore-livello-3'; +import { NomenclatoreControllerUpdateNomenclatoreLivello3$Params } from '../fn/nomenclatore/nomenclatore-controller-update-nomenclatore-livello-3'; +import { nomenclatoreControllerUpdateNomenclatoreLivello4 } from '../fn/nomenclatore/nomenclatore-controller-update-nomenclatore-livello-4'; +import { NomenclatoreControllerUpdateNomenclatoreLivello4$Params } from '../fn/nomenclatore/nomenclatore-controller-update-nomenclatore-livello-4'; +import { NomenclatoreExcerptRes } from '../models/nomenclatore-excerpt-res'; +import { NomenclatoreLivello1ResDto } from '../models/nomenclatore-livello-1-res-dto'; +import { NomenclatoreLivello2ResDto } from '../models/nomenclatore-livello-2-res-dto'; +import { NomenclatoreLivello3ResDto } from '../models/nomenclatore-livello-3-res-dto'; +import { NomenclatoreLivello4ResDto } from '../models/nomenclatore-livello-4-res-dto'; +import { NomenclatoreRes } from '../models/nomenclatore-res'; +import { TipoPrestazioneResDto } from '../models/tipo-prestazione-res-dto'; +import { TipoStrutturaResDto } from '../models/tipo-struttura-res-dto'; +import { UnitaDiMisuraResDto } from '../models/unita-di-misura-res-dto'; + +@Injectable({ providedIn: 'root' }) +export class NomenclatoreApiClient extends BaseService { + constructor(config: ApiConfiguration, http: HttpClient) { + super(config, http); + } + + /** Path part for operation `nomenclatoreControllerFindManyCategoriePrestazione()` */ + static readonly NomenclatoreControllerFindManyCategoriePrestazionePath = + '/nomenclatore/categorie-prestazione'; + + /** + * Get categorie prestazione. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerFindManyCategoriePrestazione()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerFindManyCategoriePrestazione$Response( + params?: NomenclatoreControllerFindManyCategoriePrestazione$Params, + context?: HttpContext, + ): Observable>> { + return nomenclatoreControllerFindManyCategoriePrestazione( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get categorie prestazione. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerFindManyCategoriePrestazione$Response()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerFindManyCategoriePrestazione( + params?: NomenclatoreControllerFindManyCategoriePrestazione$Params, + context?: HttpContext, + ): Observable> { + return this.nomenclatoreControllerFindManyCategoriePrestazione$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse>, + ): Array => r.body, + ), + ); + } + + /** Path part for operation `nomenclatoreControllerFindManyElementi()` */ + static readonly NomenclatoreControllerFindManyElementiPath = + '/nomenclatore/elementi'; + + /** + * Get elementi. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerFindManyElementi()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerFindManyElementi$Response( + params?: NomenclatoreControllerFindManyElementi$Params, + context?: HttpContext, + ): Observable>> { + return nomenclatoreControllerFindManyElementi( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get elementi. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerFindManyElementi$Response()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerFindManyElementi( + params?: NomenclatoreControllerFindManyElementi$Params, + context?: HttpContext, + ): Observable> { + return this.nomenclatoreControllerFindManyElementi$Response( + params, + context, + ).pipe( + map( + (r: StrictHttpResponse>): Array => + r.body, + ), + ); + } + + /** Path part for operation `nomenclatoreControllerFindManyLivello1Nomenclatore()` */ + static readonly NomenclatoreControllerFindManyLivello1NomenclatorePath = + '/nomenclatore/livello-1'; + + /** + * Get nomenclatore livello 1. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerFindManyLivello1Nomenclatore()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerFindManyLivello1Nomenclatore$Response( + params?: NomenclatoreControllerFindManyLivello1Nomenclatore$Params, + context?: HttpContext, + ): Observable>> { + return nomenclatoreControllerFindManyLivello1Nomenclatore( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get nomenclatore livello 1. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerFindManyLivello1Nomenclatore$Response()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerFindManyLivello1Nomenclatore( + params?: NomenclatoreControllerFindManyLivello1Nomenclatore$Params, + context?: HttpContext, + ): Observable> { + return this.nomenclatoreControllerFindManyLivello1Nomenclatore$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse>, + ): Array => r.body, + ), + ); + } + + /** Path part for operation `nomenclatoreControllerCreateNomenclatoreLivello1()` */ + static readonly NomenclatoreControllerCreateNomenclatoreLivello1Path = + '/nomenclatore/livello-1'; + + /** + * Add nomenclatore livello 1. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerCreateNomenclatoreLivello1()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + nomenclatoreControllerCreateNomenclatoreLivello1$Response( + params: NomenclatoreControllerCreateNomenclatoreLivello1$Params, + context?: HttpContext, + ): Observable> { + return nomenclatoreControllerCreateNomenclatoreLivello1( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Add nomenclatore livello 1. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerCreateNomenclatoreLivello1$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + nomenclatoreControllerCreateNomenclatoreLivello1( + params: NomenclatoreControllerCreateNomenclatoreLivello1$Params, + context?: HttpContext, + ): Observable { + return this.nomenclatoreControllerCreateNomenclatoreLivello1$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse, + ): NomenclatoreLivello1ResDto => r.body, + ), + ); + } + + /** Path part for operation `nomenclatoreControllerUpdateNomenclatoreLivello1()` */ + static readonly NomenclatoreControllerUpdateNomenclatoreLivello1Path = + '/nomenclatore/livello-1/id/{id}'; + + /** + * Edit nomenclatore livello 1. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerUpdateNomenclatoreLivello1()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + nomenclatoreControllerUpdateNomenclatoreLivello1$Response( + params: NomenclatoreControllerUpdateNomenclatoreLivello1$Params, + context?: HttpContext, + ): Observable> { + return nomenclatoreControllerUpdateNomenclatoreLivello1( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Edit nomenclatore livello 1. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerUpdateNomenclatoreLivello1$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + nomenclatoreControllerUpdateNomenclatoreLivello1( + params: NomenclatoreControllerUpdateNomenclatoreLivello1$Params, + context?: HttpContext, + ): Observable { + return this.nomenclatoreControllerUpdateNomenclatoreLivello1$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse, + ): NomenclatoreLivello1ResDto => r.body, + ), + ); + } + + /** Path part for operation `nomenclatoreControllerFindManyLivello2Nomenclatore()` */ + static readonly NomenclatoreControllerFindManyLivello2NomenclatorePath = + '/nomenclatore/livello-2'; + + /** + * Get nomenclatore livello 2. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerFindManyLivello2Nomenclatore()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerFindManyLivello2Nomenclatore$Response( + params?: NomenclatoreControllerFindManyLivello2Nomenclatore$Params, + context?: HttpContext, + ): Observable>> { + return nomenclatoreControllerFindManyLivello2Nomenclatore( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get nomenclatore livello 2. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerFindManyLivello2Nomenclatore$Response()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerFindManyLivello2Nomenclatore( + params?: NomenclatoreControllerFindManyLivello2Nomenclatore$Params, + context?: HttpContext, + ): Observable> { + return this.nomenclatoreControllerFindManyLivello2Nomenclatore$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse>, + ): Array => r.body, + ), + ); + } + + /** Path part for operation `nomenclatoreControllerCreateNomenclatoreLivello2()` */ + static readonly NomenclatoreControllerCreateNomenclatoreLivello2Path = + '/nomenclatore/livello-2'; + + /** + * Add nomenclatore livello 2. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerCreateNomenclatoreLivello2()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + nomenclatoreControllerCreateNomenclatoreLivello2$Response( + params: NomenclatoreControllerCreateNomenclatoreLivello2$Params, + context?: HttpContext, + ): Observable> { + return nomenclatoreControllerCreateNomenclatoreLivello2( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Add nomenclatore livello 2. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerCreateNomenclatoreLivello2$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + nomenclatoreControllerCreateNomenclatoreLivello2( + params: NomenclatoreControllerCreateNomenclatoreLivello2$Params, + context?: HttpContext, + ): Observable { + return this.nomenclatoreControllerCreateNomenclatoreLivello2$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse, + ): NomenclatoreLivello2ResDto => r.body, + ), + ); + } + + /** Path part for operation `nomenclatoreControllerUpdateNomenclatoreLivello2()` */ + static readonly NomenclatoreControllerUpdateNomenclatoreLivello2Path = + '/nomenclatore/livello-2/id/{id}'; + + /** + * Edit nomenclatore livello 2. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerUpdateNomenclatoreLivello2()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + nomenclatoreControllerUpdateNomenclatoreLivello2$Response( + params: NomenclatoreControllerUpdateNomenclatoreLivello2$Params, + context?: HttpContext, + ): Observable> { + return nomenclatoreControllerUpdateNomenclatoreLivello2( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Edit nomenclatore livello 2. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerUpdateNomenclatoreLivello2$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + nomenclatoreControllerUpdateNomenclatoreLivello2( + params: NomenclatoreControllerUpdateNomenclatoreLivello2$Params, + context?: HttpContext, + ): Observable { + return this.nomenclatoreControllerUpdateNomenclatoreLivello2$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse, + ): NomenclatoreLivello2ResDto => r.body, + ), + ); + } + + /** Path part for operation `nomenclatoreControllerFindManyLivello3Nomenclatore()` */ + static readonly NomenclatoreControllerFindManyLivello3NomenclatorePath = + '/nomenclatore/livello-3'; + + /** + * Get nomenclatore livello 3. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerFindManyLivello3Nomenclatore()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerFindManyLivello3Nomenclatore$Response( + params?: NomenclatoreControllerFindManyLivello3Nomenclatore$Params, + context?: HttpContext, + ): Observable>> { + return nomenclatoreControllerFindManyLivello3Nomenclatore( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get nomenclatore livello 3. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerFindManyLivello3Nomenclatore$Response()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerFindManyLivello3Nomenclatore( + params?: NomenclatoreControllerFindManyLivello3Nomenclatore$Params, + context?: HttpContext, + ): Observable> { + return this.nomenclatoreControllerFindManyLivello3Nomenclatore$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse>, + ): Array => r.body, + ), + ); + } + + /** Path part for operation `nomenclatoreControllerCreateNomenclatoreLivello3()` */ + static readonly NomenclatoreControllerCreateNomenclatoreLivello3Path = + '/nomenclatore/livello-3'; + + /** + * Add nomenclatore livello 3. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerCreateNomenclatoreLivello3()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + nomenclatoreControllerCreateNomenclatoreLivello3$Response( + params: NomenclatoreControllerCreateNomenclatoreLivello3$Params, + context?: HttpContext, + ): Observable> { + return nomenclatoreControllerCreateNomenclatoreLivello3( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Add nomenclatore livello 3. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerCreateNomenclatoreLivello3$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + nomenclatoreControllerCreateNomenclatoreLivello3( + params: NomenclatoreControllerCreateNomenclatoreLivello3$Params, + context?: HttpContext, + ): Observable { + return this.nomenclatoreControllerCreateNomenclatoreLivello3$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse, + ): NomenclatoreLivello3ResDto => r.body, + ), + ); + } + + /** Path part for operation `nomenclatoreControllerUpdateNomenclatoreLivello3()` */ + static readonly NomenclatoreControllerUpdateNomenclatoreLivello3Path = + '/nomenclatore/livello-3/id/{id}'; + + /** + * Edit nomenclatore livello 3. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerUpdateNomenclatoreLivello3()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + nomenclatoreControllerUpdateNomenclatoreLivello3$Response( + params: NomenclatoreControllerUpdateNomenclatoreLivello3$Params, + context?: HttpContext, + ): Observable> { + return nomenclatoreControllerUpdateNomenclatoreLivello3( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Edit nomenclatore livello 3. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerUpdateNomenclatoreLivello3$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + nomenclatoreControllerUpdateNomenclatoreLivello3( + params: NomenclatoreControllerUpdateNomenclatoreLivello3$Params, + context?: HttpContext, + ): Observable { + return this.nomenclatoreControllerUpdateNomenclatoreLivello3$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse, + ): NomenclatoreLivello3ResDto => r.body, + ), + ); + } + + /** Path part for operation `nomenclatoreControllerFindManyLivello4Nomenclatore()` */ + static readonly NomenclatoreControllerFindManyLivello4NomenclatorePath = + '/nomenclatore/livello-4'; + + /** + * Get nomenclatore livello 4. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerFindManyLivello4Nomenclatore()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerFindManyLivello4Nomenclatore$Response( + params?: NomenclatoreControllerFindManyLivello4Nomenclatore$Params, + context?: HttpContext, + ): Observable>> { + return nomenclatoreControllerFindManyLivello4Nomenclatore( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get nomenclatore livello 4. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerFindManyLivello4Nomenclatore$Response()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerFindManyLivello4Nomenclatore( + params?: NomenclatoreControllerFindManyLivello4Nomenclatore$Params, + context?: HttpContext, + ): Observable> { + return this.nomenclatoreControllerFindManyLivello4Nomenclatore$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse>, + ): Array => r.body, + ), + ); + } + + /** Path part for operation `nomenclatoreControllerCreateNomenclatoreLivello4()` */ + static readonly NomenclatoreControllerCreateNomenclatoreLivello4Path = + '/nomenclatore/livello-4'; + + /** + * Add nomenclatore livello 4. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerCreateNomenclatoreLivello4()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + nomenclatoreControllerCreateNomenclatoreLivello4$Response( + params: NomenclatoreControllerCreateNomenclatoreLivello4$Params, + context?: HttpContext, + ): Observable> { + return nomenclatoreControllerCreateNomenclatoreLivello4( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Add nomenclatore livello 4. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerCreateNomenclatoreLivello4$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + nomenclatoreControllerCreateNomenclatoreLivello4( + params: NomenclatoreControllerCreateNomenclatoreLivello4$Params, + context?: HttpContext, + ): Observable { + return this.nomenclatoreControllerCreateNomenclatoreLivello4$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse, + ): NomenclatoreLivello4ResDto => r.body, + ), + ); + } + + /** Path part for operation `nomenclatoreControllerUpdateNomenclatoreLivello4()` */ + static readonly NomenclatoreControllerUpdateNomenclatoreLivello4Path = + '/nomenclatore/livello-4/id/{id}'; + + /** + * Edit nomenclatore livello 4. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerUpdateNomenclatoreLivello4()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + nomenclatoreControllerUpdateNomenclatoreLivello4$Response( + params: NomenclatoreControllerUpdateNomenclatoreLivello4$Params, + context?: HttpContext, + ): Observable> { + return nomenclatoreControllerUpdateNomenclatoreLivello4( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Edit nomenclatore livello 4. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerUpdateNomenclatoreLivello4$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + nomenclatoreControllerUpdateNomenclatoreLivello4( + params: NomenclatoreControllerUpdateNomenclatoreLivello4$Params, + context?: HttpContext, + ): Observable { + return this.nomenclatoreControllerUpdateNomenclatoreLivello4$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse, + ): NomenclatoreLivello4ResDto => r.body, + ), + ); + } + + /** Path part for operation `nomenclatoreControllerFindManyNomenclatore()` */ + static readonly NomenclatoreControllerFindManyNomenclatorePath = + '/nomenclatore'; + + /** + * Get nomenclatore. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerFindManyNomenclatore()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerFindManyNomenclatore$Response( + params?: NomenclatoreControllerFindManyNomenclatore$Params, + context?: HttpContext, + ): Observable>> { + return nomenclatoreControllerFindManyNomenclatore( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get nomenclatore. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerFindManyNomenclatore$Response()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerFindManyNomenclatore( + params?: NomenclatoreControllerFindManyNomenclatore$Params, + context?: HttpContext, + ): Observable> { + return this.nomenclatoreControllerFindManyNomenclatore$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse>, + ): Array => r.body, + ), + ); + } + + /** Path part for operation `nomenclatoreControllerCreateNomenclatore()` */ + static readonly NomenclatoreControllerCreateNomenclatorePath = + '/nomenclatore'; + + /** + * Add nomenclatore. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerCreateNomenclatore()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + nomenclatoreControllerCreateNomenclatore$Response( + params: NomenclatoreControllerCreateNomenclatore$Params, + context?: HttpContext, + ): Observable> { + return nomenclatoreControllerCreateNomenclatore( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Add nomenclatore. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerCreateNomenclatore$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + nomenclatoreControllerCreateNomenclatore( + params: NomenclatoreControllerCreateNomenclatore$Params, + context?: HttpContext, + ): Observable { + return this.nomenclatoreControllerCreateNomenclatore$Response( + params, + context, + ).pipe( + map((r: StrictHttpResponse): NomenclatoreRes => r.body), + ); + } + + /** Path part for operation `nomenclatoreControllerExportNomenclatore()` */ + static readonly NomenclatoreControllerExportNomenclatorePath = + '/nomenclatore/export'; + + /** + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerExportNomenclatore()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerExportNomenclatore$Response( + params?: NomenclatoreControllerExportNomenclatore$Params, + context?: HttpContext, + ): Observable> { + return nomenclatoreControllerExportNomenclatore( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerExportNomenclatore$Response()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerExportNomenclatore( + params?: NomenclatoreControllerExportNomenclatore$Params, + context?: HttpContext, + ): Observable { + return this.nomenclatoreControllerExportNomenclatore$Response( + params, + context, + ).pipe(map((r: StrictHttpResponse): Blob => r.body)); + } + + /** Path part for operation `nomenclatoreControllerGetOneNomenclatoreById()` */ + static readonly NomenclatoreControllerGetOneNomenclatoreByIdPath = + '/nomenclatore/id/{id}'; + + /** + * Get nomenclatore by id. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerGetOneNomenclatoreById()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerGetOneNomenclatoreById$Response( + params: NomenclatoreControllerGetOneNomenclatoreById$Params, + context?: HttpContext, + ): Observable> { + return nomenclatoreControllerGetOneNomenclatoreById( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get nomenclatore by id. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerGetOneNomenclatoreById$Response()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerGetOneNomenclatoreById( + params: NomenclatoreControllerGetOneNomenclatoreById$Params, + context?: HttpContext, + ): Observable { + return this.nomenclatoreControllerGetOneNomenclatoreById$Response( + params, + context, + ).pipe( + map((r: StrictHttpResponse): NomenclatoreRes => r.body), + ); + } + + /** Path part for operation `nomenclatoreControllerUpdateNomenclatore()` */ + static readonly NomenclatoreControllerUpdateNomenclatorePath = + '/nomenclatore/id/{id}'; + + /** + * Edit nomenclatore. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerUpdateNomenclatore()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + nomenclatoreControllerUpdateNomenclatore$Response( + params: NomenclatoreControllerUpdateNomenclatore$Params, + context?: HttpContext, + ): Observable> { + return nomenclatoreControllerUpdateNomenclatore( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Edit nomenclatore. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerUpdateNomenclatore$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + nomenclatoreControllerUpdateNomenclatore( + params: NomenclatoreControllerUpdateNomenclatore$Params, + context?: HttpContext, + ): Observable { + return this.nomenclatoreControllerUpdateNomenclatore$Response( + params, + context, + ).pipe( + map((r: StrictHttpResponse): NomenclatoreRes => r.body), + ); + } + + /** Path part for operation `nomenclatoreControllerFindManyTipiPrestazione()` */ + static readonly NomenclatoreControllerFindManyTipiPrestazionePath = + '/nomenclatore/tipi-prestazione'; + + /** + * Get tipi prestazione. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerFindManyTipiPrestazione()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerFindManyTipiPrestazione$Response( + params?: NomenclatoreControllerFindManyTipiPrestazione$Params, + context?: HttpContext, + ): Observable>> { + return nomenclatoreControllerFindManyTipiPrestazione( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get tipi prestazione. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerFindManyTipiPrestazione$Response()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerFindManyTipiPrestazione( + params?: NomenclatoreControllerFindManyTipiPrestazione$Params, + context?: HttpContext, + ): Observable> { + return this.nomenclatoreControllerFindManyTipiPrestazione$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse>, + ): Array => r.body, + ), + ); + } + + /** Path part for operation `nomenclatoreControllerFindManyTipiStruttura()` */ + static readonly NomenclatoreControllerFindManyTipiStrutturaPath = + '/nomenclatore/tipi-struttura'; + + /** + * Get tipi struttura. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerFindManyTipiStruttura()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerFindManyTipiStruttura$Response( + params?: NomenclatoreControllerFindManyTipiStruttura$Params, + context?: HttpContext, + ): Observable>> { + return nomenclatoreControllerFindManyTipiStruttura( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get tipi struttura. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerFindManyTipiStruttura$Response()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerFindManyTipiStruttura( + params?: NomenclatoreControllerFindManyTipiStruttura$Params, + context?: HttpContext, + ): Observable> { + return this.nomenclatoreControllerFindManyTipiStruttura$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse>, + ): Array => r.body, + ), + ); + } + + /** Path part for operation `nomenclatoreControllerFindManyUnitaDiMisura()` */ + static readonly NomenclatoreControllerFindManyUnitaDiMisuraPath = + '/nomenclatore/unita-di-misura'; + + /** + * Get unità di misura. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `nomenclatoreControllerFindManyUnitaDiMisura()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerFindManyUnitaDiMisura$Response( + params?: NomenclatoreControllerFindManyUnitaDiMisura$Params, + context?: HttpContext, + ): Observable>> { + return nomenclatoreControllerFindManyUnitaDiMisura( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get unità di misura. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `nomenclatoreControllerFindManyUnitaDiMisura$Response()` instead. + * + * This method doesn't expect any request body. + */ + nomenclatoreControllerFindManyUnitaDiMisura( + params?: NomenclatoreControllerFindManyUnitaDiMisura$Params, + context?: HttpContext, + ): Observable> { + return this.nomenclatoreControllerFindManyUnitaDiMisura$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse>, + ): Array => r.body, + ), + ); + } +} diff --git a/src/api/services/roles-api-client.ts b/src/api/services/roles-api-client.ts new file mode 100644 index 0000000..24fd10e --- /dev/null +++ b/src/api/services/roles-api-client.ts @@ -0,0 +1,383 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +import { BaseService } from '../base-service'; +import { ApiConfiguration } from '../api-configuration'; +import { StrictHttpResponse } from '../strict-http-response'; + +import { FindActionResDto } from '../models/find-action-res-dto'; +import { FindPrivilegeResDto } from '../models/find-privilege-res-dto'; +import { FindRoleResDto } from '../models/find-role-res-dto'; +import { rolesControllerDeleteRolePrivilege } from '../fn/roles/roles-controller-delete-role-privilege'; +import { RolesControllerDeleteRolePrivilege$Params } from '../fn/roles/roles-controller-delete-role-privilege'; +import { rolesControllerFetchRoles } from '../fn/roles/roles-controller-fetch-roles'; +import { RolesControllerFetchRoles$Params } from '../fn/roles/roles-controller-fetch-roles'; +import { rolesControllerGetAvailableRolePrivileges } from '../fn/roles/roles-controller-get-available-role-privileges'; +import { RolesControllerGetAvailableRolePrivileges$Params } from '../fn/roles/roles-controller-get-available-role-privileges'; +import { rolesControllerGetRolePrivileges } from '../fn/roles/roles-controller-get-role-privileges'; +import { RolesControllerGetRolePrivileges$Params } from '../fn/roles/roles-controller-get-role-privileges'; +import { rolesControllerSetPrivilegeFlagEnabled } from '../fn/roles/roles-controller-set-privilege-flag-enabled'; +import { RolesControllerSetPrivilegeFlagEnabled$Params } from '../fn/roles/roles-controller-set-privilege-flag-enabled'; +import { rolesControllerSetPrivilegeFlagReadonly } from '../fn/roles/roles-controller-set-privilege-flag-readonly'; +import { RolesControllerSetPrivilegeFlagReadonly$Params } from '../fn/roles/roles-controller-set-privilege-flag-readonly'; +import { rolesControllerSetRolePrivileges } from '../fn/roles/roles-controller-set-role-privileges'; +import { RolesControllerSetRolePrivileges$Params } from '../fn/roles/roles-controller-set-role-privileges'; + +@Injectable({ providedIn: 'root' }) +export class RolesApiClient extends BaseService { + constructor(config: ApiConfiguration, http: HttpClient) { + super(config, http); + } + + /** Path part for operation `rolesControllerFetchRoles()` */ + static readonly RolesControllerFetchRolesPath = '/admin/roles'; + + /** + * Get all roles. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `rolesControllerFetchRoles()` instead. + * + * This method doesn't expect any request body. + */ + rolesControllerFetchRoles$Response( + params?: RolesControllerFetchRoles$Params, + context?: HttpContext, + ): Observable>> { + return rolesControllerFetchRoles(this.http, this.rootUrl, params, context); + } + + /** + * Get all roles. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `rolesControllerFetchRoles$Response()` instead. + * + * This method doesn't expect any request body. + */ + rolesControllerFetchRoles( + params?: RolesControllerFetchRoles$Params, + context?: HttpContext, + ): Observable> { + return this.rolesControllerFetchRoles$Response(params, context).pipe( + map( + (r: StrictHttpResponse>): Array => + r.body, + ), + ); + } + + /** Path part for operation `rolesControllerGetRolePrivileges()` */ + static readonly RolesControllerGetRolePrivilegesPath = + '/admin/roles/id/{id}/privileges'; + + /** + * Get role privileges. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `rolesControllerGetRolePrivileges()` instead. + * + * This method doesn't expect any request body. + */ + rolesControllerGetRolePrivileges$Response( + params: RolesControllerGetRolePrivileges$Params, + context?: HttpContext, + ): Observable>> { + return rolesControllerGetRolePrivileges( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get role privileges. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `rolesControllerGetRolePrivileges$Response()` instead. + * + * This method doesn't expect any request body. + */ + rolesControllerGetRolePrivileges( + params: RolesControllerGetRolePrivileges$Params, + context?: HttpContext, + ): Observable> { + return this.rolesControllerGetRolePrivileges$Response(params, context).pipe( + map( + ( + r: StrictHttpResponse>, + ): Array => r.body, + ), + ); + } + + /** Path part for operation `rolesControllerSetRolePrivileges()` */ + static readonly RolesControllerSetRolePrivilegesPath = + '/admin/roles/id/{id}/privileges'; + + /** + * Add privileges to role. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `rolesControllerSetRolePrivileges()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + rolesControllerSetRolePrivileges$Response( + params: RolesControllerSetRolePrivileges$Params, + context?: HttpContext, + ): Observable>> { + return rolesControllerSetRolePrivileges( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Add privileges to role. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `rolesControllerSetRolePrivileges$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + rolesControllerSetRolePrivileges( + params: RolesControllerSetRolePrivileges$Params, + context?: HttpContext, + ): Observable> { + return this.rolesControllerSetRolePrivileges$Response(params, context).pipe( + map( + ( + r: StrictHttpResponse>, + ): Array => r.body, + ), + ); + } + + /** Path part for operation `rolesControllerGetAvailableRolePrivileges()` */ + static readonly RolesControllerGetAvailableRolePrivilegesPath = + '/admin/roles/id/{id}/privileges/available'; + + /** + * Get available actions by role. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `rolesControllerGetAvailableRolePrivileges()` instead. + * + * This method doesn't expect any request body. + */ + rolesControllerGetAvailableRolePrivileges$Response( + params: RolesControllerGetAvailableRolePrivileges$Params, + context?: HttpContext, + ): Observable>> { + return rolesControllerGetAvailableRolePrivileges( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get available actions by role. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `rolesControllerGetAvailableRolePrivileges$Response()` instead. + * + * This method doesn't expect any request body. + */ + rolesControllerGetAvailableRolePrivileges( + params: RolesControllerGetAvailableRolePrivileges$Params, + context?: HttpContext, + ): Observable> { + return this.rolesControllerGetAvailableRolePrivileges$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse>, + ): Array => r.body, + ), + ); + } + + /** Path part for operation `rolesControllerSetPrivilegeFlagReadonly()` */ + static readonly RolesControllerSetPrivilegeFlagReadonlyPath = + '/admin/roles/privilege/id/{id}/flag-readonly'; + + /** + * Set flag readonly. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `rolesControllerSetPrivilegeFlagReadonly()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + rolesControllerSetPrivilegeFlagReadonly$Response( + params: RolesControllerSetPrivilegeFlagReadonly$Params, + context?: HttpContext, + ): Observable> { + return rolesControllerSetPrivilegeFlagReadonly( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Set flag readonly. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `rolesControllerSetPrivilegeFlagReadonly$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + rolesControllerSetPrivilegeFlagReadonly( + params: RolesControllerSetPrivilegeFlagReadonly$Params, + context?: HttpContext, + ): Observable { + return this.rolesControllerSetPrivilegeFlagReadonly$Response( + params, + context, + ).pipe( + map( + (r: StrictHttpResponse): FindPrivilegeResDto => + r.body, + ), + ); + } + + /** Path part for operation `rolesControllerSetPrivilegeFlagEnabled()` */ + static readonly RolesControllerSetPrivilegeFlagEnabledPath = + '/admin/roles/privilege/id/{id}/flag-enabled'; + + /** + * Set flag enabled. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `rolesControllerSetPrivilegeFlagEnabled()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + rolesControllerSetPrivilegeFlagEnabled$Response( + params: RolesControllerSetPrivilegeFlagEnabled$Params, + context?: HttpContext, + ): Observable> { + return rolesControllerSetPrivilegeFlagEnabled( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Set flag enabled. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `rolesControllerSetPrivilegeFlagEnabled$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + rolesControllerSetPrivilegeFlagEnabled( + params: RolesControllerSetPrivilegeFlagEnabled$Params, + context?: HttpContext, + ): Observable { + return this.rolesControllerSetPrivilegeFlagEnabled$Response( + params, + context, + ).pipe( + map( + (r: StrictHttpResponse): FindPrivilegeResDto => + r.body, + ), + ); + } + + /** Path part for operation `rolesControllerDeleteRolePrivilege()` */ + static readonly RolesControllerDeleteRolePrivilegePath = + '/admin/roles/privilege/id/{id}'; + + /** + * Delete role privilege. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `rolesControllerDeleteRolePrivilege()` instead. + * + * This method doesn't expect any request body. + */ + rolesControllerDeleteRolePrivilege$Response( + params: RolesControllerDeleteRolePrivilege$Params, + context?: HttpContext, + ): Observable>> { + return rolesControllerDeleteRolePrivilege( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Delete role privilege. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `rolesControllerDeleteRolePrivilege$Response()` instead. + * + * This method doesn't expect any request body. + */ + rolesControllerDeleteRolePrivilege( + params: RolesControllerDeleteRolePrivilege$Params, + context?: HttpContext, + ): Observable> { + return this.rolesControllerDeleteRolePrivilege$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse>, + ): Array => r.body, + ), + ); + } +} diff --git a/src/api/services/stipulatori-api-client.ts b/src/api/services/stipulatori-api-client.ts new file mode 100644 index 0000000..73fd2a6 --- /dev/null +++ b/src/api/services/stipulatori-api-client.ts @@ -0,0 +1,126 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +import { BaseService } from '../base-service'; +import { ApiConfiguration } from '../api-configuration'; +import { StrictHttpResponse } from '../strict-http-response'; + +import { Stipulatore } from '../models/stipulatore'; +import { stipulatoriControllerFindManyStipulatori } from '../fn/stipulatori/stipulatori-controller-find-many-stipulatori'; +import { StipulatoriControllerFindManyStipulatori$Params } from '../fn/stipulatori/stipulatori-controller-find-many-stipulatori'; +import { stipulatoriControllerFindManyStipulatoriByAccount } from '../fn/stipulatori/stipulatori-controller-find-many-stipulatori-by-account'; +import { StipulatoriControllerFindManyStipulatoriByAccount$Params } from '../fn/stipulatori/stipulatori-controller-find-many-stipulatori-by-account'; + +@Injectable({ providedIn: 'root' }) +export class StipulatoriApiClient extends BaseService { + constructor(config: ApiConfiguration, http: HttpClient) { + super(config, http); + } + + /** Path part for operation `stipulatoriControllerFindManyStipulatori()` */ + static readonly StipulatoriControllerFindManyStipulatoriPath = '/stipulatori'; + + /** + * Get stipulatori. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `stipulatoriControllerFindManyStipulatori()` instead. + * + * This method doesn't expect any request body. + */ + stipulatoriControllerFindManyStipulatori$Response( + params?: StipulatoriControllerFindManyStipulatori$Params, + context?: HttpContext, + ): Observable>> { + return stipulatoriControllerFindManyStipulatori( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get stipulatori. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `stipulatoriControllerFindManyStipulatori$Response()` instead. + * + * This method doesn't expect any request body. + */ + stipulatoriControllerFindManyStipulatori( + params?: StipulatoriControllerFindManyStipulatori$Params, + context?: HttpContext, + ): Observable> { + return this.stipulatoriControllerFindManyStipulatori$Response( + params, + context, + ).pipe( + map( + (r: StrictHttpResponse>): Array => + r.body, + ), + ); + } + + /** Path part for operation `stipulatoriControllerFindManyStipulatoriByAccount()` */ + static readonly StipulatoriControllerFindManyStipulatoriByAccountPath = + '/stipulatori/by-accounts'; + + /** + * Get stipulatori by account. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `stipulatoriControllerFindManyStipulatoriByAccount()` instead. + * + * This method doesn't expect any request body. + */ + stipulatoriControllerFindManyStipulatoriByAccount$Response( + params?: StipulatoriControllerFindManyStipulatoriByAccount$Params, + context?: HttpContext, + ): Observable>> { + return stipulatoriControllerFindManyStipulatoriByAccount( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get stipulatori by account. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `stipulatoriControllerFindManyStipulatoriByAccount$Response()` instead. + * + * This method doesn't expect any request body. + */ + stipulatoriControllerFindManyStipulatoriByAccount( + params?: StipulatoriControllerFindManyStipulatoriByAccount$Params, + context?: HttpContext, + ): Observable> { + return this.stipulatoriControllerFindManyStipulatoriByAccount$Response( + params, + context, + ).pipe( + map( + (r: StrictHttpResponse>): Array => + r.body, + ), + ); + } +} diff --git a/src/api/services/strutture-api-client.ts b/src/api/services/strutture-api-client.ts new file mode 100644 index 0000000..2768d70 --- /dev/null +++ b/src/api/services/strutture-api-client.ts @@ -0,0 +1,837 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +import { BaseService } from '../base-service'; +import { ApiConfiguration } from '../api-configuration'; +import { StrictHttpResponse } from '../strict-http-response'; + +import { ConvenzioniStrutture } from '../models/convenzioni-strutture'; +import { DownloadFile } from '../models/download-file'; +import { FileDetails } from '../models/file-details'; +import { GenericMessageDto } from '../models/generic-message-dto'; +import { Struttura } from '../models/struttura'; +import { StrutturaExcerptRes } from '../models/struttura-excerpt-res'; +import { struttureControllerCreateConvenzione } from '../fn/strutture/strutture-controller-create-convenzione'; +import { StruttureControllerCreateConvenzione$Params } from '../fn/strutture/strutture-controller-create-convenzione'; +import { struttureControllerCreateStruttura } from '../fn/strutture/strutture-controller-create-struttura'; +import { StruttureControllerCreateStruttura$Params } from '../fn/strutture/strutture-controller-create-struttura'; +import { struttureControllerDeleteAllegatoConvenzione } from '../fn/strutture/strutture-controller-delete-allegato-convenzione'; +import { StruttureControllerDeleteAllegatoConvenzione$Params } from '../fn/strutture/strutture-controller-delete-allegato-convenzione'; +import { struttureControllerDownloadAllegatoConvenzione } from '../fn/strutture/strutture-controller-download-allegato-convenzione'; +import { StruttureControllerDownloadAllegatoConvenzione$Params } from '../fn/strutture/strutture-controller-download-allegato-convenzione'; +import { struttureControllerExportStrutture } from '../fn/strutture/strutture-controller-export-strutture'; +import { StruttureControllerExportStrutture$Params } from '../fn/strutture/strutture-controller-export-strutture'; +import { struttureControllerFindManyStrutture } from '../fn/strutture/strutture-controller-find-many-strutture'; +import { StruttureControllerFindManyStrutture$Params } from '../fn/strutture/strutture-controller-find-many-strutture'; +import { struttureControllerFindManyStruttureByAutocomplete } from '../fn/strutture/strutture-controller-find-many-strutture-by-autocomplete'; +import { StruttureControllerFindManyStruttureByAutocomplete$Params } from '../fn/strutture/strutture-controller-find-many-strutture-by-autocomplete'; +import { struttureControllerFindManyTipiGestioni } from '../fn/strutture/strutture-controller-find-many-tipi-gestioni'; +import { StruttureControllerFindManyTipiGestioni$Params } from '../fn/strutture/strutture-controller-find-many-tipi-gestioni'; +import { struttureControllerFindManyTipiStrutture } from '../fn/strutture/strutture-controller-find-many-tipi-strutture'; +import { StruttureControllerFindManyTipiStrutture$Params } from '../fn/strutture/strutture-controller-find-many-tipi-strutture'; +import { struttureControllerGetAllegatiConvenzione } from '../fn/strutture/strutture-controller-get-allegati-convenzione'; +import { StruttureControllerGetAllegatiConvenzione$Params } from '../fn/strutture/strutture-controller-get-allegati-convenzione'; +import { struttureControllerGetConvenzioniByStrutturaId } from '../fn/strutture/strutture-controller-get-convenzioni-by-struttura-id'; +import { StruttureControllerGetConvenzioniByStrutturaId$Params } from '../fn/strutture/strutture-controller-get-convenzioni-by-struttura-id'; +import { struttureControllerGetOneStrutturaById } from '../fn/strutture/strutture-controller-get-one-struttura-by-id'; +import { StruttureControllerGetOneStrutturaById$Params } from '../fn/strutture/strutture-controller-get-one-struttura-by-id'; +import { struttureControllerUpdateConvenzione } from '../fn/strutture/strutture-controller-update-convenzione'; +import { StruttureControllerUpdateConvenzione$Params } from '../fn/strutture/strutture-controller-update-convenzione'; +import { struttureControllerUpdateStruttura } from '../fn/strutture/strutture-controller-update-struttura'; +import { StruttureControllerUpdateStruttura$Params } from '../fn/strutture/strutture-controller-update-struttura'; +import { struttureControllerUpdateVisibilitaStruttura } from '../fn/strutture/strutture-controller-update-visibilita-struttura'; +import { StruttureControllerUpdateVisibilitaStruttura$Params } from '../fn/strutture/strutture-controller-update-visibilita-struttura'; +import { struttureControllerUploadFiles } from '../fn/strutture/strutture-controller-upload-files'; +import { StruttureControllerUploadFiles$Params } from '../fn/strutture/strutture-controller-upload-files'; +import { TipoGestione } from '../models/tipo-gestione'; +import { TipoStruttura } from '../models/tipo-struttura'; +import { VisibilitaStruttura } from '../models/visibilita-struttura'; + +@Injectable({ providedIn: 'root' }) +export class StruttureApiClient extends BaseService { + constructor(config: ApiConfiguration, http: HttpClient) { + super(config, http); + } + + /** Path part for operation `struttureControllerFindManyStruttureByAutocomplete()` */ + static readonly StruttureControllerFindManyStruttureByAutocompletePath = '/'; + + /** + * Cerca strutture con autocomplete. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `struttureControllerFindManyStruttureByAutocomplete()` instead. + * + * This method doesn't expect any request body. + */ + struttureControllerFindManyStruttureByAutocomplete$Response( + params: StruttureControllerFindManyStruttureByAutocomplete$Params, + context?: HttpContext, + ): Observable>> { + return struttureControllerFindManyStruttureByAutocomplete( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Cerca strutture con autocomplete. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `struttureControllerFindManyStruttureByAutocomplete$Response()` instead. + * + * This method doesn't expect any request body. + */ + struttureControllerFindManyStruttureByAutocomplete( + params: StruttureControllerFindManyStruttureByAutocomplete$Params, + context?: HttpContext, + ): Observable> { + return this.struttureControllerFindManyStruttureByAutocomplete$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse>, + ): Array => r.body, + ), + ); + } + + /** Path part for operation `struttureControllerFindManyStrutture()` */ + static readonly StruttureControllerFindManyStrutturePath = '/'; + + /** + * Get strutture. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `struttureControllerFindManyStrutture()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + struttureControllerFindManyStrutture$Response( + params: StruttureControllerFindManyStrutture$Params, + context?: HttpContext, + ): Observable>> { + return struttureControllerFindManyStrutture( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get strutture. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `struttureControllerFindManyStrutture$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + struttureControllerFindManyStrutture( + params: StruttureControllerFindManyStrutture$Params, + context?: HttpContext, + ): Observable> { + return this.struttureControllerFindManyStrutture$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse>, + ): Array => r.body, + ), + ); + } + + /** Path part for operation `struttureControllerCreateStruttura()` */ + static readonly StruttureControllerCreateStrutturaPath = '/add'; + + /** + * Add struttura. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `struttureControllerCreateStruttura()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + struttureControllerCreateStruttura$Response( + params: StruttureControllerCreateStruttura$Params, + context?: HttpContext, + ): Observable> { + return struttureControllerCreateStruttura( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Add struttura. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `struttureControllerCreateStruttura$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + struttureControllerCreateStruttura( + params: StruttureControllerCreateStruttura$Params, + context?: HttpContext, + ): Observable { + return this.struttureControllerCreateStruttura$Response( + params, + context, + ).pipe(map((r: StrictHttpResponse): Struttura => r.body)); + } + + /** Path part for operation `struttureControllerGetOneStrutturaById()` */ + static readonly StruttureControllerGetOneStrutturaByIdPath = '/id/{id}'; + + /** + * Get struttura by id. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `struttureControllerGetOneStrutturaById()` instead. + * + * This method doesn't expect any request body. + */ + struttureControllerGetOneStrutturaById$Response( + params: StruttureControllerGetOneStrutturaById$Params, + context?: HttpContext, + ): Observable> { + return struttureControllerGetOneStrutturaById( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get struttura by id. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `struttureControllerGetOneStrutturaById$Response()` instead. + * + * This method doesn't expect any request body. + */ + struttureControllerGetOneStrutturaById( + params: StruttureControllerGetOneStrutturaById$Params, + context?: HttpContext, + ): Observable { + return this.struttureControllerGetOneStrutturaById$Response( + params, + context, + ).pipe(map((r: StrictHttpResponse): Struttura => r.body)); + } + + /** Path part for operation `struttureControllerUpdateStruttura()` */ + static readonly StruttureControllerUpdateStrutturaPath = '/id/{id}'; + + /** + * Edit struttura. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `struttureControllerUpdateStruttura()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + struttureControllerUpdateStruttura$Response( + params: StruttureControllerUpdateStruttura$Params, + context?: HttpContext, + ): Observable> { + return struttureControllerUpdateStruttura( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Edit struttura. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `struttureControllerUpdateStruttura$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + struttureControllerUpdateStruttura( + params: StruttureControllerUpdateStruttura$Params, + context?: HttpContext, + ): Observable { + return this.struttureControllerUpdateStruttura$Response( + params, + context, + ).pipe(map((r: StrictHttpResponse): Struttura => r.body)); + } + + /** Path part for operation `struttureControllerExportStrutture()` */ + static readonly StruttureControllerExportStrutturePath = '/export'; + + /** + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `struttureControllerExportStrutture()` instead. + * + * This method doesn't expect any request body. + */ + struttureControllerExportStrutture$Response( + params?: StruttureControllerExportStrutture$Params, + context?: HttpContext, + ): Observable> { + return struttureControllerExportStrutture( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * This method provides access only to the response body. + * To access the full response (for headers, for example), `struttureControllerExportStrutture$Response()` instead. + * + * This method doesn't expect any request body. + */ + struttureControllerExportStrutture( + params?: StruttureControllerExportStrutture$Params, + context?: HttpContext, + ): Observable { + return this.struttureControllerExportStrutture$Response( + params, + context, + ).pipe(map((r: StrictHttpResponse): Blob => r.body)); + } + + /** Path part for operation `struttureControllerGetConvenzioniByStrutturaId()` */ + static readonly StruttureControllerGetConvenzioniByStrutturaIdPath = + '/id/{id}/convenzioni'; + + /** + * Get convenzioni by struttura id. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `struttureControllerGetConvenzioniByStrutturaId()` instead. + * + * This method doesn't expect any request body. + */ + struttureControllerGetConvenzioniByStrutturaId$Response( + params: StruttureControllerGetConvenzioniByStrutturaId$Params, + context?: HttpContext, + ): Observable>> { + return struttureControllerGetConvenzioniByStrutturaId( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get convenzioni by struttura id. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `struttureControllerGetConvenzioniByStrutturaId$Response()` instead. + * + * This method doesn't expect any request body. + */ + struttureControllerGetConvenzioniByStrutturaId( + params: StruttureControllerGetConvenzioniByStrutturaId$Params, + context?: HttpContext, + ): Observable> { + return this.struttureControllerGetConvenzioniByStrutturaId$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse>, + ): Array => r.body, + ), + ); + } + + /** Path part for operation `struttureControllerCreateConvenzione()` */ + static readonly StruttureControllerCreateConvenzionePath = + '/id/{id}/convenzioni'; + + /** + * Add convenzione. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `struttureControllerCreateConvenzione()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + struttureControllerCreateConvenzione$Response( + params: StruttureControllerCreateConvenzione$Params, + context?: HttpContext, + ): Observable> { + return struttureControllerCreateConvenzione( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Add convenzione. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `struttureControllerCreateConvenzione$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + struttureControllerCreateConvenzione( + params: StruttureControllerCreateConvenzione$Params, + context?: HttpContext, + ): Observable { + return this.struttureControllerCreateConvenzione$Response( + params, + context, + ).pipe( + map( + (r: StrictHttpResponse): ConvenzioniStrutture => + r.body, + ), + ); + } + + /** Path part for operation `struttureControllerUpdateConvenzione()` */ + static readonly StruttureControllerUpdateConvenzionePath = + '/id/{id}/convenzioni/{idConvenzione}'; + + /** + * Edit convenzione. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `struttureControllerUpdateConvenzione()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + struttureControllerUpdateConvenzione$Response( + params: StruttureControllerUpdateConvenzione$Params, + context?: HttpContext, + ): Observable> { + return struttureControllerUpdateConvenzione( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Edit convenzione. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `struttureControllerUpdateConvenzione$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + struttureControllerUpdateConvenzione( + params: StruttureControllerUpdateConvenzione$Params, + context?: HttpContext, + ): Observable { + return this.struttureControllerUpdateConvenzione$Response( + params, + context, + ).pipe( + map( + (r: StrictHttpResponse): ConvenzioniStrutture => + r.body, + ), + ); + } + + /** Path part for operation `struttureControllerGetAllegatiConvenzione()` */ + static readonly StruttureControllerGetAllegatiConvenzionePath = + '/id/{id}/allegati/convenzioni/{idConvenzione}'; + + /** + * Get allegati convenzione. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `struttureControllerGetAllegatiConvenzione()` instead. + * + * This method doesn't expect any request body. + */ + struttureControllerGetAllegatiConvenzione$Response( + params: StruttureControllerGetAllegatiConvenzione$Params, + context?: HttpContext, + ): Observable>> { + return struttureControllerGetAllegatiConvenzione( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get allegati convenzione. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `struttureControllerGetAllegatiConvenzione$Response()` instead. + * + * This method doesn't expect any request body. + */ + struttureControllerGetAllegatiConvenzione( + params: StruttureControllerGetAllegatiConvenzione$Params, + context?: HttpContext, + ): Observable> { + return this.struttureControllerGetAllegatiConvenzione$Response( + params, + context, + ).pipe( + map( + (r: StrictHttpResponse>): Array => + r.body, + ), + ); + } + + /** Path part for operation `struttureControllerDownloadAllegatoConvenzione()` */ + static readonly StruttureControllerDownloadAllegatoConvenzionePath = + '/id/{id}/allegati/convenzioni/{idConvenzione}/download/{fileName}'; + + /** + * Download allegato convenzione. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `struttureControllerDownloadAllegatoConvenzione()` instead. + * + * This method doesn't expect any request body. + */ + struttureControllerDownloadAllegatoConvenzione$Response( + params: StruttureControllerDownloadAllegatoConvenzione$Params, + context?: HttpContext, + ): Observable> { + return struttureControllerDownloadAllegatoConvenzione( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Download allegato convenzione. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `struttureControllerDownloadAllegatoConvenzione$Response()` instead. + * + * This method doesn't expect any request body. + */ + struttureControllerDownloadAllegatoConvenzione( + params: StruttureControllerDownloadAllegatoConvenzione$Params, + context?: HttpContext, + ): Observable { + return this.struttureControllerDownloadAllegatoConvenzione$Response( + params, + context, + ).pipe(map((r: StrictHttpResponse): DownloadFile => r.body)); + } + + /** Path part for operation `struttureControllerUploadFiles()` */ + static readonly StruttureControllerUploadFilesPath = + '/id/{id}/allegati/convenzioni/{idConvenzione}/upload'; + + /** + * Upload allegati convenzione. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `struttureControllerUploadFiles()` instead. + * + * This method sends `multipart/form-data` and handles request body of type `multipart/form-data`. + */ + struttureControllerUploadFiles$Response( + params: StruttureControllerUploadFiles$Params, + context?: HttpContext, + ): Observable> { + return struttureControllerUploadFiles( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Upload allegati convenzione. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `struttureControllerUploadFiles$Response()` instead. + * + * This method sends `multipart/form-data` and handles request body of type `multipart/form-data`. + */ + struttureControllerUploadFiles( + params: StruttureControllerUploadFiles$Params, + context?: HttpContext, + ): Observable { + return this.struttureControllerUploadFiles$Response(params, context).pipe( + map( + (r: StrictHttpResponse): GenericMessageDto => r.body, + ), + ); + } + + /** Path part for operation `struttureControllerDeleteAllegatoConvenzione()` */ + static readonly StruttureControllerDeleteAllegatoConvenzionePath = + '/id/{id}/allegati/convenzioni/{idConvenzione}/delete/{fileName}'; + + /** + * Delete allegati convenzione. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `struttureControllerDeleteAllegatoConvenzione()` instead. + * + * This method doesn't expect any request body. + */ + struttureControllerDeleteAllegatoConvenzione$Response( + params: StruttureControllerDeleteAllegatoConvenzione$Params, + context?: HttpContext, + ): Observable> { + return struttureControllerDeleteAllegatoConvenzione( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Delete allegati convenzione. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `struttureControllerDeleteAllegatoConvenzione$Response()` instead. + * + * This method doesn't expect any request body. + */ + struttureControllerDeleteAllegatoConvenzione( + params: StruttureControllerDeleteAllegatoConvenzione$Params, + context?: HttpContext, + ): Observable { + return this.struttureControllerDeleteAllegatoConvenzione$Response( + params, + context, + ).pipe( + map( + (r: StrictHttpResponse): GenericMessageDto => r.body, + ), + ); + } + + /** Path part for operation `struttureControllerFindManyTipiGestioni()` */ + static readonly StruttureControllerFindManyTipiGestioniPath = + '/tipi-gestioni'; + + /** + * Get tipi gestioni. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `struttureControllerFindManyTipiGestioni()` instead. + * + * This method doesn't expect any request body. + */ + struttureControllerFindManyTipiGestioni$Response( + params?: StruttureControllerFindManyTipiGestioni$Params, + context?: HttpContext, + ): Observable>> { + return struttureControllerFindManyTipiGestioni( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get tipi gestioni. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `struttureControllerFindManyTipiGestioni$Response()` instead. + * + * This method doesn't expect any request body. + */ + struttureControllerFindManyTipiGestioni( + params?: StruttureControllerFindManyTipiGestioni$Params, + context?: HttpContext, + ): Observable> { + return this.struttureControllerFindManyTipiGestioni$Response( + params, + context, + ).pipe( + map( + (r: StrictHttpResponse>): Array => + r.body, + ), + ); + } + + /** Path part for operation `struttureControllerFindManyTipiStrutture()` */ + static readonly StruttureControllerFindManyTipiStrutturePath = + '/tipi-strutture'; + + /** + * Get tipi strutture. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `struttureControllerFindManyTipiStrutture()` instead. + * + * This method doesn't expect any request body. + */ + struttureControllerFindManyTipiStrutture$Response( + params?: StruttureControllerFindManyTipiStrutture$Params, + context?: HttpContext, + ): Observable>> { + return struttureControllerFindManyTipiStrutture( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get tipi strutture. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `struttureControllerFindManyTipiStrutture$Response()` instead. + * + * This method doesn't expect any request body. + */ + struttureControllerFindManyTipiStrutture( + params?: StruttureControllerFindManyTipiStrutture$Params, + context?: HttpContext, + ): Observable> { + return this.struttureControllerFindManyTipiStrutture$Response( + params, + context, + ).pipe( + map( + (r: StrictHttpResponse>): Array => + r.body, + ), + ); + } + + /** Path part for operation `struttureControllerUpdateVisibilitaStruttura()` */ + static readonly StruttureControllerUpdateVisibilitaStrutturaPath = + '/id/{id}/visibilita'; + + /** + * Edit visibilità struttura. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `struttureControllerUpdateVisibilitaStruttura()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + struttureControllerUpdateVisibilitaStruttura$Response( + params: StruttureControllerUpdateVisibilitaStruttura$Params, + context?: HttpContext, + ): Observable>> { + return struttureControllerUpdateVisibilitaStruttura( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Edit visibilità struttura. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `struttureControllerUpdateVisibilitaStruttura$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + struttureControllerUpdateVisibilitaStruttura( + params: StruttureControllerUpdateVisibilitaStruttura$Params, + context?: HttpContext, + ): Observable> { + return this.struttureControllerUpdateVisibilitaStruttura$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse>, + ): Array => r.body, + ), + ); + } +} diff --git a/src/api/services/strutture-pubbliche-api-client.ts b/src/api/services/strutture-pubbliche-api-client.ts new file mode 100644 index 0000000..561bf12 --- /dev/null +++ b/src/api/services/strutture-pubbliche-api-client.ts @@ -0,0 +1,129 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpClient, HttpContext } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +import { BaseService } from '../base-service'; +import { ApiConfiguration } from '../api-configuration'; +import { StrictHttpResponse } from '../strict-http-response'; + +import { strutturePubblicheControllerFindManyStrutture } from '../fn/strutture-pubbliche/strutture-pubbliche-controller-find-many-strutture'; +import { StrutturePubblicheControllerFindManyStrutture$Params } from '../fn/strutture-pubbliche/strutture-pubbliche-controller-find-many-strutture'; +import { strutturePubblicheControllerFindManyTipiStrutture } from '../fn/strutture-pubbliche/strutture-pubbliche-controller-find-many-tipi-strutture'; +import { StrutturePubblicheControllerFindManyTipiStrutture$Params } from '../fn/strutture-pubbliche/strutture-pubbliche-controller-find-many-tipi-strutture'; +import { StrutturePubblicheResDto } from '../models/strutture-pubbliche-res-dto'; +import { TipoStruttura } from '../models/tipo-struttura'; + +@Injectable({ providedIn: 'root' }) +export class StrutturePubblicheApiClient extends BaseService { + constructor(config: ApiConfiguration, http: HttpClient) { + super(config, http); + } + + /** Path part for operation `strutturePubblicheControllerFindManyStrutture()` */ + static readonly StrutturePubblicheControllerFindManyStrutturePath = + '/public/strutture'; + + /** + * Get strutture pubbliche. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `strutturePubblicheControllerFindManyStrutture()` instead. + * + * This method doesn't expect any request body. + */ + strutturePubblicheControllerFindManyStrutture$Response( + params?: StrutturePubblicheControllerFindManyStrutture$Params, + context?: HttpContext, + ): Observable>> { + return strutturePubblicheControllerFindManyStrutture( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get strutture pubbliche. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `strutturePubblicheControllerFindManyStrutture$Response()` instead. + * + * This method doesn't expect any request body. + */ + strutturePubblicheControllerFindManyStrutture( + params?: StrutturePubblicheControllerFindManyStrutture$Params, + context?: HttpContext, + ): Observable> { + return this.strutturePubblicheControllerFindManyStrutture$Response( + params, + context, + ).pipe( + map( + ( + r: StrictHttpResponse>, + ): Array => r.body, + ), + ); + } + + /** Path part for operation `strutturePubblicheControllerFindManyTipiStrutture()` */ + static readonly StrutturePubblicheControllerFindManyTipiStrutturePath = + '/public/strutture/tipi'; + + /** + * Get tipi strutture. + * + * + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `strutturePubblicheControllerFindManyTipiStrutture()` instead. + * + * This method doesn't expect any request body. + */ + strutturePubblicheControllerFindManyTipiStrutture$Response( + params?: StrutturePubblicheControllerFindManyTipiStrutture$Params, + context?: HttpContext, + ): Observable>> { + return strutturePubblicheControllerFindManyTipiStrutture( + this.http, + this.rootUrl, + params, + context, + ); + } + + /** + * Get tipi strutture. + * + * + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `strutturePubblicheControllerFindManyTipiStrutture$Response()` instead. + * + * This method doesn't expect any request body. + */ + strutturePubblicheControllerFindManyTipiStrutture( + params?: StrutturePubblicheControllerFindManyTipiStrutture$Params, + context?: HttpContext, + ): Observable> { + return this.strutturePubblicheControllerFindManyTipiStrutture$Response( + params, + context, + ).pipe( + map( + (r: StrictHttpResponse>): Array => + r.body, + ), + ); + } +} diff --git a/src/api/strict-http-response.ts b/src/api/strict-http-response.ts new file mode 100644 index 0000000..e83820b --- /dev/null +++ b/src/api/strict-http-response.ts @@ -0,0 +1,12 @@ +/* tslint:disable */ +/* eslint-disable */ +/* Code generated by ng-openapi-gen DO NOT EDIT. */ + +import { HttpResponse } from '@angular/common/http'; + +/** + * Constrains the http response to not have the body defined as `T | null`, but `T` only. + */ +export type StrictHttpResponse = HttpResponse & { + readonly body: T; +}; diff --git a/src/app/app.component.html b/src/app/app.component.html new file mode 100644 index 0000000..67e7bd4 --- /dev/null +++ b/src/app/app.component.html @@ -0,0 +1 @@ + diff --git a/src/app/app.component.scss b/src/app/app.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/app.component.ts b/src/app/app.component.ts new file mode 100644 index 0000000..02cd761 --- /dev/null +++ b/src/app/app.component.ts @@ -0,0 +1,40 @@ +import { Component } from '@angular/core'; +import { NavigationStart, Router, RouterOutlet } from '@angular/router'; +import { CoreModule } from '@core/core.module'; +import { MyDirectiveModule } from '@core/directives/my-directive.module'; +import { StyleClassModule } from 'primeng/styleclass'; +import { Subscription, tap } from 'rxjs'; +import { AuthService } from './core/services'; + +@Component({ + selector: 'app-root', + imports: [CoreModule, RouterOutlet, MyDirectiveModule, StyleClassModule], + templateUrl: './app.component.html', + styleUrl: './app.component.scss', +}) +export class AppComponent { + title = 'Browser-Strutture-Musa'; + routerEvent$: Subscription; + + constructor( + private authService: AuthService, + private router: Router, + ) { + this.routerEvent$ = this.router.events + .pipe( + tap((e) => { + if (e instanceof NavigationStart) { + const url = e.url; + if ( + !url.split('/')[1].startsWith('login') && + !url.split('/')[1].startsWith('public') + ) { + this.authService.populate()?.subscribe(); + this.routerEvent$.unsubscribe(); + } + } + }), + ) + .subscribe(); + } +} diff --git a/src/app/app.config.ts b/src/app/app.config.ts new file mode 100644 index 0000000..1cc14de --- /dev/null +++ b/src/app/app.config.ts @@ -0,0 +1,89 @@ +import { LocationStrategy, PathLocationStrategy } from '@angular/common'; +import { + HTTP_INTERCEPTORS, + provideHttpClient, + withInterceptorsFromDi, +} from '@angular/common/http'; +import { + ApplicationConfig, + importProvidersFrom, + provideZoneChangeDetection, +} from '@angular/core'; +import { provideAnimationsAsync } from '@angular/platform-browser/animations/async'; +import { provideRouter, withRouterConfig } from '@angular/router'; +import { ApiModule } from '@api/api.module'; +import { + ExpiredGuard, + PrivilegeGuard, + RedirectGuard, + RoleGuard, +} from '@core/guards'; +import { RedirectCruscottiGuard } from '@core/guards/redirect-cruscotti.guard'; +import { HttpTokenInterceptor } from '@core/interceptors'; +import { environment } from '@environments/environment'; +import { FilterMatchMode, MessageService } from 'primeng/api'; +import { providePrimeNG } from 'primeng/config'; +import { routerOptions, routes } from './app.routes'; +import { MyPreset } from './app.theme'; +import { RedirectReportGuard } from './core/guards/redirect-report.guard'; + +export const appConfig: ApplicationConfig = { + providers: [ + importProvidersFrom([ApiModule.forRoot({ rootUrl: environment.API_URL })]), + provideZoneChangeDetection({ eventCoalescing: true }), + provideRouter(routes, withRouterConfig(routerOptions)), + provideHttpClient(withInterceptorsFromDi()), + provideAnimationsAsync(), + { + provide: HTTP_INTERCEPTORS, + useClass: HttpTokenInterceptor, + multi: true, + }, + { provide: LocationStrategy, useClass: PathLocationStrategy }, + providePrimeNG({ + theme: { + preset: MyPreset, + options: { + prefix: 'p', + darkModeSelector: 'system', + cssLayer: { + name: 'primeng', + order: 'tailwind, primeng', + }, + }, + }, + ripple: true, + filterMatchModeOptions: { + text: [ + FilterMatchMode.STARTS_WITH, + FilterMatchMode.CONTAINS, + FilterMatchMode.NOT_CONTAINS, + FilterMatchMode.ENDS_WITH, + FilterMatchMode.EQUALS, + FilterMatchMode.NOT_EQUALS, + ], + numeric: [ + FilterMatchMode.EQUALS, + FilterMatchMode.NOT_EQUALS, + FilterMatchMode.LESS_THAN, + FilterMatchMode.LESS_THAN_OR_EQUAL_TO, + FilterMatchMode.GREATER_THAN, + FilterMatchMode.GREATER_THAN_OR_EQUAL_TO, + ], + date: [ + FilterMatchMode.DATE_IS, + FilterMatchMode.DATE_IS_NOT, + FilterMatchMode.DATE_BEFORE, + FilterMatchMode.DATE_AFTER, + ], + }, + }), + PrivilegeGuard, + RoleGuard, + RedirectGuard, + RedirectReportGuard, + RedirectCruscottiGuard, + ExpiredGuard, + MessageService, + ], +}; diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts new file mode 100644 index 0000000..571e54d --- /dev/null +++ b/src/app/app.routes.ts @@ -0,0 +1,58 @@ +import { ExtraOptions, Routes } from '@angular/router'; +import { IsLoggedGuard, RedirectGuard } from './core'; + +export const routerOptions: ExtraOptions = { + anchorScrolling: 'enabled', + scrollPositionRestoration: 'enabled', + paramsInheritanceStrategy: 'always', +}; + +export const routes: Routes = [ + { + path: '', + loadChildren: () => + import('./modules/main/main.routes').then((mod) => mod.mainRoutes), + canActivate: [IsLoggedGuard], + }, + { + path: 'public', + loadChildren: () => + import('./modules/public/public.routes').then((mod) => mod.publicRoutes), + }, + { + path: 'login', + loadComponent: () => + import('./modules/login/login.component').then( + (mod) => mod.LoginComponent, + ), + canActivate: [RedirectGuard], // per forzare il redirect a strutture pubbliche + }, + // { + // path: 'recupera-password', + // loadComponent: () => + // import('./modules/recovery-password/recovery-password.component').then( + // (mod) => mod.RecoveryPasswordComponent, + // ), + // }, + // { + // path: 'primoaccesso', + // loadComponent: () => + // import('./modules/recovery-password/recovery-password.component').then( + // (mod) => mod.RecoveryPasswordComponent, + // ), + // }, + { + path: 'pagina-non-trovata', + loadComponent: () => + import('./modules/page-not-found/page-not-found.component').then( + (mod) => mod.PageNotFoundComponent, + ), + }, + { + path: '**', + loadComponent: () => + import('./modules/page-not-found/page-not-found.component').then( + (mod) => mod.PageNotFoundComponent, + ), + }, +]; diff --git a/src/app/app.theme.ts b/src/app/app.theme.ts new file mode 100644 index 0000000..b6ac5cb --- /dev/null +++ b/src/app/app.theme.ts @@ -0,0 +1,50 @@ +import { definePreset } from '@primeng/themes'; +import Aura from '@primeng/themes/aura'; + +export const MyPreset = definePreset(Aura, { + semantic: { + primary: { + 50: '{sky.50}', + 100: '{sky.100}', + 200: '{sky.200}', + 300: '{sky.300}', + 400: '{sky.400}', + 500: '{sky.500}', + 600: '{sky.600}', + 700: '{sky.700}', + 800: '#173775', + 900: '{sky.900}', + 950: '{sky.950}', + }, + colorScheme: { + light: { + primary: { + color: '#173775', + inverseColor: '#ffffff', + hoverColor: '#1976d2', + activeColor: '#1976d2', + }, + highlight: { + background: '#173775', + focusBackground: '#1976d2', + color: '#ffffff', + focusColor: '#ffffff', + }, + }, + dark: { + primary: { + color: '{zinc.50}', + inverseColor: '{zinc.950}', + hoverColor: '{zinc.100}', + activeColor: '{zinc.200}', + }, + highlight: { + background: 'rgba(250, 250, 250, .16)', + focusBackground: 'rgba(250, 250, 250, .24)', + color: 'rgba(255,255,255,.87)', + focusColor: 'rgba(255,255,255,.87)', + }, + }, + }, + }, +}); diff --git a/src/app/core/common/codice-fiscale/codice-fiscale.constants.ts b/src/app/core/common/codice-fiscale/codice-fiscale.constants.ts new file mode 100644 index 0000000..87045c8 --- /dev/null +++ b/src/app/core/common/codice-fiscale/codice-fiscale.constants.ts @@ -0,0 +1,152 @@ +export type Gender = 'Male' | 'Female'; + +export const OmocodiaIndexes = [14, 13, 12, 10, 9, 7, 6]; + +export const MonthsCoding = { + 1: 'A', + 2: 'B', + 3: 'C', + 4: 'D', + 5: 'E', + 6: 'H', + 7: 'L', + 8: 'M', + 9: 'P', + 10: 'R', + 11: 'S', + 12: 'T', +}; + +export const OmocodiaReplacements = { + 0: 'L', + 1: 'M', + 2: 'N', + 3: 'P', + 4: 'Q', + 5: 'R', + 6: 'S', + 7: 'T', + 8: 'U', + 9: 'V', +}; + +export const CheckCodeRestoCoding = { + 0: 'A', + 1: 'B', + 2: 'C', + 3: 'D', + 4: 'E', + 5: 'F', + 6: 'G', + 7: 'H', + 8: 'I', + 9: 'J', + 10: 'K', + 11: 'L', + 12: 'M', + 13: 'N', + 14: 'O', + 15: 'P', + 16: 'Q', + 17: 'R', + 18: 'S', + 19: 'T', + 20: 'U', + 21: 'V', + 22: 'W', + 23: 'X', + 24: 'Y', + 25: 'Z', +}; + +export const CheckCodePariCoding = { + '0': 0, + '1': 1, + '2': 2, + '3': 3, + '4': 4, + '5': 5, + '6': 6, + '7': 7, + '8': 8, + '9': 9, + A: 0, + B: 1, + C: 2, + D: 3, + E: 4, + F: 5, + G: 6, + H: 7, + I: 8, + J: 9, + K: 10, + L: 11, + M: 12, + N: 13, + O: 14, + P: 15, + Q: 16, + R: 17, + S: 18, + T: 19, + U: 20, + V: 21, + W: 22, + X: 23, + Y: 24, + Z: 25, +}; + +export const CheckCodeOddCoding = { + '0': 1, + '1': 0, + '2': 5, + '3': 7, + '4': 9, + '5': 13, + '6': 15, + '7': 17, + '8': 19, + '9': 21, + A: 1, + B: 0, + C: 5, + D: 7, + E: 9, + F: 13, + G: 15, + H: 17, + I: 19, + J: 21, + K: 2, + L: 4, + M: 18, + N: 20, + O: 11, + P: 3, + Q: 6, + R: 8, + S: 12, + T: 14, + U: 16, + V: 10, + W: 22, + X: 25, + Y: 24, + Z: 23, +}; + +export const CodifiedAlphanumericalRegex = new RegExp( + `[0-9${Object.values(OmocodiaReplacements).join('')}]`, +); +export const CodifiedMonthRegex = new RegExp( + `[${Object.values(MonthsCoding).join('')}]`, +); + +export const NormalizedCodiceFiscaleRegex = new RegExp( + `^[A-Z]{6}[0-9]{2}${CodifiedMonthRegex.source}[0-9]{2}[A-Z][0-9]{3}[A-Z]`, +); +export const CodiceFiscaleRegex = new RegExp( + `^[A-Z]{6}${CodifiedAlphanumericalRegex.source}{2}${CodifiedMonthRegex.source}${CodifiedAlphanumericalRegex.source}{2}[A-Z]${CodifiedAlphanumericalRegex.source}{3}[A-Z]$`, +); diff --git a/src/app/core/common/codice-fiscale/codice-fiscale.ts b/src/app/core/common/codice-fiscale/codice-fiscale.ts new file mode 100644 index 0000000..b9c5109 --- /dev/null +++ b/src/app/core/common/codice-fiscale/codice-fiscale.ts @@ -0,0 +1,154 @@ +import { AbstractControl, FormGroup } from '@angular/forms'; +import dayjs from 'dayjs'; +import { findKey } from 'lodash'; +import { + CodiceFiscaleRegex, + Gender, + MonthsCoding, + NormalizedCodiceFiscaleRegex, + OmocodiaIndexes, + OmocodiaReplacements, +} from './codice-fiscale.constants'; +import { replaceAtIndex } from './string-utils'; +import { calculateCheckCode } from './utils'; + +export type CodiceFiscaleData = { + familyName: string; + givenName: string; + gender: Gender; + dateOfBirth: Date; + birthPlaceCode: string; +}; + +const _isValidCodiceFiscale = (codiceFiscale: string): boolean => { + if (!CodiceFiscaleRegex.test(codiceFiscale)) { + return false; + } + + const expectedCheckCode = codiceFiscale.charAt(15); + return calculateCheckCode(codiceFiscale) === expectedCheckCode; +}; + +const _isOmocodice = (codiceFiscale: string): boolean => { + return !NormalizedCodiceFiscaleRegex.test(codiceFiscale); +}; + +const _normalizeCodiceFiscale = (codiceFiscale: string): string => { + if (!_isOmocodice(codiceFiscale)) return codiceFiscale; + + let omocodiaLevel = 0; + let normalizedWithoutCheckCode = codiceFiscale.substring(0, 15); + + for (const i of OmocodiaIndexes) { + if (new RegExp(/^[a-zA-Z]$/).test(normalizedWithoutCheckCode[i])) { + omocodiaLevel++; + const replacedDigit = findKey( + OmocodiaReplacements, + (replacementLetter: string) => + replacementLetter === normalizedWithoutCheckCode[i], + ) as string; + normalizedWithoutCheckCode = replaceAtIndex( + normalizedWithoutCheckCode, + i, + replacedDigit, + ); + } + } + + const checkCode = calculateCheckCode(normalizedWithoutCheckCode); + const normalized = normalizedWithoutCheckCode + checkCode; + + return normalized; +}; + +const _extractDataFromCodiceFiscale = ( + normalizedCodiceFiscale: string, +): CodiceFiscaleData => { + const getGenderAndDayOfBirth = ( + codifiedDayOfMonth: string, + ): { gender: Gender; dayOfMonth: number } => { + return +codifiedDayOfMonth > 40 + ? { gender: 'Female', dayOfMonth: +codifiedDayOfMonth - 40 } + : { gender: 'Male', dayOfMonth: +codifiedDayOfMonth }; + }; + + const getYearOfBirth = ( + codifiedYear: string, + month: number, + day: number, + ): number => { + const year = 1900 + +codifiedYear; + + const rawCurrentAge = dayjs().year() - year; + const currentAge = dayjs(new Date(year, month - 1, day)).isAfter( + dayjs().add(-rawCurrentAge, 'years'), + ) + ? rawCurrentAge - 1 + : rawCurrentAge; + + const yearOfBirth = currentAge <= 100 ? year : year + 100; + + return yearOfBirth; + }; + + const month = Number( + findKey( + MonthsCoding, + (codifiedMonth: string) => + codifiedMonth == normalizedCodiceFiscale.substring(8, 9), + )!, + ); + const { gender, dayOfMonth } = getGenderAndDayOfBirth( + normalizedCodiceFiscale.substring(9, 11), + ); + const yearOfBirth = getYearOfBirth( + normalizedCodiceFiscale.substring(6, 8), + month, + dayOfMonth, + ); + + const data: CodiceFiscaleData = { + familyName: normalizedCodiceFiscale.substring(0, 3), + givenName: normalizedCodiceFiscale.substring(3, 6), + gender, + dateOfBirth: new Date(yearOfBirth, month - 1, dayOfMonth), + birthPlaceCode: normalizedCodiceFiscale.substring(11, 15), + }; + + return data; +}; + +export const extractDataFromCodiceFiscale = ( + codiceFiscale: string, +): CodiceFiscaleData => { + codiceFiscale = codiceFiscale.toUpperCase(); + + if (!_isValidCodiceFiscale(codiceFiscale)) + throw new Error(`Codice fiscale '${codiceFiscale}' is not valid`); + + codiceFiscale = _normalizeCodiceFiscale(codiceFiscale); + + const data = _extractDataFromCodiceFiscale(codiceFiscale); + return data; +}; + +export const isValidCodiceFiscale = (codiceFiscale: string): boolean => { + codiceFiscale = codiceFiscale.toUpperCase(); + + return _isValidCodiceFiscale(codiceFiscale); +}; + +export function isValidCodiceFiscaleValidator(controlName: string) { + return (formGroup: AbstractControl) => { + const fg = formGroup as FormGroup; + const control = fg.controls[controlName]; + if (control.value && !isValidCodiceFiscale(control.value)) { + control.setErrors({ ...(control.errors || {}), cfInvalid: true }); + } else { + if (control.errors && control.errors['cfInvalid']) { + delete control?.errors['cfInvalid']; + } + } + return null; + }; +} diff --git a/src/app/core/common/codice-fiscale/index.ts b/src/app/core/common/codice-fiscale/index.ts new file mode 100644 index 0000000..d630e8d --- /dev/null +++ b/src/app/core/common/codice-fiscale/index.ts @@ -0,0 +1,2 @@ +export * from './codice-fiscale'; +export * from './codice-fiscale.constants'; diff --git a/src/app/core/common/codice-fiscale/string-utils.ts b/src/app/core/common/codice-fiscale/string-utils.ts new file mode 100644 index 0000000..91e82d0 --- /dev/null +++ b/src/app/core/common/codice-fiscale/string-utils.ts @@ -0,0 +1,19 @@ +export const replaceAtIndex = ( + str: string, + index: number, + replacement: string, +): string => { + return ( + str.substring(0, index) + + replacement + + str.substring(index + replacement.length) + ); +}; + +export const extractVowels = (str: string): string => { + return str.replace(/[^AEIOU]/gi, ''); +}; + +export const extractConsonants = (str: string): string => { + return str.replace(/[^BCDFGHJKLMNPQRSTVWXYZ]/gi, ''); +}; diff --git a/src/app/core/common/codice-fiscale/utils/index.ts b/src/app/core/common/codice-fiscale/utils/index.ts new file mode 100644 index 0000000..04bca77 --- /dev/null +++ b/src/app/core/common/codice-fiscale/utils/index.ts @@ -0,0 +1 @@ +export * from './utils'; diff --git a/src/app/core/common/codice-fiscale/utils/utils.ts b/src/app/core/common/codice-fiscale/utils/utils.ts new file mode 100644 index 0000000..ac45b32 --- /dev/null +++ b/src/app/core/common/codice-fiscale/utils/utils.ts @@ -0,0 +1,40 @@ +import { extractConsonants, extractVowels } from '../string-utils'; +import { + CheckCodePariCoding, + CheckCodeOddCoding, + CheckCodeRestoCoding, +} from '../codice-fiscale.constants'; + +export const calculateCheckCode = (codiceFiscale: string): string => { + codiceFiscale = codiceFiscale.toUpperCase(); + let val = 0; + for (let i = 0; i < 15; i = i + 1) { + const c: keyof typeof CheckCodePariCoding = codiceFiscale[i] as any; + val += i % 2 !== 0 ? CheckCodePariCoding[c] : CheckCodeOddCoding[c]; + } + const resto: keyof typeof CheckCodeRestoCoding = (val % 26) as any; + return CheckCodeRestoCoding[resto]; +}; + +export const calculateGivenNameCode = (givenName: string): string => { + givenName = givenName.toUpperCase(); + + const consonants = extractConsonants(givenName); + + const code = + consonants.length >= 4 + ? consonants.charAt(0) + consonants.charAt(2) + consonants.charAt(3) + : `${consonants}${extractVowels(givenName)}XXX`.substring(0, 3); + return code; +}; + +export const calculateFamilyNameCode = (familyName: string): string => { + familyName = familyName.toUpperCase(); + + const code = + `${extractConsonants(familyName)}${extractVowels(familyName)}XXX`.substring( + 0, + 3, + ); + return code; +}; diff --git a/src/app/core/common/dayjs/index.ts b/src/app/core/common/dayjs/index.ts new file mode 100644 index 0000000..2a5158d --- /dev/null +++ b/src/app/core/common/dayjs/index.ts @@ -0,0 +1,20 @@ +import * as dayjs from 'dayjs'; +import utc from 'dayjs/plugin/utc'; +import customParseFormat from 'dayjs/plugin/customParseFormat'; +import timezone from 'dayjs/plugin/timezone'; +import minMax from 'dayjs/plugin/minMax'; +import isSameOrAfter from 'dayjs/plugin/isSameOrAfter'; +import isSameOrBefore from 'dayjs/plugin/isSameOrBefore'; +import localizedFormat from 'dayjs/plugin/localizedFormat'; +import * as itLocale from 'dayjs/locale/it'; + +dayjs.locale(itLocale.name); +dayjs.extend(utc); +dayjs.extend(customParseFormat); +dayjs.extend(timezone); +dayjs.extend(minMax); +dayjs.extend(localizedFormat); +dayjs.extend(isSameOrAfter); +dayjs.extend(isSameOrBefore); +export const itTz = 'Europe/Rome'; +export const utcTz = 'GMT'; diff --git a/src/app/core/common/enum/ambiente.enum.ts b/src/app/core/common/enum/ambiente.enum.ts new file mode 100644 index 0000000..30a6590 --- /dev/null +++ b/src/app/core/common/enum/ambiente.enum.ts @@ -0,0 +1,9 @@ +export enum AmbientiEnum { + PrestazioniRimborsi = 'PRESTAZIONI_RIMBORSI', + Rimborsi = 'RIMBORSI', + Autorizzazioni = 'AUTORIZZAZIONI', + ContributiRichiesti = 'CONTRIBUTI_RICHIESTI', + PreseCarico = 'PRESE_CARICO', + Prestazioni = 'PRESTAZIONI', + Soci_attivi_mese = 'SOCI_ATTIVI_MESE', +} diff --git a/src/app/core/common/enum/convenzioni.enum.ts b/src/app/core/common/enum/convenzioni.enum.ts new file mode 100644 index 0000000..d12dc18 --- /dev/null +++ b/src/app/core/common/enum/convenzioni.enum.ts @@ -0,0 +1,5 @@ +export enum StatoConvenzioniEnum { + ATTIVO = 'ATTIVO', + CHIUSO = 'CHIUSO', + TUTTI = 'TUTTI', +} diff --git a/src/app/core/common/operators/is-defined.ts b/src/app/core/common/operators/is-defined.ts new file mode 100644 index 0000000..9212fde --- /dev/null +++ b/src/app/core/common/operators/is-defined.ts @@ -0,0 +1,5 @@ +export const isDefined = ( + arg: T | null | undefined, +): arg is T extends null | undefined ? never : T => { + return arg !== null && arg !== undefined; +}; diff --git a/src/app/core/common/paginate/index.ts b/src/app/core/common/paginate/index.ts new file mode 100644 index 0000000..5ad87fd --- /dev/null +++ b/src/app/core/common/paginate/index.ts @@ -0,0 +1,2 @@ +export * from './lazy-loading-event.utils'; +export * from './query-strings'; diff --git a/src/app/core/common/paginate/lazy-loading-event.utils.ts b/src/app/core/common/paginate/lazy-loading-event.utils.ts new file mode 100644 index 0000000..84087f6 --- /dev/null +++ b/src/app/core/common/paginate/lazy-loading-event.utils.ts @@ -0,0 +1,137 @@ +import dayjs from 'dayjs'; +import { isArray, isDate, isNull, negate } from 'lodash'; +import { FilterMetadata } from 'primeng/api'; +import { DataView } from 'primeng/dataview'; +import { Table, TableLazyLoadEvent } from 'primeng/table'; +import { + FilterOperator, + FilterSuffix, + PaginationQueryString, +} from './query-strings'; + +const convertValue = (value: any): string => { + if (isDate(value)) { + return dayjs(value).format('YYYY-MM-DD'); + } + return value; +}; + +const convertOperators = ( + matchMode: string | undefined, +): [FilterOperator, FilterSuffix?] => { + switch (matchMode) { + case 'startsWith': + return ['$sw']; + case 'between': + return ['$btw']; + case 'contains': + return ['$ilike']; + case 'notContains': + return ['$ilike', '$not']; + case 'equals': + case 'is': + case 'dateIs': + return ['$eq']; + case 'notEquals': + case 'isNot': + return ['$eq', '$not']; + case 'in': + return ['$in']; + case 'lt': + case 'before': + case 'dateBefore': + return ['$lt']; + case 'lte': + return ['$lte']; + case 'gt': + case 'after': + case 'dateAfter': + return ['$gt']; + case 'gte': + return ['$gte']; + case 'endsWith': + throw new Error(`PrimeNG filter 'endsWith' is not supported`); + default: + return ['$ilike']; + } +}; + +export const convertLazyLoadEvent = ( + event: TableLazyLoadEvent, +): ReturnType => { + const query = PaginationQueryString.builder(); + + if (event.first != undefined) { + const { first, rows } = event; + const limit = rows ?? 20; + const page = first / limit + 1; + query.setPagination({ limit, page }); + } + if (event.sortField != undefined) { + const { sortField, sortOrder } = event; + const order = (sortOrder ?? 1) > 0 ? 'ASC' : 'DESC'; + if (isArray(sortField)) { + for (const sortFieldEntry of sortField) { + query.addOrder(sortFieldEntry, order); + } + } else { + query.addOrder(sortField, order); + } + } else if (event.multiSortMeta != undefined) { + for (const multiSortMetaEntry of event.multiSortMeta) { + const { field: sortField, order: sortOrder } = multiSortMetaEntry; + const order = (sortOrder ?? 1) > 0 ? 'ASC' : 'DESC'; + query.addOrder(sortField, order); + } + } + for (const [filterKey, filterValue] of Object.entries(event.filters ?? {})) { + if (filterValue == undefined) continue; + const metadatas: FilterMetadata[] = isArray(filterValue) + ? [...filterValue] + : [filterValue]; + for (const metadata of metadatas.filter((x) => { + if (x.value === null || x.value === undefined) return false; + if (Array.isArray(x.value)) return x.value.length > 0; + return true; + })) { + const value = convertValue(metadata.value); + const operators = convertOperators(metadata.matchMode); + + const values = isArray(value) ? value : [value]; + if (values.some((value) => value === null) && operators[0] === '$in') { + query.addFilter(filterKey, ['$null'], []); + const nonNullValues = values.filter(negate(isNull)); + if (nonNullValues.length > 0) { + query.addFilter(filterKey, ['$in'], nonNullValues, '$or'); + } + } else { + query.addFilter(filterKey, operators, value); + } + } + } + if ( + event.globalFilter != undefined && + typeof event.globalFilter === 'string' + ) { + query.setSearch(event.globalFilter); + } + + return query; +}; + +export const getInitialTableLazyLoadEvent = ( + table: Table, +): TableLazyLoadEvent => ({ + first: 0, + rows: table.rows ?? undefined, + sortOrder: table.sortOrder, + sortField: table.sortField ?? undefined, + multiSortMeta: table.multiSortMeta ?? undefined, +}); + +export const getInitialDataViewLazyLoadEvent = (dataView: DataView) => ({ + first: 0, + rows: dataView.rows, + sortOrder: dataView.sortOrder, + sortField: dataView.sortField, +}); diff --git a/src/app/core/common/paginate/query-strings.ts b/src/app/core/common/paginate/query-strings.ts new file mode 100644 index 0000000..f26af0c --- /dev/null +++ b/src/app/core/common/paginate/query-strings.ts @@ -0,0 +1,288 @@ +import { chain, isArrayLike, isEmpty, isNil } from 'lodash'; +import { Paths } from 'type-fest'; + +export type FilterOperator = + | '$eq' + | '$gt' + | '$gte' + | '$in' + | '$null' + | '$lt' + | '$lte' + | '$btw' + | '$ilike' + | '$sw' + | '$contains'; +export type FilterSuffix = '$not'; +export type FilterModeSuffix = '$and' | '$or'; +export type OrderSort = 'ASC' | 'DESC'; + +export type FilterEntry = [ + string, + [FilterOperator, FilterSuffix?], + any, + FilterModeSuffix?, + number?, +]; +export type OrderEntry = [string, OrderSort]; + +export class PaginationQueryString< + T = any, + TPaths extends Paths = Paths, +> { + readonly select?: TPaths[]; + readonly filter?: FilterEntry[]; + readonly sortBy?: OrderEntry[]; + readonly search?: string; + readonly limit?: number; + readonly page?: number; + readonly lastNullGroup?: number; + + /** + * @deprecated Use the static method {@link PaginationQueryString.builder()} or the {@link PaginationQueryStringBuilder} instead. + */ + constructor(query: Partial>) { + if (query.select != undefined) this.select = query.select; + if (query.filter != undefined) this.filter = query.filter; + if (query.sortBy != undefined) this.sortBy = query.sortBy; + if (query.search != undefined) this.search = query.search; + if (query.limit != undefined) this.limit = query.limit; + if (query.page != undefined) this.page = query.page; + if (query.lastNullGroup != undefined) + this.lastNullGroup = query.lastNullGroup; + } + + static builder = Paths>( + query?: Partial>, + ): PaginationQueryStringBuilder { + return new PaginationQueryStringBuilder(query); + } + + paramsify() { + const params: Record = {}; + + if (this.limit !== undefined) { + params['limit'] = this.limit; + } + if (this.page !== undefined) { + params['page'] = this.page; + } + if (this.sortBy !== undefined) { + params['sortBy'] = this.sortBy.map(([field, sort]) => { + return `${field}:${sort}`; + }); + } + if (this.search !== undefined) { + params['search'] = this.search; + } + if (this.filter !== undefined) { + chain(this.filter) + .groupBy(([field]) => field) + .forEach((group) => { + const [field] = group[0]; + return (params[`filter.${field}`] = group.map( + ([_field, operators, filter, mode, group]) => { + const [operator, suffix] = operators; + return `${group ? `[${group}]:` : ''}${mode ? `${mode}:` : ''}${suffix ? `${suffix}:` : ''}${operator}${ + filter != null ? `:${filter}` : '' + }`; + }, + )); + }) + .value(); + } + if (this.select !== undefined) { + params['select'] = this.select.join(','); + } + + return params; + } + + stringify(): string { + const params: string[] = []; + + if (this.limit !== undefined) { + params.push(`limit=${this.limit}`); + } + if (this.page !== undefined) { + params.push(`page=${this.page}`); + } + if (this.sortBy !== undefined) { + params.push( + ...this.sortBy.map(([field, sort]) => { + return `sortBy=${field}:${sort}`; + }), + ); + } + if (this.search !== undefined) { + params.push(`search=${this.search}`); + } + if (this.filter !== undefined) { + params.push( + ...this.filter.map(([field, operators, filter, mode, group]) => { + const [operator, suffix] = operators; + return `filter.${field}=${group ? `[${group}]:` : ''}${mode ? `${mode}:` : ''}${ + suffix ? `${suffix}:` : '' + }${operator}:${filter != null ? `:${filter}` : ''}`; + }), + ); + } + if (this.select !== undefined) { + params.push(`select=${this.select.join(',')}`); + } + + return params.join('&'); + } +} + +export class PaginationQueryStringBuilder< + T = any, + TPaths extends Paths = Paths, +> { + private select?: TPaths[]; + private filter?: FilterEntry[]; + private sortBy?: OrderEntry[]; + private search?: string; + private limit?: number; + private page?: number; + + public lastNullGroup = 100; + + constructor(query?: Partial>) { + if (!query) return; + + if (query.select != undefined) this.setSelect(query.select); + if (query.filter != undefined) + query.filter.forEach((f) => this.addFilter(f[0], f[1], f[2], f[3], f[4])); + if (query.sortBy != undefined) + query.sortBy.forEach((s) => this.addOrder(s[0], s[1])); + if (query.search != undefined) this.setSearch(query.search); + this.setPagination({ limit: query.limit, page: query.page }); + if (query.lastNullGroup != undefined) + this.lastNullGroup = query.lastNullGroup; + } + + setPagination( + opts: Pick, 'limit' | 'page'>, + ): PaginationQueryStringBuilder { + if ( + opts.limit !== undefined && + !(opts.limit >= 0 && Number.isInteger(opts.limit)) + ) { + throw new Error(`Limit must be non-negative integer`); + } + + if ( + opts.page !== undefined && + !(opts.page >= 0 && Number.isInteger(opts.page)) + ) { + throw new Error(`Page must be non-negative integer`); + } + + this.limit = opts.limit; + this.page = opts.page; + return this; + } + + setSelect>( + fields: readonly TSelection[], + ): PaginationQueryStringBuilder { + this.select = fields.map((field) => field as unknown as TPaths); + return this as unknown as PaginationQueryStringBuilder; + } + + setSearch(value: string): PaginationQueryStringBuilder { + this.search = value; + return this; + } + + clearFilter(field: string) { + this.filter ??= []; + this.filter = this.filter?.filter((x) => x[0] !== field); + return this; + } + + addFilter( + field: string, + operators: [FilterOperator, FilterSuffix?], + value: any, + mode?: FilterModeSuffix, + group?: number, + ): PaginationQueryStringBuilder { + if ( + (isNil(value) || (isArrayLike(value) && isEmpty(value))) && + operators[0] != '$null' + ) + return this; + + this.filter ??= []; + if ( + isArrayLike(value) && + operators[0] === '$in' && + (value as any[]).includes(null) + ) { + this.lastNullGroup++; + this.filter.push([ + field, + ['$null', operators[1]], + undefined, + mode, + this.lastNullGroup + (group ?? 0), + ]); + value = (value as any[]).filter((x) => x !== null); + if (value.length > 0) { + this.filter.push([ + field, + operators, + value, + '$or', + this.lastNullGroup + (group ?? 0), + ]); + } + } else { + this.filter.push([field, operators, value, mode, group]); + } + return this; + } + + addFilters( + field: string, + operators: [FilterOperator, FilterSuffix?], + values: any[], + mode?: FilterModeSuffix, + group?: number, + ): PaginationQueryStringBuilder { + if (isNil(values) || (isArrayLike(values) && isEmpty(values))) return this; + + this.filter ??= []; + // const [first, ...rest] = values; + const [operator, suffix] = operators; + + // this.filter.push([field, [operator, suffix], first]); + // for (const value of rest) { + for (const value of values) { + this.filter.push([field, [operator, suffix], value, mode, group]); + } + return this; + } + + addOrder( + field: string, + sort: OrderSort, + ): PaginationQueryStringBuilder { + this.sortBy ??= []; + this.sortBy.push([field, sort]); + return this; + } + + finalize(): PaginationQueryString { + return new PaginationQueryString({ + select: this.select, + filter: this.filter, + sortBy: this.sortBy, + search: this.search, + limit: this.limit, + page: this.page, + }); + } +} diff --git a/src/app/core/common/queue/queue.ts b/src/app/core/common/queue/queue.ts new file mode 100644 index 0000000..39611d8 --- /dev/null +++ b/src/app/core/common/queue/queue.ts @@ -0,0 +1,32 @@ +export class Queue { + constructor( + private elements: Record = {}, + private head: number = 0, + private tail: number = 0, + ) {} + + public enqueue(element: T): void { + this.elements[this.tail] = element; + this.tail++; + } + + public dequeue(): T { + const item = this.elements[this.head]; + delete this.elements[this.head]; + this.head++; + + return item; + } + + public peek(): T { + return this.elements[this.head]; + } + + public get length(): number { + return this.tail - this.head; + } + + public get isEmpty(): boolean { + return this.length === 0; + } +} diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts new file mode 100644 index 0000000..44d2613 --- /dev/null +++ b/src/app/core/core.module.ts @@ -0,0 +1,39 @@ +import { + LOCALE_ID, + ModuleWithProviders, + NgModule, + Optional, + SkipSelf, +} from '@angular/core'; +import { MessageService } from 'primeng/api'; +import { MessageModule } from 'primeng/message'; +import { MessagesModule } from 'primeng/messages'; + +@NgModule({ + imports: [MessagesModule, MessageModule], + providers: [ + { + provide: LOCALE_ID, + useValue: 'it', + }, + MessageService, + ], + declarations: [], + exports: [], +}) +export class CoreModule { + constructor(@Optional() @SkipSelf() parentModule: CoreModule) { + if (parentModule) { + throw new Error( + 'CoreModule is already loaded. Import it in the AppModule only', + ); + } + } + + static forRoot(): ModuleWithProviders { + return { + ngModule: CoreModule, + providers: [], + }; + } +} diff --git a/src/app/core/directives/date-mask.directive.ts b/src/app/core/directives/date-mask.directive.ts new file mode 100644 index 0000000..91e8f08 --- /dev/null +++ b/src/app/core/directives/date-mask.directive.ts @@ -0,0 +1,30 @@ +import { Directive, inject, type AfterViewInit } from '@angular/core'; +import Inputmask from 'inputmask'; +import { Calendar } from 'primeng/calendar'; + +@Directive({ + selector: '[appDateMask]', + standalone: true, +}) +export class DateMaskDirective implements AfterViewInit { + readonly #primeCalendar = inject(Calendar); + + ngAfterViewInit() { + new Inputmask(this.getDateMask()).mask(this.getHTMLInput()); + } + + getHTMLInput(): HTMLInputElement { + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return this.#primeCalendar.el.nativeElement.querySelector('input'); + } + + getDateMask(): string { + if (this.#primeCalendar.timeOnly) { + return '99:99'; + } else if (this.#primeCalendar.showTime) { + return '99/99/9999 99:99'; + } else { + return '99/99/9999'; + } + } +} diff --git a/src/app/core/directives/has-privilege.directive.ts b/src/app/core/directives/has-privilege.directive.ts new file mode 100644 index 0000000..621df9d --- /dev/null +++ b/src/app/core/directives/has-privilege.directive.ts @@ -0,0 +1,63 @@ +import { + Directive, + Input, + OnDestroy, + OnInit, + TemplateRef, + ViewContainerRef, +} from '@angular/core'; +import { AuthService } from '@core/services/auth.service'; +import { intersection, isEmpty } from 'lodash'; +import { ReplaySubject } from 'rxjs'; +import { takeUntil, tap } from 'rxjs/operators'; +import { AccountResDto } from '@api/models'; + +@Directive({ + selector: '[appHasPrivilege]', +}) +export class HasPrivilegeDirective implements OnInit, OnDestroy { + // the privilege the user must have + @Input() appHasPrivilege: string[] = []; + + private destroyed$: ReplaySubject = new ReplaySubject(1); + + isVisible = false; + + constructor( + private viewContainerRef: ViewContainerRef, + private templateRef: TemplateRef, + private authService: AuthService, + ) {} + + ngOnInit() { + this.authService.currentUser + .pipe( + takeUntil(this.destroyed$), + tap((user: AccountResDto | null) => { + if (!user?.privileges) { + this.isVisible = false; + this.viewContainerRef.clear(); + return; + } + const userPrivileges = user.privileges.map( + (privilege) => privilege.actionCode, + ); + if (!isEmpty(intersection(this.appHasPrivilege, userPrivileges))) { + if (!this.isVisible) { + this.isVisible = true; + this.viewContainerRef.createEmbeddedView(this.templateRef); + } + } else { + this.isVisible = false; + this.viewContainerRef.clear(); + } + }), + ) + .subscribe(); + } + + ngOnDestroy() { + this.destroyed$.next(true); + this.destroyed$.complete(); + } +} diff --git a/src/app/core/directives/has-role.directive.ts b/src/app/core/directives/has-role.directive.ts new file mode 100644 index 0000000..5356fa4 --- /dev/null +++ b/src/app/core/directives/has-role.directive.ts @@ -0,0 +1,61 @@ +import { + Directive, + Input, + OnDestroy, + OnInit, + TemplateRef, + ViewContainerRef, +} from '@angular/core'; +import { AccountResDto } from '@api/models'; +import { AuthService } from '@core/services'; +import { intersection, isEmpty } from 'lodash'; +import { ReplaySubject } from 'rxjs'; +import { takeUntil, tap } from 'rxjs/operators'; + +@Directive({ + selector: '[appHasRole]', +}) +export class HasRoleDirective implements OnInit, OnDestroy { + // the role the user must have + @Input() appHasRole: string[] = []; + + private destroyed$: ReplaySubject = new ReplaySubject(1); + + isVisible = false; + + constructor( + private viewContainerRef: ViewContainerRef, + private templateRef: TemplateRef, + private authService: AuthService, + ) {} + + ngOnInit() { + this.authService.currentUser + .pipe( + takeUntil(this.destroyed$), + tap((user: AccountResDto | null) => { + if (!user?.roles) { + this.isVisible = false; + this.viewContainerRef.clear(); + return; + } + const userRoles = user.roles.map((role) => role.roleCode); + if (!isEmpty(intersection(this.appHasRole, userRoles))) { + if (!this.isVisible) { + this.isVisible = true; + this.viewContainerRef.createEmbeddedView(this.templateRef); + } + } else { + this.isVisible = false; + this.viewContainerRef.clear(); + } + }), + ) + .subscribe(); + } + + ngOnDestroy() { + this.destroyed$.next(true); + this.destroyed$.complete(); + } +} diff --git a/src/app/core/directives/is-expired.directive.ts b/src/app/core/directives/is-expired.directive.ts new file mode 100644 index 0000000..d94de1d --- /dev/null +++ b/src/app/core/directives/is-expired.directive.ts @@ -0,0 +1,57 @@ +import { + Directive, + OnDestroy, + OnInit, + TemplateRef, + ViewContainerRef, +} from '@angular/core'; +import { AccountResDto } from '@api/models'; +import { AuthService } from '@core/services'; +import dayjs from 'dayjs'; +import { ReplaySubject } from 'rxjs'; +import { takeUntil, tap } from 'rxjs/operators'; + +@Directive({ + selector: '[appIsExpired]', +}) +export class IsExpiredDirective implements OnInit, OnDestroy { + private destroyed$: ReplaySubject = new ReplaySubject(1); + + isVisible = false; + + constructor( + private viewContainerRef: ViewContainerRef, + private templateRef: TemplateRef, + private authService: AuthService, + ) {} + + ngOnInit() { + this.authService.currentUser + .pipe( + takeUntil(this.destroyed$), + tap((user: AccountResDto | null) => { + if (!user) { + this.isVisible = false; + this.viewContainerRef.clear(); + return; + } + const userExpires = user.expireDate; + if (!userExpires || dayjs().isBefore(userExpires)) { + if (!this.isVisible) { + this.isVisible = true; + this.viewContainerRef.createEmbeddedView(this.templateRef); + } + } else { + this.isVisible = false; + this.viewContainerRef.clear(); + } + }), + ) + .subscribe(); + } + + ngOnDestroy() { + this.destroyed$.next(true); + this.destroyed$.complete(); + } +} diff --git a/src/app/core/directives/is-not-readonly.directive.ts b/src/app/core/directives/is-not-readonly.directive.ts new file mode 100644 index 0000000..e4d863a --- /dev/null +++ b/src/app/core/directives/is-not-readonly.directive.ts @@ -0,0 +1,65 @@ +import { + Directive, + Input, + OnDestroy, + OnInit, + TemplateRef, + ViewContainerRef, +} from '@angular/core'; +import { AccountResDto } from '@api/models'; +import { AuthService } from '@core/services'; +import { intersection, isEmpty } from 'lodash'; +import { ReplaySubject } from 'rxjs'; +import { takeUntil, tap } from 'rxjs/operators'; + +@Directive({ + selector: '[appIsNotReadOnly]', +}) +export class IsNotReadOnlyDirective implements OnInit, OnDestroy { + @Input() appIsNotReadOnly: string[] = []; + + private destroyed$: ReplaySubject = new ReplaySubject(1); + + isVisible = false; + + constructor( + private viewContainerRef: ViewContainerRef, + private templateRef: TemplateRef, + private authService: AuthService, + ) {} + + ngOnInit() { + this.authService.currentUser + .pipe( + takeUntil(this.destroyed$), + tap((user: AccountResDto | null) => { + if (!user?.privileges) { + this.isVisible = false; + this.viewContainerRef.clear(); + return; + } + // const action = Object.keys(this.appVisibleLevel); + // const levels = this.appVisibleLevel[action[0]]; + const userPrivileges = user.privileges + .filter((res) => !res.flagReadOnly) + .map((privilege) => privilege.actionCode); + + if (!isEmpty(intersection(this.appIsNotReadOnly, userPrivileges))) { + if (!this.isVisible) { + this.isVisible = true; + this.viewContainerRef.createEmbeddedView(this.templateRef); + } + } else { + this.isVisible = false; + this.viewContainerRef.clear(); + } + }), + ) + .subscribe(); + } + + ngOnDestroy() { + this.destroyed$.next(true); + this.destroyed$.complete(); + } +} diff --git a/src/app/core/directives/my-directive.module.ts b/src/app/core/directives/my-directive.module.ts new file mode 100644 index 0000000..5463286 --- /dev/null +++ b/src/app/core/directives/my-directive.module.ts @@ -0,0 +1,24 @@ +import { HasPrivilegeDirective } from '@core/directives/has-privilege.directive'; +import { HasRoleDirective } from '@core/directives/has-role.directive'; +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { IsExpiredDirective } from './is-expired.directive'; +import { IsNotReadOnlyDirective } from './is-not-readonly.directive'; + +@NgModule({ + imports: [ + CommonModule, + HasRoleDirective, + HasPrivilegeDirective, + IsExpiredDirective, + IsNotReadOnlyDirective, + ], + declarations: [], + exports: [ + HasRoleDirective, + HasPrivilegeDirective, + IsExpiredDirective, + IsNotReadOnlyDirective, + ], +}) +export class MyDirectiveModule {} diff --git a/src/app/core/guards/expired-guard.ts b/src/app/core/guards/expired-guard.ts new file mode 100644 index 0000000..a10abe6 --- /dev/null +++ b/src/app/core/guards/expired-guard.ts @@ -0,0 +1,34 @@ +import { Injectable } from '@angular/core'; +import { Router } from '@angular/router'; + +import { AccountResDto } from '@api/models'; +import { AuthService } from '@core/services/auth.service'; +import dayjs from 'dayjs'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +@Injectable() +export class ExpiredGuard { + constructor( + public authService: AuthService, + public router: Router, + ) {} + + canActivate(): Observable | boolean { + return this.authService.currentUser.pipe( + map((user: AccountResDto | null) => { + if (!user) { + this.router.navigate(['']); + return false; + } + const userExpires = user.expireDate; + if (!userExpires || dayjs().isBefore(userExpires)) { + return true; + } else { + this.router.navigate(['']); + return false; + } + }), + ); + } +} diff --git a/src/app/core/guards/index.ts b/src/app/core/guards/index.ts new file mode 100644 index 0000000..3901499 --- /dev/null +++ b/src/app/core/guards/index.ts @@ -0,0 +1,5 @@ +export * from './expired-guard'; +export * from './is-logged.guard'; +export * from './privilege-guard'; +export * from './redirect.guard'; +export * from './role-guard'; diff --git a/src/app/core/guards/is-logged.guard.ts b/src/app/core/guards/is-logged.guard.ts new file mode 100644 index 0000000..686e872 --- /dev/null +++ b/src/app/core/guards/is-logged.guard.ts @@ -0,0 +1,54 @@ +import { Injectable } from '@angular/core'; +import { + ActivatedRouteSnapshot, + Params, + Router, + RouterStateSnapshot, +} from '@angular/router'; +import { AuthService } from '@core/services/auth.service'; +import { Observable } from 'rxjs'; +import { distinctUntilChanged, tap } from 'rxjs/operators'; + +@Injectable({ providedIn: 'root' }) +export class IsLoggedGuard { + constructor( + private authService: AuthService, + private router: Router, + ) {} + + checkIfUserIsAuthenticated(params?: Params, redirect?: string) { + return this.authService.isAuthenticated$.pipe( + distinctUntilChanged(), + tap((isAuth: boolean) => { + if (!isAuth) { + if (params && params['code'] && params['email']) { + const queryParams: Params = { + code: params['code'], + email: params['email'], + redirect, + }; + this.router.navigate(['/login'], { queryParams }); + } else { + if (redirect) { + const queryParams: Params = { redirect }; + this.router.navigate(['/login'], { + ...(queryParams['redirect'] !== '/' ? { queryParams } : {}), + }); + } else { + this.router.navigate(['/login']); + } + } + } + }), + ); + } + + canActivate( + route: ActivatedRouteSnapshot, + state: RouterStateSnapshot, + ): Observable | Promise | boolean { + const url = state.url; + const relativePath = url.split('?'); + return this.checkIfUserIsAuthenticated(route.queryParams, relativePath[0]); + } +} diff --git a/src/app/core/guards/privilege-guard.ts b/src/app/core/guards/privilege-guard.ts new file mode 100644 index 0000000..3feff91 --- /dev/null +++ b/src/app/core/guards/privilege-guard.ts @@ -0,0 +1,44 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, CanActivate, Router } from '@angular/router'; +import { AccountResDto } from '@api/models'; +import { AuthService } from '@core/services/auth.service'; +import { intersection, isEmpty } from 'lodash'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +@Injectable({ providedIn: 'root' }) +export class PrivilegeGuard implements CanActivate { + constructor( + public authService: AuthService, + public router: Router, + ) {} + + canActivate(route: ActivatedRouteSnapshot): Observable | boolean { + const expectedPrivileges = route.data[ + 'expectedPrivileges' + ] as Array; + + return this.authService.currentUser.pipe( + map((user: AccountResDto | null) => { + if (!user || !user['privileges']) { + this.router.navigate(['/login']); + return false; + } + const userPrivileges = user.privileges.map( + (privilege) => privilege.actionCode, + ); // se invio expectedVisibleLevels mappo solo quelli che hanno quel level + if ( + !isEmpty(intersection(expectedPrivileges, userPrivileges)) && + intersection(expectedPrivileges, userPrivileges).length === + expectedPrivileges.length + ) { + // deve avere tutti i privilegi richiesti da expectedPrivileges + return true; + } else { + this.router.navigate(['']); + return false; + } + }), + ); + } +} diff --git a/src/app/core/guards/redirect-cruscotti.guard.ts b/src/app/core/guards/redirect-cruscotti.guard.ts new file mode 100644 index 0000000..76b6f7c --- /dev/null +++ b/src/app/core/guards/redirect-cruscotti.guard.ts @@ -0,0 +1,35 @@ +import { Injectable } from '@angular/core'; +import { Router } from '@angular/router'; +import { AccountResDto } from '@api/models'; +import { AuthService } from '@core/services/auth.service'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +@Injectable({ providedIn: 'root' }) +export class RedirectCruscottiGuard { + constructor( + public authService: AuthService, + public router: Router, + ) {} + + canActivate(): Observable | boolean { + return this.authService.currentUser.pipe( + map((user: AccountResDto | null) => { + if (!user || !user.privileges) { + return false; + } else if ( + user && + user.privileges && + user.privileges + .map((privilege) => privilege.actionCode) + .includes('PRESTAZIONI_RIMBORSI') + ) { + this.router.navigate(['/cruscotti', 'prestazioni-rimborsi']); + return true; + } else { + return false; + } + }), + ); + } +} diff --git a/src/app/core/guards/redirect-jobs.guard .ts b/src/app/core/guards/redirect-jobs.guard .ts new file mode 100644 index 0000000..085ca05 --- /dev/null +++ b/src/app/core/guards/redirect-jobs.guard .ts @@ -0,0 +1,35 @@ +import { Injectable } from '@angular/core'; +import { Router } from '@angular/router'; +import { AccountResDto } from '@api/models'; +import { AuthService } from '@core/services/auth.service'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +@Injectable({ providedIn: 'root' }) +export class RedirectJobsGuard { + constructor( + public authService: AuthService, + public router: Router, + ) {} + + canActivate(): Observable | boolean { + return this.authService.currentUser.pipe( + map((user: AccountResDto | null) => { + if (!user || !user.privileges) { + return false; + } else if ( + user && + user.privileges && + user.privileges + .map((privilege) => privilege.actionCode) + .includes('CHIUSURE_AUTOMATICHE') + ) { + this.router.navigate(['/jobs', 'chiusure-automatiche']); + return true; + } else { + return false; + } + }), + ); + } +} diff --git a/src/app/core/guards/redirect-report.guard.ts b/src/app/core/guards/redirect-report.guard.ts new file mode 100644 index 0000000..0aae9a3 --- /dev/null +++ b/src/app/core/guards/redirect-report.guard.ts @@ -0,0 +1,35 @@ +import { Injectable } from '@angular/core'; +import { Router } from '@angular/router'; +import { AccountResDto } from '@api/models'; +import { AuthService } from '@core/services/auth.service'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +@Injectable({ providedIn: 'root' }) +export class RedirectReportGuard { + constructor( + public authService: AuthService, + public router: Router, + ) {} + + canActivate(): Observable | boolean { + return this.authService.currentUser.pipe( + map((user: AccountResDto | null) => { + if (!user || !user.privileges) { + return false; + } else if ( + user && + user.privileges && + user.privileges + .map((privilege) => privilege.actionCode) + .includes('WELLFARE') + ) { + this.router.navigate(['/report', 'wellfare']); + return true; + } else { + return false; + } + }), + ); + } +} diff --git a/src/app/core/guards/redirect.guard.ts b/src/app/core/guards/redirect.guard.ts new file mode 100644 index 0000000..d1ebc41 --- /dev/null +++ b/src/app/core/guards/redirect.guard.ts @@ -0,0 +1,72 @@ +import { Injectable } from '@angular/core'; +import { Router } from '@angular/router'; +import { AccountResDto } from '@api/models'; +import { AuthService } from '@core/services/auth.service'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +@Injectable({ providedIn: 'root' }) +export class RedirectGuard { + constructor( + public authService: AuthService, + public router: Router, + ) {} + + canActivate(): Observable | boolean { + return this.authService.currentUser.pipe( + map((user: AccountResDto | null) => { + if (!user || !user.privileges) { + this.router.navigate(['/public/strutture']); + return true; + } else if ( + user && + user.privileges && + user.privileges + .map((privilege) => privilege.actionCode) + .includes('DASHBOARD') + ) { + this.router.navigate(['dashboard']); + return true; + } else if ( + user && + user.privileges && + user.privileges + .map((privilege) => privilege.actionCode) + .includes('ACCOUNT_MANAGER') + ) { + this.router.navigate(['/utenti']); + return true; + } else if ( + user && + user.privileges && + user.privileges + .map((privilege) => privilege.actionCode) + .includes('WELLFARE') + ) { + this.router.navigate(['/report/wellfare']); + return true; + } else if ( + user && + user.privileges && + user.privileges + .map((privilege) => privilege.actionCode) + .includes('ROLE_MANAGER') + ) { + this.router.navigate(['/ruoli']); + return true; + } else if ( + user && + user.privileges && + user.privileges + .map((privilege) => privilege.actionCode) + .includes('STRUTTURE') + ) { + this.router.navigate(['/strutture']); + return true; + } else { + return false; + } + }), + ); + } +} diff --git a/src/app/core/guards/role-guard.ts b/src/app/core/guards/role-guard.ts new file mode 100644 index 0000000..4e9c1bb --- /dev/null +++ b/src/app/core/guards/role-guard.ts @@ -0,0 +1,34 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, Router } from '@angular/router'; +import { AccountResDto } from '@api/models'; +import { AuthService } from '@core/services/auth.service'; +import { intersection, isEmpty } from 'lodash'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +@Injectable() +export class RoleGuard { + constructor( + public authService: AuthService, + public router: Router, + ) {} + + canActivate(route: ActivatedRouteSnapshot): Observable | boolean { + const expectedRoles = route.data['expectedRoles']; + return this.authService.currentUser.pipe( + map((user: AccountResDto | null) => { + if (!user || !user['roles']) { + this.router.navigate(['']); + return false; + } + const userRoles = user.roles.map((role) => role.roleCode); + if (!isEmpty(intersection(expectedRoles, userRoles))) { + return true; + } else { + this.router.navigate(['']); + return false; + } + }), + ); + } +} diff --git a/src/app/core/index.ts b/src/app/core/index.ts new file mode 100644 index 0000000..cdfc4f2 --- /dev/null +++ b/src/app/core/index.ts @@ -0,0 +1,6 @@ +export * from './core.module'; +export * from './guards'; +export * from './interceptors'; +export * from './models'; +export * from './pipes'; +export * from './services'; diff --git a/src/app/core/interceptors/http-token.interceptor.ts b/src/app/core/interceptors/http-token.interceptor.ts new file mode 100644 index 0000000..d69215f --- /dev/null +++ b/src/app/core/interceptors/http-token.interceptor.ts @@ -0,0 +1,55 @@ +import { + HttpErrorResponse, + HttpEvent, + HttpHandler, + HttpInterceptor, + HttpRequest, + HttpStatusCode, +} from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Router } from '@angular/router'; +import { JwtService } from '@core/services/jwt.service'; +import { Observable, catchError, throwError } from 'rxjs'; + +@Injectable() +export class HttpTokenInterceptor implements HttpInterceptor { + constructor( + private jwtService: JwtService, + private router: Router, + ) {} + + intercept( + req: HttpRequest, + next: HttpHandler, + ): Observable> { + const headersConfig = { + Platform: 'web', + Authorization: '', + }; + + const token = this.jwtService.getToken(); + if (token) { + headersConfig['Authorization'] = `Bearer ${token}`; + } + + const request = req.clone({ + setHeaders: headersConfig, + }); + + return next.handle(request).pipe( + catchError((error: HttpErrorResponse) => { + if ( + error.status === HttpStatusCode.Unauthorized && + error?.error?.code === 'LOGIN_ERROR_WRONG_CREDENTIALS' + ) { + this.router.navigate(['/login'], { queryParams: { session: null } }); + } else if (error.status === HttpStatusCode.Unauthorized) { + this.router.navigate(['/login'], { + queryParams: { session: 'expired' }, + }); + } + return throwError(() => error); + }), + ); + } +} diff --git a/src/app/core/interceptors/index.ts b/src/app/core/interceptors/index.ts new file mode 100644 index 0000000..e9d37e6 --- /dev/null +++ b/src/app/core/interceptors/index.ts @@ -0,0 +1 @@ +export * from './http-token.interceptor'; diff --git a/src/app/core/models/download-file.dto.ts b/src/app/core/models/download-file.dto.ts new file mode 100644 index 0000000..fc40b00 --- /dev/null +++ b/src/app/core/models/download-file.dto.ts @@ -0,0 +1,11 @@ +export interface DownloadFileDto { + ext: string; + mimeType: string; + buffer: BufferDto; + fileName?: string; +} + +export interface BufferDto { + type: string; + data: number[]; +} diff --git a/src/app/core/models/error.model.ts b/src/app/core/models/error.model.ts new file mode 100644 index 0000000..afb8467 --- /dev/null +++ b/src/app/core/models/error.model.ts @@ -0,0 +1,3 @@ +export interface Errors { + errors: { [key: string]: string }; +} diff --git a/src/app/core/models/index.ts b/src/app/core/models/index.ts new file mode 100644 index 0000000..721979c --- /dev/null +++ b/src/app/core/models/index.ts @@ -0,0 +1,6 @@ +export * from './download-file.dto'; +export * from './error.model'; +export * from './login-error.dto'; +export * from './table-column.dto'; +export * from './table.dto'; +export * from './token.dto'; diff --git a/src/app/core/models/login-error.dto.ts b/src/app/core/models/login-error.dto.ts new file mode 100644 index 0000000..aa92fd9 --- /dev/null +++ b/src/app/core/models/login-error.dto.ts @@ -0,0 +1,6 @@ +export interface AuthLoginErrorDto { + readonly code: string; + readonly message: string; + readonly severity: 'warn' | 'danger'; + readonly title?: string; +} diff --git a/src/app/core/models/table-column.dto.ts b/src/app/core/models/table-column.dto.ts new file mode 100644 index 0000000..cb5b622 --- /dev/null +++ b/src/app/core/models/table-column.dto.ts @@ -0,0 +1,12 @@ +export type TableColumn = { + header: string; + field: string; + sortField?: string; + hidden?: boolean; + width?: number; + filter?: { + field: string; + type?: string; + display?: string; + }; +}; diff --git a/src/app/core/models/table.dto.ts b/src/app/core/models/table.dto.ts new file mode 100644 index 0000000..f01a518 --- /dev/null +++ b/src/app/core/models/table.dto.ts @@ -0,0 +1,5 @@ +export interface Col { + field: string; + header: string; + exportable: boolean; +} diff --git a/src/app/core/models/token.dto.ts b/src/app/core/models/token.dto.ts new file mode 100644 index 0000000..1ed2b51 --- /dev/null +++ b/src/app/core/models/token.dto.ts @@ -0,0 +1,10 @@ +export interface TokenDto { + id: number; + username: string; + codiceSocio?: string; + codiceFiduciario?: string; + codiceAzienda?: string; + tokenFiduciario?: string; + iat: number; + exp: number; +} diff --git a/src/app/core/pipes/fileSize.pipe.ts b/src/app/core/pipes/fileSize.pipe.ts new file mode 100644 index 0000000..a51e7ba --- /dev/null +++ b/src/app/core/pipes/fileSize.pipe.ts @@ -0,0 +1,15 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ name: 'filesize' }) +export class FileSizePipe implements PipeTransform { + transform(size: number) { + if (size === 0) { + return '0 B'; + } + const k = 1000; + const dm = 2; + const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + const i = Math.floor(Math.log(size) / Math.log(k)); + return parseFloat((size / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; + } +} diff --git a/src/app/core/pipes/fileSizeBinary.pipe.ts b/src/app/core/pipes/fileSizeBinary.pipe.ts new file mode 100644 index 0000000..d8db98d --- /dev/null +++ b/src/app/core/pipes/fileSizeBinary.pipe.ts @@ -0,0 +1,15 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ name: 'filesizebinary' }) +export class FileSizePipeBinary implements PipeTransform { + transform(size: number) { + if (size === 0) { + return '0 B'; + } + const k = 1024; + const dm = 2; + const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + const i = Math.floor(Math.log(size) / Math.log(k)); + return parseFloat((size / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; + } +} diff --git a/src/app/core/pipes/highlight.pipe.ts b/src/app/core/pipes/highlight.pipe.ts new file mode 100644 index 0000000..c365463 --- /dev/null +++ b/src/app/core/pipes/highlight.pipe.ts @@ -0,0 +1,27 @@ +import { Pipe, inject, type PipeTransform } from '@angular/core'; +import { DomSanitizer, type SafeHtml } from '@angular/platform-browser'; + +@Pipe({ + name: 'highlight', + standalone: true, +}) +export class HightlightPipe implements PipeTransform { + private readonly sanitizer = inject(DomSanitizer); + + transform(value: string, args: string | RegExp | null): SafeHtml { + if (!args) { + return value; + } + // Match in a case insensitive maneer + const re = new RegExp(args, 'gi'); + const match = value.match(re); + + // If there's no match, just return the original value. + if (!match) { + return value; + } + + const replacedValue = value.replace(re, '' + match[0] + ''); + return this.sanitizer.bypassSecurityTrustHtml(replacedValue); + } +} diff --git a/src/app/core/pipes/index.ts b/src/app/core/pipes/index.ts new file mode 100644 index 0000000..c6d1a6a --- /dev/null +++ b/src/app/core/pipes/index.ts @@ -0,0 +1,4 @@ +export * from './fileSize.pipe'; +export * from './fileSizeBinary.pipe'; +export * from './highlight.pipe'; +export * from './reactive-form-has-required-validator.pipe'; diff --git a/src/app/core/pipes/reactive-form-has-required-validator.pipe.ts b/src/app/core/pipes/reactive-form-has-required-validator.pipe.ts new file mode 100644 index 0000000..eb70852 --- /dev/null +++ b/src/app/core/pipes/reactive-form-has-required-validator.pipe.ts @@ -0,0 +1,13 @@ +import { Pipe, type PipeTransform } from '@angular/core'; +import { Validators, type AbstractControl } from '@angular/forms'; + +@Pipe({ + name: 'hasRequiredValidator', + standalone: true, +}) +export class ReactiveFormHasRequiredValidatorPipe implements PipeTransform { + transform(value: AbstractControl | null, controlName?: string): boolean { + const control = controlName ? value?.get(controlName) : value; + return !!control?.hasValidator(Validators.required); + } +} diff --git a/src/app/core/services/auth.service.ts b/src/app/core/services/auth.service.ts new file mode 100644 index 0000000..7a3d216 --- /dev/null +++ b/src/app/core/services/auth.service.ts @@ -0,0 +1,110 @@ +import { HttpErrorResponse } from '@angular/common/http'; +import { Injectable, Renderer2, RendererFactory2 } from '@angular/core'; +import { + AccountDto, + AccountResDto, + EditPasswordDto, + LinkVerificationDto, + RecoveryDto, +} from '@api/models'; +import { AuthApiClient } from '@api/services/auth-api-client'; +import { + BehaviorSubject, + catchError, + distinctUntilChanged, + ReplaySubject, + shareReplay, + tap, + throwError, +} from 'rxjs'; +import { JwtService } from './jwt.service'; + +@Injectable({ providedIn: 'root' }) +export class AuthService { + private currentUserSubject = new BehaviorSubject(null); + public currentUser = this.currentUserSubject + .asObservable() + .pipe(distinctUntilChanged(), shareReplay(1)); + + private isAuthenticatedSubject = new ReplaySubject(1); + public isAuthenticated$ = this.isAuthenticatedSubject.asObservable(); + private renderer: Renderer2; + + constructor( + private jwtService: JwtService, + private rendererFactory: RendererFactory2, + private authApiClient: AuthApiClient, + ) { + this.renderer = this.rendererFactory.createRenderer(null, null); + } + + populate() { + const token = this.jwtService.getToken(); + if (!token) { + this.purgeAuth(); + return; + } + return this.authApiClient.authControllerMe({}).pipe( + tap((account) => this.setAuth(account)), + catchError((err: HttpErrorResponse) => { + this.purgeAuth(); + return throwError(() => err); + }), + ); + } + + get userAccountFullName() { + const account = this.getCurrentUser(); + const fullName = account ? `${account.firstName} ${account.lastName}` : ''; + return fullName; + } + + setAuth(user: AccountResDto) { + this.jwtService.saveToken(user.token); + this.currentUserSubject.next(user); + this.isAuthenticatedSubject.next(true); + /* rimuove lo splashscreen all'avvio in index.html */ + // let loader = this.renderer.selectRootElement('#splash-screen'); + // this.renderer.setStyle(loader, 'display', 'none'); + } + + purgeAuth() { + this.jwtService.destroyToken(); + this.currentUserSubject.next(null); + this.isAuthenticatedSubject.next(false); + } + + attemptAuth(credentials: AccountDto) { + return this.authApiClient + .authControllerLogin({ body: credentials }) + .pipe(tap((account) => this.setAuth(account))); + } + + recoverPassword(body: RecoveryDto) { + return this.authApiClient.authControllerRecoveryPassword({ body }).pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + linkVerification(body: LinkVerificationDto) { + return this.authApiClient.authControllerLinkVerification({ body }).pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + setPassword(body: EditPasswordDto) { + return this.authApiClient.authControllerSetPassword({ body }).pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + getCurrentUser(): AccountResDto | null { + return this.currentUserSubject.getValue(); + } +} diff --git a/src/app/core/services/index.ts b/src/app/core/services/index.ts new file mode 100644 index 0000000..7d0165f --- /dev/null +++ b/src/app/core/services/index.ts @@ -0,0 +1,2 @@ +export * from './auth.service'; +export * from './jwt.service'; diff --git a/src/app/core/services/jwt.service.ts b/src/app/core/services/jwt.service.ts new file mode 100644 index 0000000..65b3245 --- /dev/null +++ b/src/app/core/services/jwt.service.ts @@ -0,0 +1,25 @@ +import { Injectable } from '@angular/core'; + +@Injectable({ providedIn: 'root' }) +export class JwtService { + getToken(): String | null { + return window.localStorage.getItem('EpIsToken'); + } + + saveToken(token: string | undefined | null) { + window.localStorage.setItem('EpIsToken', token ?? ''); + } + + saveAccessToken(token: string | undefined | null) { + window.localStorage.setItem('access_token', token ?? ''); + } + + getAccessToken(): string | null { + return window.localStorage.getItem('access_token'); + } + + destroyToken() { + window.localStorage.removeItem('EpIsToken'); + window.localStorage.removeItem('access_token'); + } +} diff --git a/src/app/core/services/utils.service.ts b/src/app/core/services/utils.service.ts new file mode 100644 index 0000000..0fa4fd6 --- /dev/null +++ b/src/app/core/services/utils.service.ts @@ -0,0 +1,100 @@ +import { Injectable } from '@angular/core'; +import { + faFileAlt, + faFileExcel, + faFileImage, + faFilePdf, + faFilePowerpoint, + faFileWord, +} from '@fortawesome/free-solid-svg-icons'; +import { MessageService } from 'primeng/api'; + +@Injectable({ + providedIn: 'root', +}) +export class UtilsService { + constructor(private messageService: MessageService) {} + + /** + * @description get icon and color from filename + * + * @param {*} filename + * @returns + * @memberof UtilsService + */ + getIconByFile(filename: string) { + const ext = filename.split('.').pop() ?? ''; + let faDownload = faFileAlt; + let iconClass = 'text-black'; + switch (ext.toLowerCase()) { + case 'doc': + case 'docx': + case 'docm': + case 'dotx': + case 'dotm': + faDownload = faFileWord; + iconClass = 'iconWord'; + break; + + case 'xsl': + case 'xlsx': + case 'xlsm': + case 'xltx': + case 'xltm': + case 'xlsb': + case 'xlam': + faDownload = faFileExcel; + iconClass = 'iconExcel'; + break; + + case 'ppt': + case 'pptx': + case 'pptm': + case 'potx': + case 'potm': + case 'ppam': + case 'ppsx': + case 'ppsm': + case 'sldx': + case 'sldm': + case 'thmx': + faDownload = faFilePowerpoint; + iconClass = 'iconPowerPoint'; + break; + + case 'art': + case 'bmp': + case 'gif': + case 'ico': + case 'jpeg': + case 'jpg': + case 'psd': + case 'raw': + case 'tiff': + case 'tif': + case 'ai': + case 'svg': + case 'png': + faDownload = faFileImage; + iconClass = 'iconImg'; + break; + + case 'pdf': + faDownload = faFilePdf; + iconClass = 'iconPdf'; + break; + + default: + faDownload = faFileAlt; + break; + } + return { + icon: faDownload, + class: iconClass, + }; + } + + showAlert(severity: string, summary: string, detail: string, life = 5000) { + this.messageService.add({ severity, summary, detail, life }); + } +} diff --git a/src/app/core/validators/iban.validator.ts b/src/app/core/validators/iban.validator.ts new file mode 100644 index 0000000..afc4409 --- /dev/null +++ b/src/app/core/validators/iban.validator.ts @@ -0,0 +1,12 @@ +import { AbstractControl, ValidationErrors } from '@angular/forms'; +import { isValid } from 'iban'; + +export function checkIban() { + return (control: AbstractControl): ValidationErrors | null => { + const iban = control.value; + if (!iban) { + return null; + } + return isValid(iban) ? null : { ibanNotValid: true }; + }; +} diff --git a/src/app/core/validators/password-must-match.validator.ts b/src/app/core/validators/password-must-match.validator.ts new file mode 100644 index 0000000..9eeb38d --- /dev/null +++ b/src/app/core/validators/password-must-match.validator.ts @@ -0,0 +1,23 @@ +import { AbstractControl, FormGroup } from '@angular/forms'; + +export function MustMatch(controlName: string, matchingControlName: string) { + return (formGroup: AbstractControl) => { + const fg = formGroup as FormGroup; + const control = fg.controls[controlName]; + const matchingControl = fg.controls[matchingControlName]; + + if (matchingControl.errors && !matchingControl.errors['mustMatch']) { + // return if another validator has already found an error on the matchingControl + return null; + } + + // set error on matchingControl if validation fails + if (control.value !== matchingControl.value) { + matchingControl.setErrors({ mustMatch: true }); + } else { + matchingControl.setErrors(null); + } + + return null; + }; +} diff --git a/src/app/layout/component/app.footer.ts b/src/app/layout/component/app.footer.ts new file mode 100755 index 0000000..a7ef64e --- /dev/null +++ b/src/app/layout/component/app.footer.ts @@ -0,0 +1,17 @@ +import { Component } from '@angular/core'; + +@Component({ + standalone: true, + selector: 'app-footer', + template: ``, +}) +export class AppFooter {} diff --git a/src/app/layout/component/app.layout.ts b/src/app/layout/component/app.layout.ts new file mode 100755 index 0000000..0d84d6a --- /dev/null +++ b/src/app/layout/component/app.layout.ts @@ -0,0 +1,36 @@ +import { CommonModule } from '@angular/common'; +import { Component } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { StyleClassModule } from 'primeng/styleclass'; +import { AppSidebar } from './app.sidebar'; +import { AppTopbar } from './app.topbar'; + +@Component({ + selector: 'app-layout', + standalone: true, + imports: [ + CommonModule, + AppSidebar, + AppTopbar, + RouterModule, + StyleClassModule, + ], + template: `
+ +
+ +
+
+ +
+
+
+
`, +}) +export class AppLayout { + constructor() {} +} diff --git a/src/app/layout/component/app.menu.ts b/src/app/layout/component/app.menu.ts new file mode 100755 index 0000000..123c444 --- /dev/null +++ b/src/app/layout/component/app.menu.ts @@ -0,0 +1,166 @@ +import { CommonModule } from '@angular/common'; +import { Component } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { BadgeModule } from 'primeng/badge'; +import { OverlayBadgeModule } from 'primeng/overlaybadge'; +import { RippleModule } from 'primeng/ripple'; +import { StyleClassModule } from 'primeng/styleclass'; +import { MyDirectiveModule } from '../../core/directives/my-directive.module'; + +@Component({ + selector: 'app-menu', + standalone: true, + imports: [ + CommonModule, + StyleClassModule, + RouterModule, + MyDirectiveModule, + RippleModule, + BadgeModule, + OverlayBadgeModule, + ], + template: ` + + `, +}) +export class AppMenu { + ngOnInit() {} +} diff --git a/src/app/layout/component/app.sidebar.ts b/src/app/layout/component/app.sidebar.ts new file mode 100755 index 0000000..7b415a0 --- /dev/null +++ b/src/app/layout/component/app.sidebar.ts @@ -0,0 +1,42 @@ +import { Component, ElementRef } from '@angular/core'; +import { StyleClassModule } from 'primeng/styleclass'; +import { AppMenu } from './app.menu'; + +@Component({ + selector: 'app-sidebar', + imports: [StyleClassModule, AppMenu], + template: `
+ +
`, +}) +export class AppSidebar { + constructor(public el: ElementRef) {} +} diff --git a/src/app/layout/component/app.topbar.ts b/src/app/layout/component/app.topbar.ts new file mode 100755 index 0000000..9188345 --- /dev/null +++ b/src/app/layout/component/app.topbar.ts @@ -0,0 +1,145 @@ +import { CommonModule } from '@angular/common'; +import { Component, ElementRef, HostListener } from '@angular/core'; +import { Router, RouterModule } from '@angular/router'; +import { BadgeModule } from 'primeng/badge'; +import { InputTextModule } from 'primeng/inputtext'; +import { OverlayBadgeModule } from 'primeng/overlaybadge'; +import { RippleModule } from 'primeng/ripple'; +import { StyleClassModule } from 'primeng/styleclass'; +import { AuthService } from './../../core/services/auth.service'; + +@Component({ + selector: 'app-topbar', + standalone: true, + imports: [ + RouterModule, + CommonModule, + StyleClassModule, + InputTextModule, + RippleModule, + BadgeModule, + OverlayBadgeModule, + ], + template: ` `, +}) +export class AppTopbar { + fullName; + constructor( + private eRef: ElementRef, + private authService: AuthService, + public router: Router, + ) { + this.fullName = this.authService.userAccountFullName; + } + + @HostListener('document:click', ['$event']) + onClickOutside(event: Event) { + const sidebar = document.getElementById('app-sidebar'); + + if ( + sidebar && + !this.eRef.nativeElement.contains(event.target) && + !sidebar.contains(event.target as Node) + ) { + sidebar.classList.add('hidden'); // Nasconde la sidebar + } + } + + goToProfile() { + this.router.navigate(['/gestisci-profilo']); + } +} diff --git a/src/app/layout/service/layout.service.ts b/src/app/layout/service/layout.service.ts new file mode 100755 index 0000000..111d090 --- /dev/null +++ b/src/app/layout/service/layout.service.ts @@ -0,0 +1,192 @@ +import { Injectable, effect, signal, computed } from '@angular/core'; +import { Subject } from 'rxjs'; + +export interface layoutConfig { + preset?: string; + primary?: string; + surface?: string | undefined | null; + darkTheme?: boolean; + menuMode?: string; +} + +interface LayoutState { + staticMenuDesktopInactive?: boolean; + overlayMenuActive?: boolean; + configSidebarVisible?: boolean; + staticMenuMobileActive?: boolean; + menuHoverActive?: boolean; +} + +interface MenuChangeEvent { + key: string; + routeEvent?: boolean; +} + +@Injectable({ + providedIn: 'root', +}) +export class LayoutService { + _config: layoutConfig = { + preset: 'Aura', + primary: 'emerald', + surface: null, + darkTheme: false, + menuMode: 'static', + }; + + _state: LayoutState = { + staticMenuDesktopInactive: false, + overlayMenuActive: false, + configSidebarVisible: false, + staticMenuMobileActive: false, + menuHoverActive: false, + }; + + layoutConfig = signal(this._config); + + layoutState = signal(this._state); + + private configUpdate = new Subject(); + + private overlayOpen = new Subject(); + + private menuSource = new Subject(); + + private resetSource = new Subject(); + + menuSource$ = this.menuSource.asObservable(); + + resetSource$ = this.resetSource.asObservable(); + + configUpdate$ = this.configUpdate.asObservable(); + + overlayOpen$ = this.overlayOpen.asObservable(); + + theme = computed(() => (this.layoutConfig()?.darkTheme ? 'light' : 'dark')); + + isSidebarActive = computed( + () => + this.layoutState().overlayMenuActive || + this.layoutState().staticMenuMobileActive, + ); + + isDarkTheme = computed(() => this.layoutConfig().darkTheme); + + getPrimary = computed(() => this.layoutConfig().primary); + + getSurface = computed(() => this.layoutConfig().surface); + + isOverlay = computed(() => this.layoutConfig().menuMode === 'overlay'); + + transitionComplete = signal(false); + + private initialized = false; + + constructor() { + effect(() => { + const config = this.layoutConfig(); + if (config) { + this.onConfigUpdate(); + } + }); + + effect(() => { + const config = this.layoutConfig(); + + if (!this.initialized || !config) { + this.initialized = true; + return; + } + + this.handleDarkModeTransition(config); + }); + } + + private handleDarkModeTransition(config: layoutConfig): void { + if ((document as any).startViewTransition) { + this.startViewTransition(config); + } else { + this.toggleDarkMode(config); + this.onTransitionEnd(); + } + } + + private startViewTransition(config: layoutConfig): void { + const transition = (document as any).startViewTransition(() => { + this.toggleDarkMode(config); + }); + + transition.ready + .then(() => { + this.onTransitionEnd(); + }) + .catch(() => {}); + } + + toggleDarkMode(config?: layoutConfig): void { + const _config = config || this.layoutConfig(); + if (_config.darkTheme) { + document.documentElement.classList.add('app-dark'); + } else { + document.documentElement.classList.remove('app-dark'); + } + } + + private onTransitionEnd() { + this.transitionComplete.set(true); + setTimeout(() => { + this.transitionComplete.set(false); + }); + } + + onMenuToggle() { + if (this.isOverlay()) { + this.layoutState.update((prev) => ({ + ...prev, + overlayMenuActive: !this.layoutState().overlayMenuActive, + })); + + if (this.layoutState().overlayMenuActive) { + this.overlayOpen.next(null); + } + } + + if (this.isDesktop()) { + this.layoutState.update((prev) => ({ + ...prev, + staticMenuDesktopInactive: + !this.layoutState().staticMenuDesktopInactive, + })); + } else { + this.layoutState.update((prev) => ({ + ...prev, + staticMenuMobileActive: !this.layoutState().staticMenuMobileActive, + })); + + if (this.layoutState().staticMenuMobileActive) { + this.overlayOpen.next(null); + } + } + } + + isDesktop() { + return window.innerWidth > 991; + } + + isMobile() { + return !this.isDesktop(); + } + + onConfigUpdate() { + this._config = { ...this.layoutConfig() }; + this.configUpdate.next(this.layoutConfig()); + } + + onMenuStateChange(event: MenuChangeEvent) { + this.menuSource.next(event); + } + + reset() { + this.resetSource.next(true); + } +} diff --git a/src/app/modules/accessdenied/accessdenied.component.html b/src/app/modules/accessdenied/accessdenied.component.html new file mode 100644 index 0000000..94a95af --- /dev/null +++ b/src/app/modules/accessdenied/accessdenied.component.html @@ -0,0 +1,42 @@ +
+
+ poseidon-layout +
+ +
+
+ Access Denied + You Don't Have Permissions To Access This Resource + + + poseidon-layout + + PrimeNG Poseidon +
+
+
+ diff --git a/src/app/modules/accessdenied/accessdenied.component.ts b/src/app/modules/accessdenied/accessdenied.component.ts new file mode 100644 index 0000000..0215089 --- /dev/null +++ b/src/app/modules/accessdenied/accessdenied.component.ts @@ -0,0 +1,25 @@ +import { Component } from '@angular/core'; +import { ButtonDirective, ButtonModule } from 'primeng/button'; +import { Ripple, RippleModule } from 'primeng/ripple'; +import { RouterLink } from '@angular/router'; +import { CommonModule } from '@angular/common'; + +@Component({ + templateUrl: './accessdenied.component.html', + styles: [ + ` + :host ::ng-deep .p-button-label { + font-weight: 400; + } + `, + ], + imports: [ + ButtonDirective, + Ripple, + CommonModule, + RouterLink, + ButtonModule, + RippleModule, + ], +}) +export class AccessdeniedComponent {} diff --git a/src/app/modules/login/login.component.html b/src/app/modules/login/login.component.html new file mode 100644 index 0000000..7f14c45 --- /dev/null +++ b/src/app/modules/login/login.component.html @@ -0,0 +1,107 @@ +@let vm = (model$ | async)!; +
+
+
+
+ Image +
+ Bentornato! +
+
+ +
+ + + + + + + + + + + + + + +
+
+
diff --git a/src/app/modules/login/login.component.ts b/src/app/modules/login/login.component.ts new file mode 100644 index 0000000..e0fa0eb --- /dev/null +++ b/src/app/modules/login/login.component.ts @@ -0,0 +1,124 @@ +import { CommonModule } from '@angular/common'; +import { Component, inject } from '@angular/core'; +import { + FormControl, + FormGroup, + FormsModule, + ReactiveFormsModule, + Validators, +} from '@angular/forms'; +import { ActivatedRoute, Router, RouterModule } from '@angular/router'; +import { AuthLoginErrorDto } from '@core/models'; +import { AuthService } from '@core/services/auth.service'; +import { RxState } from '@rx-angular/state'; +import { ToastMessageOptions } from 'primeng/api'; +import { ButtonModule } from 'primeng/button'; +import { CheckboxModule } from 'primeng/checkbox'; +import { InputTextModule } from 'primeng/inputtext'; +import { MessagesModule } from 'primeng/messages'; +import { PasswordModule } from 'primeng/password'; +import { RippleModule } from 'primeng/ripple'; +import { catchError, endWith, map, of, startWith, tap } from 'rxjs'; + +const loginFormGroupFunc = () => ({ + username: new FormControl(null, { + validators: [Validators.required, Validators.email], + }), + password: new FormControl(null, { + validators: [Validators.required], + }), +}); +export type LoginForm = FormGroup>; +export type LoginFormValue = LoginForm['value']; + +export interface loginState { + submitted: boolean; + isLoading: boolean; +} +type State = loginState; + +@Component({ + templateUrl: './login.component.html', + imports: [ + CommonModule, + FormsModule, + ReactiveFormsModule, + ButtonModule, + MessagesModule, + InputTextModule, + CheckboxModule, + RippleModule, + PasswordModule, + RouterModule, + ], + providers: [RxState], +}) +export class LoginComponent { + private state = inject(RxState); + + model$ = this.state.select(); + loginForm = new FormGroup(loginFormGroupFunc()); + messages: ToastMessageOptions[] = []; + + constructor( + private authService: AuthService, + private activatedRoute: ActivatedRoute, + private router: Router, + ) { + this.authService.purgeAuth(); + this.state.set({ + submitted: false, + isLoading: false, + }); + } + + submit() { + this.state.set({ submitted: true, isLoading: false }); + this.messages = []; + + if (this.loginForm.invalid) { + return; + } + + const form = this.loginForm.value; + const params = { + username: form.username!, + password: form.password!, + }; + + const login$ = this.authService.attemptAuth(params).pipe( + catchError((err) => { + if (err.status === 0 || err.status === 500 || err.status === 502) { + this.messages = [ + { + severity: 'error', + summary: 'Attenzione!', + detail: + 'Impossibile effettuare il login in questo momento, riprova più tardi', + }, + ]; + } else { + const error: AuthLoginErrorDto = err.error; + this.messages = [ + { + severity: error.severity, + summary: error?.title, + detail: error.message, + }, + ]; + } + return of(null); + }), + tap((res) => { + if (!res) return; + this.activatedRoute.queryParams.subscribe((params) => { + this.router.navigateByUrl(params['redirect']); + }); + }), + map(() => ({})), + startWith({ isLoading: true }), + endWith({ isLoading: false }), + ); + this.state.connect(login$); + } +} diff --git a/src/app/modules/main/dashboard/dashboard.component.html b/src/app/modules/main/dashboard/dashboard.component.html new file mode 100644 index 0000000..9c5fce9 --- /dev/null +++ b/src/app/modules/main/dashboard/dashboard.component.html @@ -0,0 +1 @@ +

dashboard works!

diff --git a/src/app/modules/main/dashboard/dashboard.component.scss b/src/app/modules/main/dashboard/dashboard.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/modules/main/dashboard/dashboard.component.ts b/src/app/modules/main/dashboard/dashboard.component.ts new file mode 100644 index 0000000..e87fa53 --- /dev/null +++ b/src/app/modules/main/dashboard/dashboard.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-dashboard', + imports: [], + templateUrl: './dashboard.component.html', + styleUrl: './dashboard.component.scss', +}) +export class DashboardComponent {} diff --git a/src/app/modules/main/dashboard/dashboard.routes.ts b/src/app/modules/main/dashboard/dashboard.routes.ts new file mode 100644 index 0000000..27583ac --- /dev/null +++ b/src/app/modules/main/dashboard/dashboard.routes.ts @@ -0,0 +1,16 @@ +import { ExtraOptions, Routes } from '@angular/router'; +import { DashboardComponent } from './dashboard.component'; + +export const routerOptions: ExtraOptions = { + anchorScrolling: 'enabled', + scrollPositionRestoration: 'enabled', + paramsInheritanceStrategy: 'always', +}; + +export const dashboardRoutes: Routes = [ + { + path: '', + component: DashboardComponent, + children: [], + }, +]; diff --git a/src/app/modules/main/gestisci-profilo/gestisci-profilo.component.html b/src/app/modules/main/gestisci-profilo/gestisci-profilo.component.html new file mode 100644 index 0000000..03c78a6 --- /dev/null +++ b/src/app/modules/main/gestisci-profilo/gestisci-profilo.component.html @@ -0,0 +1,300 @@ +@let vm = (model$ | async)!; + +
+
+ Profilo +
+
+
+
+ Modifica anagrafica +
+
+ +
+
+
+ + +
+
+ + +
+
+ +
+
+
+ +
+ +
+
+ Modifica password +
+
+
+
+ + +
+
+ + + + + + +
Scegli una password
+
+ + +
    +
  • + Almeno una lettera minuscola +
  • +
  • + Almeno una lettera maiuscola o un numero +
  • +
  • + Minimo 8 caratteri +
  • +
+
+
+ La password deve essere di almeno 8 caratteri, deve contenere almeno + una lettera minuscola, una maiuscola e un numero +
+
+ + + Le due password inserite non corrispondono +
+
+ +
+
+ +
+
+
diff --git a/src/app/modules/main/gestisci-profilo/gestisci-profilo.component.scss b/src/app/modules/main/gestisci-profilo/gestisci-profilo.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/modules/main/gestisci-profilo/gestisci-profilo.component.ts b/src/app/modules/main/gestisci-profilo/gestisci-profilo.component.ts new file mode 100644 index 0000000..10298ab --- /dev/null +++ b/src/app/modules/main/gestisci-profilo/gestisci-profilo.component.ts @@ -0,0 +1,270 @@ +/* eslint-disable @typescript-eslint/no-unsafe-argument */ +import { CommonModule } from '@angular/common'; +import { Component } from '@angular/core'; +import { + FormControl, + FormGroup, + FormsModule, + ReactiveFormsModule, + Validators, +} from '@angular/forms'; +import { RouterOutlet } from '@angular/router'; +import { RxState } from '@rx-angular/state'; +import { ConfirmationService, ToastMessageOptions } from 'primeng/api'; +import { ButtonModule } from 'primeng/button'; +import { ConfirmDialogModule } from 'primeng/confirmdialog'; +import { ConfirmPopupModule } from 'primeng/confirmpopup'; +import { DividerModule } from 'primeng/divider'; +import { DialogService } from 'primeng/dynamicdialog'; +import { IconFieldModule } from 'primeng/iconfield'; +import { InputIconModule } from 'primeng/inputicon'; +import { InputTextModule } from 'primeng/inputtext'; +import { MessagesModule } from 'primeng/messages'; +import { MultiSelectModule } from 'primeng/multiselect'; +import { PasswordModule } from 'primeng/password'; +import { SkeletonModule } from 'primeng/skeleton'; +import { TableLazyLoadEvent, TableModule } from 'primeng/table'; +import { TagModule } from 'primeng/tag'; +import { ToastModule } from 'primeng/toast'; +import { TooltipModule } from 'primeng/tooltip'; +import { catchError, endWith, map, Observable, of, startWith, tap } from 'rxjs'; +import { + AccountResDto, + EditAnagraficaPersonaleDto, + EditPasswordPersonaleDto, + FindPrivilegeResDto, + FindProfileResDto, +} from '../../../../api/models'; +import { AuthService } from '../../../core/services/auth.service'; +import { MustMatch } from '../../../core/validators/password-must-match.validator'; +import { RecoveryPasswordService } from '../../recovery-password/recovery-password.service'; +import { RuoliService } from './gestisci-profilo.service'; + +const changePasswordFormGroupFunc = () => ({ + oldPassword: new FormControl('', { + validators: [Validators.required], + }), + newPassword: new FormControl('', { + nonNullable: true, + validators: [ + Validators.required, + Validators.minLength(8), + Validators.pattern(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*\W).{8,}$/), + ], + }), + confirmPassword: new FormControl('', { + nonNullable: true, + validators: [Validators.required], + }), +}); + +const changeAnagraficaFormGroupFunc = (profile?: any) => { + return new FormGroup({ + nome: new FormControl(profile?.nome ?? null, { + validators: [Validators.required], + }), + cognome: new FormControl(profile?.nome ?? null, { + validators: [Validators.required], + }), + }); +}; + +export type changePasswordForm = FormGroup< + ReturnType +>; +export type changePasswordFormValue = changePasswordForm['value']; + +export type changeAnagraficaForm = ReturnType< + typeof changeAnagraficaFormGroupFunc +>; +export type changeAnagraficaFormValue = changeAnagraficaForm['value']; + +export interface ManageProfileComponentState { + profiles: FindProfileResDto[]; + profilesAreLoading: boolean; + profilesTotalCount: number; + currentFilter?: TableLazyLoadEvent; + selectedProfile: FindProfileResDto | undefined; + privileges: FindPrivilegeResDto[]; + profileIsLoading: boolean; + cdIsLoading: boolean; + privilegesAreLoading: boolean; + nome: string | null | undefined; + cognome: string | null | undefined; + changePasswordFormSubmitted: boolean; + changeAnagraficaFormSubmitted: boolean; + isSaving: boolean; +} +type State = ManageProfileComponentState; + +@Component({ + selector: 'app-utenti', + imports: [ + CommonModule, + TableModule, + InputTextModule, + SkeletonModule, + ButtonModule, + TooltipModule, + FormsModule, + ReactiveFormsModule, + MultiSelectModule, + ConfirmDialogModule, + IconFieldModule, + InputIconModule, + MessagesModule, + TagModule, + ConfirmPopupModule, + ToastModule, + RouterOutlet, + PasswordModule, + DividerModule, + ], + providers: [RxState, DialogService, ConfirmationService], + templateUrl: './gestisci-profilo.component.html', + styleUrl: './gestisci-profilo.component.scss', +}) +export class GestisciProfiloComponent { + fullName: AccountResDto | null; + //private state = inject(RxState); + + //model$ = this.state.select(); + showTransitionOptions = '500ms'; + + changeAnagraficaForm = changeAnagraficaFormGroupFunc(undefined); + + changePasswordForm = new FormGroup(changePasswordFormGroupFunc(), { + validators: MustMatch('newPassword', 'confirmPassword'), + }); + + model$: Observable; + + messages: ToastMessageOptions[] = []; + + constructor( + private ruoliService: RuoliService, + private readonly dialogService: DialogService, + private confirmationService: ConfirmationService, + private authService: AuthService, + public recoveryService: RecoveryPasswordService, + + private state: RxState, + ) { + this.fullName = this.authService.getCurrentUser(); + + this.state.set({ + nome: this.fullName?.firstName, + cognome: this.fullName?.lastName, + }); + + this.model$ = this.state.select(); + this.state.set({ + profiles: [], + profilesAreLoading: false, + profilesTotalCount: 0, + selectedProfile: undefined, + profileIsLoading: false, + cdIsLoading: false, + privilegesAreLoading: false, + changePasswordFormSubmitted: false, + isSaving: false, + changeAnagraficaFormSubmitted: false, + }); + + this.changeAnagraficaForm.patchValue({ + nome: this.state.get('nome'), + cognome: this.state.get('cognome'), + }); + } + + submitCambiaPassword() { + this.state.set({ + changePasswordFormSubmitted: true, + }); + if (this.changePasswordForm.invalid) return; + const _changePasswordForm = this.changePasswordForm.getRawValue(); + const params: EditPasswordPersonaleDto = { + oldPassword: _changePasswordForm.oldPassword!, + password: _changePasswordForm.newPassword, + }; + const saveEditPassword$ = this.ruoliService.editPassword(params).pipe( + catchError((err) => { + this.messages = [ + { + severity: 'error', + summary: 'Errore', + life: 5000, + detail: + err.error.statusCode === 400 + ? err.error.message + : 'Modifica password non riuscita', + }, + ]; + return of(null); + }), + + tap((res) => { + if (!res) return; + this.messages = [ + { + severity: 'success', + summary: 'Operazione completata', + life: 5000, + detail: 'Password modificata con successo', + }, + ]; + this.state.set(() => ({ + changePasswordFormSubmitted: false, + })); + }), + map(() => ({})), + startWith({ isSaving: true }), + endWith({ isSaving: false }), + ); + this.state.connect(saveEditPassword$); + } + + submitCambiaAnagrafica() { + this.state.set({ + changeAnagraficaFormSubmitted: true, + }); + if (this.changeAnagraficaForm.invalid) return; + const _changeAnagraficaForm = this.changeAnagraficaForm.getRawValue(); + const params: EditAnagraficaPersonaleDto = { + nome: _changeAnagraficaForm.nome!, + cognome: _changeAnagraficaForm.cognome!, + }; + const saveEditAnagrafica$ = this.ruoliService.editAnagrafica(params).pipe( + catchError((err) => { + this.messages = [ + { + severity: 'error', + summary: 'Errore', + life: 5000, + detail: 'Modifica anagrafica non riuscita', + }, + ]; + return of(null); + }), + tap((res) => { + if (!res) return; + this.messages = [ + { + severity: 'success', + summary: 'Operazione completata', + life: 5000, + detail: 'Anagrafica modificata con successo', + }, + ]; + this.authService.getCurrentUser(); + this.state.set(() => ({ + changeAnagraficaFormSubmitted: false, + })); + }), + map(() => ({})), + startWith({ isSaving: true }), + endWith({ isSaving: false }), + ); + this.state.connect(saveEditAnagrafica$); + } +} diff --git a/src/app/modules/main/gestisci-profilo/gestisci-profilo.routes.ts b/src/app/modules/main/gestisci-profilo/gestisci-profilo.routes.ts new file mode 100644 index 0000000..63d09af --- /dev/null +++ b/src/app/modules/main/gestisci-profilo/gestisci-profilo.routes.ts @@ -0,0 +1,17 @@ +import { ExtraOptions, Routes } from '@angular/router'; +import { GestisciProfiloComponent } from './gestisci-profilo.component'; + +export const routerOptions: ExtraOptions = { + anchorScrolling: 'enabled', + scrollPositionRestoration: 'enabled', + paramsInheritanceStrategy: 'always', +}; + +export const gestisciProfiloRoutes: Routes = [ + { + path: '', + component: GestisciProfiloComponent, + children: [], + // data: { expectedPrivileges: [] }, + }, +]; diff --git a/src/app/modules/main/gestisci-profilo/gestisci-profilo.service.ts b/src/app/modules/main/gestisci-profilo/gestisci-profilo.service.ts new file mode 100644 index 0000000..c4e8c67 --- /dev/null +++ b/src/app/modules/main/gestisci-profilo/gestisci-profilo.service.ts @@ -0,0 +1,141 @@ +import { HttpErrorResponse } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { + EditAnagraficaPersonaleDto, + EditPasswordPersonaleDto, + FindActionResDto, +} from '@api/models'; +import { AccountsApiClient, RolesApiClient } from '@api/services'; +import { catchError, throwError } from 'rxjs'; + +export type PASSWORD_MATCH_TYPE = 'MIN_8' | 'a-z' | 'A-Z'; + +@Injectable({ + providedIn: 'root', +}) +export class RuoliService { + constructor( + private rolesApiClient: RolesApiClient, + private accountsApiClient: AccountsApiClient, + ) {} + + getRoles() { + const params = { + body: {}, + }; + return this.rolesApiClient.rolesControllerFetchRoles(params).pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + getAvailablePrivileges(id: number) { + const params = { + id: id, + }; + return this.rolesApiClient + .rolesControllerGetAvailableRolePrivileges(params) + .pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + setPrivilegesForRole(roleId: number, privilegesIds: FindActionResDto[]) { + const params = { + id: roleId, + body: { + actionIds: privilegesIds.map((x) => x.id), + }, + }; + return this.rolesApiClient.rolesControllerSetRolePrivileges(params).pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + getPrivilegesById(idRuolo: number) { + const params = { + id: idRuolo, + }; + return this.rolesApiClient.rolesControllerGetRolePrivileges(params).pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + changePrivilegeFlagEnabled(privilegeId: number, value: boolean) { + const params = { + id: privilegeId, + body: { + flagEnabled: value, + }, + }; + return this.rolesApiClient + .rolesControllerSetPrivilegeFlagEnabled(params) + .pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + editPassword(body: EditPasswordPersonaleDto) { + const params = { + body: body, + }; + return this.accountsApiClient + .accountsControllerEditPasswordPersonale(params) + .pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + editAnagrafica(body: EditAnagraficaPersonaleDto) { + const params = { + body: body, + }; + return this.accountsApiClient + .accountsControllerEditAnagraficaPersonale(params) + .pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + changePrivilegeReadOnlyFlag(privilegeId: number, value: boolean) { + const params = { + id: privilegeId, + body: { + flagReadOnly: value, + }, + }; + return this.rolesApiClient + .rolesControllerSetPrivilegeFlagReadonly(params) + .pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + deletePrivilege(privilegeId: number) { + const param = { + id: privilegeId, + }; + return this.rolesApiClient + .rolesControllerDeleteRolePrivilege$Response(param) + .pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } +} diff --git a/src/app/modules/main/main.routes.ts b/src/app/modules/main/main.routes.ts new file mode 100644 index 0000000..1d2c6cb --- /dev/null +++ b/src/app/modules/main/main.routes.ts @@ -0,0 +1,76 @@ +import { ExtraOptions, Routes } from '@angular/router'; +import { RedirectGuard } from '@core/guards'; +import { AppLayout } from '../../layout/component/app.layout'; + +export const routerOptions: ExtraOptions = { + anchorScrolling: 'enabled', + scrollPositionRestoration: 'enabled', + paramsInheritanceStrategy: 'always', +}; + +export const mainRoutes: Routes = [ + { + path: '', + component: AppLayout, + canActivate: [RedirectGuard], + children: [], + }, + // { + // path: 'dashboard', + // component: AppLayout, + // loadChildren: () => + // import('./dashboard/dashboard.routes').then((r) => r.dashboardRoutes), + // }, + // { + // path: 'cruscotti', + // component: AppLayout, + // loadChildren: () => + // import('./cruscotti/cruscotti.routes').then((r) => r.cruscottiRoutes), + // }, + // { + // path: 'report', + // component: AppLayout, + // loadChildren: () => + // import('./report/report.routes').then((r) => r.reportRoutes), + // }, + { + path: 'utenti', + component: AppLayout, + loadChildren: () => + import('./utenti/utenti.routes').then((r) => r.utentiRoutes), + }, + { + path: 'ruoli', + component: AppLayout, + loadChildren: () => + import('./ruoli/ruoli.routes').then((r) => r.ruoliRoutes), + }, + // { + // path: 'nomenclatore', + // component: AppLayout, + // loadChildren: () => + // import('./nomenclatore/nomenclatore.routes').then( + // (r) => r.nomenclatoreRoutes, + // ), + // }, + { + path: 'gestisci-profilo', + component: AppLayout, + loadChildren: () => + import('./gestisci-profilo/gestisci-profilo.routes').then( + (r) => r.gestisciProfiloRoutes, + ), + }, + + { + path: 'strutture', + component: AppLayout, + loadChildren: () => + import('./strutture/strutture.routes').then((r) => r.struttureRoutes), + }, + // { + // path: 'jobs', + // component: AppLayout, + // loadChildren: () => import('./jobs/jobs.routes').then((r) => r.jobsRoutes), + // }, +]; diff --git a/src/app/modules/main/nomenclatore/nomenclatore-dialog/nomenclatore-dialog.component.html b/src/app/modules/main/nomenclatore/nomenclatore-dialog/nomenclatore-dialog.component.html new file mode 100644 index 0000000..577656c --- /dev/null +++ b/src/app/modules/main/nomenclatore/nomenclatore-dialog/nomenclatore-dialog.component.html @@ -0,0 +1,1046 @@ + + + + {{ + (data()?.nomenclatore ? 'Modifica' : 'Aggiungi') + ' ' + data()?.mode + }} + + +
+
+
+ +
+ +
+ +
+
+ + + + + + + + Inserisci il codice + +
+ + @if (nomenclatoreForm.controls.descrizione.enabled) { +
+ + + + +
+ Inserisci la descrizione +
+ +
+
+
+
+ } + + @if (nomenclatoreForm.controls.descrizioneRimborso.enabled) { +
+ + + + +
+ + Inserisci la descrizione rimborso +
+
+
+ } +
+
+
+ +
+ +
+
+ @if (nomenclatoreForm.controls.idUnitaDiMisura.enabled) { +
+
+ + + + + + + + + + + + Inserisci l'unità di misura + +
+
+ } + + @if (nomenclatoreForm.controls.idTipoPrestazione.enabled) { +
+
+ + + + + + + + + + + + Inserisci il tipo prestazione + +
+
+ } + + @if (nomenclatoreForm.controls.idElemento.enabled) { +
+
+ + + + + + + + + + + + Inserisci l'elemento + +
+
+ } +
+
+ @if ( + nomenclatoreForm.controls.flagNecessitaDocumentazione.enabled || + nomenclatoreForm.controls.flagAccorpaLivello.enabled || + nomenclatoreForm.controls.flagSelezionabileDaUtenti.enabled + ) { + @if ( + nomenclatoreForm.controls.flagNecessitaDocumentazione.enabled + ) { +
+ + +
+ } + @if (nomenclatoreForm.controls.flagAccorpaLivello.enabled) { +
+ + +
+ } + @if ( + nomenclatoreForm.controls.flagSelezionabileDaUtenti.enabled + ) { +
+ + +
+ } + } +
+
+
+ @if ( + nomenclatoreForm.controls.dataInizioValidita.enabled || + nomenclatoreForm.controls.dataFineValidita.enabled + ) { + +
+
+ + + + + + Inserisci la data inizio validità + +
+
+ + + + + + Inserisci la data fine validità + +
+
+
+ } +
+
+ +
+ +
+
+
+ + + + + + + + + + + + + Inserisci il livello 1 + +
+
+ +
+
+ + + + + + + + + + + + + Inserisci il livello 2 + +
+
+ +
+
+ + + + + + + + + + + + + Inserisci il livello 3 + +
+
+ +
+
+ + + + + + + + + + + + + Inserisci il livello 4 + +
+
+
+
+
+ + @if ( + nomenclatoreForm.controls.chiaviRicerca.enabled || + nomenclatoreForm.controls.note.enabled + ) { +
+ @if (nomenclatoreForm.controls.chiaviRicerca.enabled) { + +
+ + + + + + + + +
+ + Inserisci le chiavi di ricerca +
+
+
+
+ } + @if (nomenclatoreForm.controls.note.enabled) { + +
+ + + + +
+ + Inserisci le note +
+
+
+
+ } +
+ } + +
+
+ + +
+
+
+
+ + + + + + + + + + diff --git a/src/app/modules/main/nomenclatore/nomenclatore-dialog/nomenclatore-dialog.component.scss b/src/app/modules/main/nomenclatore/nomenclatore-dialog/nomenclatore-dialog.component.scss new file mode 100644 index 0000000..f25d674 --- /dev/null +++ b/src/app/modules/main/nomenclatore/nomenclatore-dialog/nomenclatore-dialog.component.scss @@ -0,0 +1,18 @@ +:host ::ng-deep .p-fieldset { + padding: 0; + border-radius: 0; + border-left-width: 0; + border-right-width: 0; + border-bottom-width: 0; +} +:host ::ng-deep .p-fieldset .p-fieldset-legend { + padding: 0.5rem 1rem; + margin-left: 1rem; + margin-bottom: 0.75rem; +} +:host ::ng-deep .p-fieldset.p-fieldset-toggleable .p-fieldset-legend a { + padding: 0; +} +:host ::ng-deep .p-fieldset .p-fieldset-content { + padding: 0; +} diff --git a/src/app/modules/main/nomenclatore/nomenclatore-dialog/nomenclatore-dialog.component.ts b/src/app/modules/main/nomenclatore/nomenclatore-dialog/nomenclatore-dialog.component.ts new file mode 100644 index 0000000..13e897c --- /dev/null +++ b/src/app/modules/main/nomenclatore/nomenclatore-dialog/nomenclatore-dialog.component.ts @@ -0,0 +1,718 @@ +import { CommonModule } from '@angular/common'; +import { + Component, + Input, + computed, + effect, + inject, + signal, +} from '@angular/core'; +import { + FormControl, + FormGroup, + FormsModule, + ReactiveFormsModule, + Validators, + type AbstractControl, +} from '@angular/forms'; +// import { +// type CreateNomenclatore, +// type CreateNomenclatoreLivello1, +// type CreateNomenclatoreLivello2, +// type CreateNomenclatoreLivello3, +// type CreateNomenclatoreLivello4, +// type UpdateNomenclatore, +// type UpdateNomenclatoreLivello1, +// type UpdateNomenclatoreLivello2, +// type UpdateNomenclatoreLivello3, +// type UpdateNomenclatoreLivello4, +// } from '@api/models.js'; +// import { DateMaskDirective } from '@core/directives'; +import { ReactiveFormHasRequiredValidatorPipe } from '@core/pipes'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { RxLet } from '@rx-angular/template/let'; +import { get, isEmpty } from 'lodash'; +import { ButtonModule } from 'primeng/button'; +import { CalendarModule } from 'primeng/calendar'; +import { CheckboxModule } from 'primeng/checkbox'; +import { ChipModule } from 'primeng/chip'; +import { DatePickerModule } from 'primeng/datepicker'; +import { DialogModule } from 'primeng/dialog'; +import { DropdownModule } from 'primeng/dropdown'; +import { FieldsetModule } from 'primeng/fieldset'; +import { InputGroupModule } from 'primeng/inputgroup'; +import { InputGroupAddonModule } from 'primeng/inputgroupaddon'; +import { InputTextModule } from 'primeng/inputtext'; +import { ProgressBarModule } from 'primeng/progressbar'; +import { SkeletonModule } from 'primeng/skeleton'; +import { SplitButtonModule } from 'primeng/splitbutton'; +import { TextareaModule } from 'primeng/textarea'; +import { TreeModule } from 'primeng/tree'; +import { TreeTableModule } from 'primeng/treetable'; +import { + BehaviorSubject, + EMPTY, + catchError, + distinctUntilChanged, + filter, + map, + of, + raceWith, + shareReplay, + switchMap, + tap, + withLatestFrom, +} from 'rxjs'; +// import type { NomenclatoreNodeType } from './nomenclatore.service.js'; +import { + CreateNomenclatore, + CreateNomenclatoreLivello1, + CreateNomenclatoreLivello2, + CreateNomenclatoreLivello3, + CreateNomenclatoreLivello4, + UpdateNomenclatore, + UpdateNomenclatoreLivello1, + UpdateNomenclatoreLivello2, + UpdateNomenclatoreLivello3, + UpdateNomenclatoreLivello4, +} from '@api/models'; +import { isDefined } from '@core/common/operators/is-defined.js'; +import dayjs from 'dayjs'; +import { + AutoCompleteCompleteEvent, + AutoCompleteModule, +} from 'primeng/autocomplete'; +import { SelectModule } from 'primeng/select'; +import { + Nomenclatore, + NomenclatoreLiv1, + NomenclatoreLiv2, + NomenclatoreLiv3, + NomenclatoreLiv4, + NomenclatoreNodeType, + NomenclatoreService, +} from '../nomenclatore.service'; + +const nomenclatoreFormRequirements = { + descrizione: { + maxlength: 512, + }, + descrizioneRimborso: { + maxlength: 255, + }, + note: { + maxlength: 255, + }, + rawChiaviRicerca: { + separator: '; ', + maxlength: 255, + }, +} as const; + +const nomenclatoreFormGroupFunc = ( + mode: NomenclatoreDialogType | undefined, + entry?: NomenclatoreDialogEntry, +) => { + const rawDataInizioValidita = get(entry, 'dataInizioValidita'); + const rawDataFineValidita = get(entry, 'dataFineValidita'); + const rawChiaviRicerca = get(entry, 'chiaviRicerca') as string | undefined; + + return { + id: new FormControl(entry?.id ?? null), + codice: new FormControl(entry?.codice ?? null, { + validators: [Validators.required], + }), + descrizione: new FormControl(entry?.descrizione ?? null, { + validators: [ + Validators.required, + Validators.maxLength( + nomenclatoreFormRequirements.descrizione.maxlength, + ), + ], + }), + nomenclatoreLiv1: new FormControl(get(entry, 'idLivello1') ?? 0, { + validators: [Validators.required], + }), + nomenclatoreLiv2: new FormControl(get(entry, 'idLivello2') ?? 0, { + validators: [Validators.required], + }), + nomenclatoreLiv3: new FormControl(get(entry, 'idLivello3') ?? 0, { + validators: [Validators.required], + }), + nomenclatoreLiv4: new FormControl(get(entry, 'idLivello4') ?? 0, { + validators: [Validators.required], + }), + chiaviRicerca: new FormControl( + rawChiaviRicerca && !isEmpty(rawChiaviRicerca) + ? rawChiaviRicerca.split( + nomenclatoreFormRequirements.rawChiaviRicerca.separator, + ) + : [], + ), + rawChiaviRicerca: new FormControl(rawChiaviRicerca ?? null, { + validators: [ + Validators.maxLength( + nomenclatoreFormRequirements.rawChiaviRicerca.maxlength, + ), + ], + }), + codiceFasi: new FormControl( + get(entry, 'codiceFasi') ?? null, + ), + dataInizioValidita: new FormControl( + rawDataInizioValidita ? new Date(rawDataInizioValidita) : new Date(), + { + validators: [Validators.required], + }, + ), + dataFineValidita: new FormControl( + rawDataFineValidita ? new Date(rawDataFineValidita) : new Date(), + { + validators: [Validators.required], + }, + ), + descrizioneRimborso: new FormControl( + get(entry, 'descrizioneRimborso') ?? null, + { + validators: [ + Validators.maxLength( + nomenclatoreFormRequirements.descrizioneRimborso.maxlength, + ), + ], + }, + ), + flagAccorpaLivello: new FormControl( + get(entry, 'flagAccorpaLivello') ?? null, + ), + flagNecessitaDocumentazione: new FormControl( + get(entry, 'flagNecessitaDocumentazione') ?? null, + ), + flagSelezionabileDaUtenti: new FormControl( + get(entry, 'flagSelezionabileDaUtenti') ?? null, + ), + idElemento: new FormControl(get(entry, 'idElemento') ?? 0, { + validators: [Validators.required], + }), + idTipoPrestazione: new FormControl( + get(entry, 'idTipoPrestazione') ?? 0, + { + validators: [Validators.required], + }, + ), + idUnitaDiMisura: new FormControl( + get(entry, 'idUnitaDiMisura') ?? 0, + { + validators: [Validators.required], + }, + ), + note: new FormControl(get(entry, 'note') ?? null, { + validators: [ + Validators.maxLength(nomenclatoreFormRequirements.note.maxlength), + ], + }), + }; +}; +export type NomenclatoreEntryForm = FormGroup< + ReturnType +>; +export type NomenclatoreEntryFormValue = NomenclatoreEntryForm['value']; + +export type NomenclatoreDialogEntry = Nomenclatore & + NomenclatoreLiv1 & + NomenclatoreLiv2 & + NomenclatoreLiv3 & + NomenclatoreLiv4; +export type NomenclatoreDialogType = NomenclatoreNodeType; + +@Component({ + selector: 'app-codice-descrizione-item', + template: ` @if (item) { + {{ item.codice }} - + {{ item.descrizione }} + } @else { + {{ emptyMessage }} + }`, + standalone: true, +}) +export class CodiceDescrizioneItemComponent { + @Input({ required: true }) item?: { + codice: number | string; + descrizione: string; + }; + @Input() emptyMessage = 'Non impostato'; +} + +@Component({ + selector: 'app-maxlength-counter', + template: ` + @if (control && control.enabled && (control.value?.length ?? 0) >= 0) { + {{ control.value?.length ?? 0 }}{{ '/' + maxLength + ' caratteri' }} + } + `, + imports: [CommonModule], + standalone: true, +}) +export class MaxLengthCounterComponent { + @Input({ required: true }) control?: FormControl; + @Input({ required: true }) maxLength = 0; +} +@UntilDestroy() +@Component({ + selector: 'app-nomenclatore-dialog', + standalone: true, + imports: [ + RxLet, + CommonModule, + FormsModule, + ButtonModule, + SplitButtonModule, + InputGroupModule, + InputGroupAddonModule, + InputTextModule, + CheckboxModule, + TextareaModule, + ChipModule, + CalendarModule, + TreeModule, + TreeTableModule, + ProgressBarModule, + FieldsetModule, + ReactiveFormHasRequiredValidatorPipe, + CodiceDescrizioneItemComponent, + MaxLengthCounterComponent, + DialogModule, + DropdownModule, + ReactiveFormsModule, + SkeletonModule, + DatePickerModule, + SelectModule, + AutoCompleteModule, + ], + templateUrl: `./nomenclatore-dialog.component.html`, + styleUrl: `./nomenclatore-dialog.component.scss`, +}) +export class NomenclatoreDialogComponent { + nomenclatoreService = inject(NomenclatoreService); + + items: any[] = []; + + @Input({ required: true }) isOpen = signal(false); + @Input({ required: true }) data = signal< + | { + mode: NomenclatoreDialogType; + nomenclatore: NomenclatoreDialogEntry | null; + } + | undefined + >(undefined); + + isLoading = signal(false); + isSaving = signal(false); + isBusy = computed(() => this.isLoading() || this.isSaving()); + + submitted = signal(false); + nomenclatoreForm = new FormGroup( + nomenclatoreFormGroupFunc(this.data()?.mode), + ); + nomenclatoreFormRequirements = nomenclatoreFormRequirements; + + selectableDateRange = { + min: new Date('1900-01-01'), + max: new Date('9998-12-31'), + }; + + _data$ = new BehaviorSubject< + | { + mode: NomenclatoreDialogType; + nomenclatore: NomenclatoreDialogEntry | null; + } + | undefined + >(undefined); + + data$ = this._data$.asObservable().pipe( + untilDestroyed(this), + distinctUntilChanged(), + tap((data) => { + this.isLoading.set(true); + const mode = data?.mode; + const nomenclatore = data?.nomenclatore; + this.nomenclatoreForm.reset( + new FormGroup( + nomenclatoreFormGroupFunc(mode, nomenclatore ?? undefined), + ).value, + ); + this.isLoading.set(false); + }), + shareReplay(1), + ); + + nomenclatore$ = this.data$.pipe( + filter(isDefined), + switchMap((data) => of(data.nomenclatore)), + shareReplay(1), + ); + + nomenclatoreLiv1$ = this.nomenclatore$.pipe( + untilDestroyed(this), + withLatestFrom(this.nomenclatoreService.nomenclatoreLivello1$), + map(([nomenclatore, nomenclatoreLiv1]) => { + return nomenclatoreLiv1.filter((item) => item.id !== nomenclatore?.id); + }), + shareReplay(1), + ); + + nomenclatoreLiv2$ = this.nomenclatore$.pipe( + raceWith( + this.nomenclatoreForm.controls.nomenclatoreLiv1.valueChanges.pipe( + filter(isDefined), + distinctUntilChanged(), + ), + ), + untilDestroyed(this), + withLatestFrom(this.nomenclatoreService.nomenclatoreLivello2$), + switchMap(([liv1IdOrNomenclatore, nomenclatoreLiv2]) => { + const isValueChange = typeof liv1IdOrNomenclatore === 'number'; + const liv1Id = isValueChange + ? liv1IdOrNomenclatore + : liv1IdOrNomenclatore?.idLivello1; + return of( + nomenclatoreLiv2.filter( + (item) => + (item.idLivello1 === liv1Id || item.id === 0) && + item.id !== this.data()?.nomenclatore?.id, + ), + ).pipe( + tap(() => { + if (isValueChange) + this.clearField(this.nomenclatoreForm.controls.nomenclatoreLiv2); + }), + ); + }), + shareReplay(1), + ); + + search(event: AutoCompleteCompleteEvent) { + this.items = [...Array(1).keys()].map((item) => event.query); + } + + nomenclatoreLiv3$ = this.nomenclatore$.pipe( + raceWith( + this.nomenclatoreForm.controls.nomenclatoreLiv2.valueChanges.pipe( + filter(isDefined), + distinctUntilChanged(), + ), + ), + untilDestroyed(this), + withLatestFrom(this.nomenclatoreService.nomenclatoreLivello3$), + switchMap(([liv2IdOrNomenclatore, nomenclatoreLiv3]) => { + const isValueChange = typeof liv2IdOrNomenclatore === 'number'; + const liv2Id = isValueChange + ? liv2IdOrNomenclatore + : liv2IdOrNomenclatore?.idLivello2; + return of( + nomenclatoreLiv3.filter( + (item) => + (item.idLivello2 === liv2Id || item.id === 0) && + item.id !== this.data()?.nomenclatore?.id, + ), + ).pipe( + tap(() => { + if (isValueChange) + this.clearField(this.nomenclatoreForm.controls.nomenclatoreLiv3); + }), + ); + }), + shareReplay(1), + ); + + nomenclatoreLiv4$ = this.nomenclatore$.pipe( + raceWith( + this.nomenclatoreForm.controls.nomenclatoreLiv3.valueChanges.pipe( + filter(isDefined), + distinctUntilChanged(), + ), + ), + untilDestroyed(this), + withLatestFrom(this.nomenclatoreService.nomenclatoreLivello4$), + switchMap(([liv3IdOrNomenclatore, nomenclatoreLiv4]) => { + const isValueChange = typeof liv3IdOrNomenclatore === 'number'; + const liv3Id = isValueChange + ? liv3IdOrNomenclatore + : liv3IdOrNomenclatore?.idLivello2; + return of( + nomenclatoreLiv4.filter( + (item) => + (item.idLivello3 === liv3Id || item.id === 0) && + item.id !== this.data()?.nomenclatore?.id, + ), + ).pipe( + tap(() => { + if (isValueChange) + this.clearField(this.nomenclatoreForm.controls.nomenclatoreLiv4); + }), + ); + }), + shareReplay(1), + ); + + categoriePrestazione$ = this.nomenclatoreService.categoriePrestazione$; + elementi$ = this.nomenclatoreService.elementi$; + tipiPrestazione$ = this.nomenclatoreService.tipiPrestazione$; + unitaDiMisura$ = this.nomenclatoreService.unitaDiMisura$; + + constructor() { + effect( + () => { + const data = this.data(); + this._data$.next(data); + + const mode = data?.mode; + const nomenclatore = data?.nomenclatore; + + this.nomenclatoreForm.controls.codice.disable(); + this.nomenclatoreForm.controls.descrizioneRimborso.disable(); + this.nomenclatoreForm.controls.idElemento.disable(); + this.nomenclatoreForm.controls.dataInizioValidita.disable(); + this.nomenclatoreForm.controls.dataFineValidita.disable(); + this.nomenclatoreForm.controls.note.disable(); + this.nomenclatoreForm.controls.chiaviRicerca.disable(); + this.nomenclatoreForm.controls.flagAccorpaLivello.disable(); + this.nomenclatoreForm.controls.flagNecessitaDocumentazione.disable(); + this.nomenclatoreForm.controls.flagSelezionabileDaUtenti.disable(); + this.nomenclatoreForm.controls.nomenclatoreLiv1.disable(); + this.nomenclatoreForm.controls.nomenclatoreLiv2.disable(); + this.nomenclatoreForm.controls.nomenclatoreLiv3.disable(); + this.nomenclatoreForm.controls.nomenclatoreLiv4.disable(); + + switch (mode) { + case 'livello': + if (!nomenclatore) { + this.nomenclatoreForm.controls.codice.enable(); + this.nomenclatoreForm.controls.nomenclatoreLiv1.enable(); + this.nomenclatoreForm.controls.nomenclatoreLiv2.enable(); + this.nomenclatoreForm.controls.nomenclatoreLiv3.enable(); + this.nomenclatoreForm.controls.nomenclatoreLiv4.enable(); + } + break; + case 'voce nomenclatore': + this.nomenclatoreForm.controls.descrizioneRimborso.enable(); + this.nomenclatoreForm.controls.idElemento.enable(); + this.nomenclatoreForm.controls.dataInizioValidita.enable(); + this.nomenclatoreForm.controls.dataFineValidita.enable(); + this.nomenclatoreForm.controls.note.enable(); + this.nomenclatoreForm.controls.chiaviRicerca.enable(); + this.nomenclatoreForm.controls.flagAccorpaLivello.enable(); + this.nomenclatoreForm.controls.flagNecessitaDocumentazione.enable(); + this.nomenclatoreForm.controls.flagSelezionabileDaUtenti.enable(); + this.nomenclatoreForm.controls.nomenclatoreLiv1.enable(); + this.nomenclatoreForm.controls.nomenclatoreLiv2.enable(); + this.nomenclatoreForm.controls.nomenclatoreLiv3.enable(); + this.nomenclatoreForm.controls.nomenclatoreLiv4.enable(); + if (!nomenclatore) { + this.nomenclatoreForm.controls.codice.enable(); + } + break; + } + }, + { allowSignalWrites: true }, + ); + + const updateRawChiaviRicercaOnChipsChange$ = + this.nomenclatoreForm.controls.chiaviRicerca.valueChanges.pipe( + untilDestroyed(this), + map( + (values) => + values?.join( + nomenclatoreFormRequirements.rawChiaviRicerca.separator, + ) ?? '', + ), + tap((rawValue) => { + this.nomenclatoreForm.controls.rawChiaviRicerca.setValue(rawValue); + }), + ); + updateRawChiaviRicercaOnChipsChange$.subscribe(); + } + + saveChanges() { + this.submitted.set(true); + if (!this.nomenclatoreForm.valid) return; + this.isSaving.set(true); + + const data = this.data(); + const mode = data?.mode; + const nomenclatore = data?.nomenclatore; + const form = this.nomenclatoreForm.getRawValue(); + + const save$ = of(EMPTY).pipe( + tap(() => { + this.isSaving.set(true); + }), + untilDestroyed(this), + switchMap(() => { + switch (true) { + case mode === 'voce nomenclatore': { + const dto: CreateNomenclatore & UpdateNomenclatore = { + chiaviRicerca: form.rawChiaviRicerca ?? null, + codice: form.codice!, + codiceFasi: form.codiceFasi, + dataFineValidita: + dayjs(form.dataFineValidita).toISOString() ?? + dayjs(new Date()).toISOString(), + // ?.toTemporalInstant() + // .toZonedDateTimeISO(Temporal.Now.timeZoneId()) + // .toPlainDate() + // .toString() ?? null, + dataInizioValidita: + dayjs(form.dataInizioValidita).toISOString() ?? + dayjs(new Date()).toISOString(), + // ?.toTemporalInstant() + // .toZonedDateTimeISO(Temporal.Now.timeZoneId()) + // .toPlainDate() + // .toString() ?? null, + descrizione: form.descrizione!, + descrizioneRimborso: form.descrizioneRimborso, + flagAccorpaLivello: form.flagAccorpaLivello!, + flagNecessitaDocumentazione: form.flagNecessitaDocumentazione!, + flagSelezionabileDaUtenti: form.flagSelezionabileDaUtenti!, + idElemento: form.idElemento!, + idLivello1: form.nomenclatoreLiv1!, + idLivello2: form.nomenclatoreLiv2!, + idLivello3: form.nomenclatoreLiv3!, + idLivello4: form.nomenclatoreLiv4!, + idTipoPrestazione: form.idTipoPrestazione!, + idUnitaDiMisura: form.idUnitaDiMisura!, + note: form.note, + }; + + return !nomenclatore?.id + ? this.nomenclatoreService.createNomenclatore(dto) + : this.nomenclatoreService.updateNomenclatore( + nomenclatore.id, + dto, + ); + } + case mode === 'livello' && (form.nomenclatoreLiv3 ?? 0) > 0: { + const dto: CreateNomenclatoreLivello4 & UpdateNomenclatoreLivello4 = + { + codice: form.codice!, + descrizione: form.descrizione!, + idLivello3: form.nomenclatoreLiv3!, + }; + + return !nomenclatore?.id + ? this.nomenclatoreService.createNomenclatoreLivello({ + livello: 4, + dto, + }) + : this.nomenclatoreService.updateNomenclatoreLivello( + nomenclatore.id, + { livello: 4, dto }, + ); + } + case mode === 'livello' && (form.nomenclatoreLiv2 ?? 0) > 0: { + const dto: CreateNomenclatoreLivello3 & UpdateNomenclatoreLivello3 = + { + codice: form.codice!, + descrizione: form.descrizione!, + idLivello2: form.nomenclatoreLiv2!, + }; + return !nomenclatore?.id + ? this.nomenclatoreService.createNomenclatoreLivello({ + livello: 3, + dto, + }) + : this.nomenclatoreService.updateNomenclatoreLivello( + nomenclatore.id, + { livello: 3, dto }, + ); + } + case mode === 'livello' && (form.nomenclatoreLiv1 ?? 0) > 0: { + const dto: CreateNomenclatoreLivello2 & UpdateNomenclatoreLivello2 = + { + codice: form.codice!, + descrizione: form.descrizione!, + idLivello1: form.nomenclatoreLiv1!, + }; + + return !nomenclatore?.id + ? this.nomenclatoreService.createNomenclatoreLivello({ + livello: 2, + dto, + }) + : this.nomenclatoreService.updateNomenclatoreLivello( + nomenclatore.id, + { livello: 2, dto }, + ); + } + case mode === 'livello' && (form.nomenclatoreLiv1 ?? 0) === 0: { + const dto: CreateNomenclatoreLivello1 & UpdateNomenclatoreLivello1 = + { + codice: form.codice!, + descrizione: form.descrizione!, + }; + + return !nomenclatore?.id + ? this.nomenclatoreService.createNomenclatoreLivello({ + livello: 1, + dto, + }) + : this.nomenclatoreService.updateNomenclatoreLivello( + nomenclatore.id, + { livello: 1, dto }, + ); + } + default: + return of(null); + } + }), + catchError(() => of(null)), + tap((res) => { + this.isSaving.set(false); + if (!res) return; + + this.close(); + this.nomenclatoreService.refresh({ treeOnly: true }); + }), + ); + save$.subscribe(); + } + + revertChanges() { + const data = this.data(); + const mode = data?.mode; + const nomenclatore = data?.nomenclatore; + this.nomenclatoreForm.reset( + new FormGroup(nomenclatoreFormGroupFunc(mode, nomenclatore ?? undefined)) + .value, + ); + } + + close() { + this.isOpen.set(false); + } + + reset() { + this.data.set(undefined); + this.submitted.set(false); + } + + toggleFieldEnable(formControl: AbstractControl) { + formControl.enabled ? formControl.disable() : formControl.enable(); + } + + clearField(formControl: AbstractControl) { + formControl.patchValue(0); + } +} diff --git a/src/app/modules/main/nomenclatore/nomenclatore.component.html b/src/app/modules/main/nomenclatore/nomenclatore.component.html new file mode 100644 index 0000000..2e91d01 --- /dev/null +++ b/src/app/modules/main/nomenclatore/nomenclatore.component.html @@ -0,0 +1,153 @@ + + +Nomenclatore + + +
+
+ + + +
+
+ + + + + + + +
+ + + + + + + + +
+
+
+
+ + + + + + + + - + + + + + +
+ +
+ +
+ + diff --git a/src/app/modules/main/nomenclatore/nomenclatore.component.scss b/src/app/modules/main/nomenclatore/nomenclatore.component.scss new file mode 100644 index 0000000..170046d --- /dev/null +++ b/src/app/modules/main/nomenclatore/nomenclatore.component.scss @@ -0,0 +1,4 @@ +:host ::ng-deep mark { + padding: 0; + font-weight: bold; +} diff --git a/src/app/modules/main/nomenclatore/nomenclatore.component.ts b/src/app/modules/main/nomenclatore/nomenclatore.component.ts new file mode 100644 index 0000000..9e2d29e --- /dev/null +++ b/src/app/modules/main/nomenclatore/nomenclatore.component.ts @@ -0,0 +1,316 @@ +import { CommonModule } from '@angular/common'; +import { + Component, + ViewChild, + inject, + signal, + type OnInit, +} from '@angular/core'; +import { toObservable } from '@angular/core/rxjs-interop'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { MyDirectiveModule } from '@core/directives/my-directive.module'; +import { HightlightPipe } from '@core/pipes'; +import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { cloneDeep, identity } from 'lodash'; +import { ToastMessageOptions, type TreeNode } from 'primeng/api'; +import { ButtonModule } from 'primeng/button'; +import { CardModule } from 'primeng/card'; +import { DialogModule } from 'primeng/dialog'; +import { DropdownModule } from 'primeng/dropdown'; +import { InputGroupModule } from 'primeng/inputgroup'; +import { InputTextModule } from 'primeng/inputtext'; +import { SplitButtonModule } from 'primeng/splitbutton'; +import { TreeModule } from 'primeng/tree'; +import { TreeTableModule, type TreeTable } from 'primeng/treetable'; +import { + catchError, + combineLatest, + debounceTime, + distinctUntilKeyChanged, + filter, + lastValueFrom, + map, + of, + switchMap, + tap, +} from 'rxjs'; +// import { +// NomenclatoreDialogComponent, +// type NomenclatoreDialogEntry, +// type NomenclatoreDialogType, +// } from './nomenclatore-dialog.component.js'; +import dayjs from 'dayjs'; +import { saveAs } from 'file-saver'; +import { InputGroupAddonModule } from 'primeng/inputgroupaddon'; +import { MessagesModule } from 'primeng/messages'; +import { + NomenclatoreDialogComponent, + NomenclatoreDialogEntry, + NomenclatoreDialogType, +} from './nomenclatore-dialog/nomenclatore-dialog.component.js'; +import type { NomenclatoreTreeNodeData } from './nomenclatore.service.js'; +import { + NomenclatoreService, + buildNomenclatoreTree, +} from './nomenclatore.service.js'; + +@UntilDestroy() +@Component({ + selector: 'app-nomenclatore', + imports: [ + CommonModule, + CardModule, + FormsModule, + ButtonModule, + SplitButtonModule, + InputTextModule, + InputGroupModule, + TreeModule, + TreeTableModule, + HightlightPipe, + DialogModule, + DropdownModule, + ReactiveFormsModule, + NomenclatoreDialogComponent, + InputGroupAddonModule, + MessagesModule, + MyDirectiveModule, + ], + providers: [], + templateUrl: './nomenclatore.component.html', + styleUrl: './nomenclatore.component.scss', +}) +export class NomenclatoreComponent implements OnInit { + nomenclatoreService = inject(NomenclatoreService); + + nomenclatoreLiv1$ = this.nomenclatoreService.nomenclatoreLivello1$; + nomenclatoreLiv2$ = this.nomenclatoreService.nomenclatoreLivello2$; + nomenclatoreLiv3$ = this.nomenclatoreService.nomenclatoreLivello3$; + nomenclatoreLiv4$ = this.nomenclatoreService.nomenclatoreLivello4$; + nomenclatore$ = this.nomenclatoreService.nomenclatoreExcerpt$; + + messages: ToastMessageOptions[] = []; + showTransitionOptions = '500ms'; + + globalSearch = signal(null); + nomenclatoreTableIsLoading = signal(false); + csvExportIsLoading = signal(false); + + isLoading = signal(false); + isEditingRow = new Map(); + + isOpen = signal(false); + selectedNomenclatoreNode = signal< + | { + mode: NomenclatoreDialogType; + nomenclatore: NomenclatoreDialogEntry | null; + } + | undefined + >(undefined); + + table?: TreeTable; + @ViewChild('nomenclatoreTable') set setNomenclatoreTable( + table: TreeTable | null | undefined, + ) { + if (!table) return; + this.table = table; + + this.table.onFilter + .pipe( + untilDestroyed(this), + map(({ filters, filteredValue }) => ({ + globalFilter: filters?.['global']?.value as string | undefined, + filteredValue, + })), + distinctUntilKeyChanged('globalFilter'), + tap(({ globalFilter, filteredValue }) => { + const filter = globalFilter + ? new RegExp(globalFilter, 'gi') + : undefined; + filteredValue?.forEach((node) => { + this.expandHighlightedNodes( + node as TreeNode, + filter, + ); + }); + this.nomenclatoreTableIsLoading.set(false); + }), + ) + .subscribe(); + } + + constructor() { + const globalSearch$ = toObservable(this.globalSearch); + globalSearch$ + .pipe( + untilDestroyed(this), + filter( + (value) => + value !== null && (value.length === 0 || value.length >= 3), + ), + debounceTime(300), + tap((value) => { + this.table?.filterGlobal(value ?? '', 'contains'); + this.nomenclatoreTableIsLoading.set(true); + }), + ) + .subscribe(); + + const rebuildTreeOnRefresh$ = this.nomenclatoreService.refresh$.pipe( + untilDestroyed(this), + tap(() => { + this.nomenclatoreTableIsLoading.set(true); + }), + switchMap(() => + combineLatest([ + this.nomenclatoreLiv1$, + this.nomenclatoreLiv2$, + this.nomenclatoreLiv3$, + this.nomenclatoreLiv4$, + this.nomenclatore$, + ]), + ), + tap( + ([ + nomenclatoreLiv1, + nomenclatoreLiv2, + nomenclatoreLiv3, + nomenclatoreLiv4, + nomenclatore, + ]) => { + this.nodes = buildNomenclatoreTree( + nomenclatoreLiv1, + nomenclatoreLiv2, + nomenclatoreLiv3, + nomenclatoreLiv4, + nomenclatore, + ); + this.nomenclatoreTableIsLoading.set(false); + }, + ), + ); + rebuildTreeOnRefresh$.subscribe(); + } + + nodes: TreeNode[] = []; + + expandAll() { + this.expandNodes(this.nodes, true); + } + + collapseAll() { + this.expandNodes(this.nodes, false); + } + + refresh() { + this.nomenclatoreService.refresh(); + } + + exportCSV() { + this.csvExportIsLoading.set(true); + const exportCSV$ = this.nomenclatoreService.exportCSV().pipe( + catchError(() => { + this.messages = [ + { + severity: 'error', + life: 5000, + summary: 'Attenzione!', + detail: + 'Impossibile esportare il csv dei nomenclatori al momento, riprova più tardi', + }, + ]; + return of(null); + }), + tap((blob) => { + if (!blob) return; + const timestamp = dayjs().format('YYYYMMDD_HHmmss'); + const fileName = `nomenclatore_export_${timestamp}.csv`; + saveAs(blob, fileName); + this.csvExportIsLoading.set(false); + }), + ); + + exportCSV$.subscribe(); + } + + createNomenclatore(type: NomenclatoreDialogType) { + this.selectedNomenclatoreNode.set({ mode: type, nomenclatore: null }); + this.isOpen.set(true); + } + + async editNomenclatore(event: { + node: TreeNode; + }) { + const { node } = event; + if (!node.data) return; + + this.isEditingRow.set(node, true); + + if (node.data.type === 'voce nomenclatore') { + const fullVoceNomenclatore = await lastValueFrom( + this.nomenclatoreService.getOneNomenclatoreById({ id: node.data.id }), + ); + Object.assign(node.data, fullVoceNomenclatore); + } + this.isEditingRow.delete(node); + + this.isOpen.set(true); + this.selectedNomenclatoreNode.set({ + mode: node.data.type, + nomenclatore: node.data, + }); + } + + private expandNodes(nodes: TreeNode[], toggle: boolean) { + if (this.nomenclatoreTableIsLoading()) return; + + const expandNodes = (nodes: TreeNode[], toggle: boolean) => { + nodes.forEach((node) => { + node.expanded = toggle; + if (node.children) expandNodes(node.children, toggle); + }); + }; + + this.nomenclatoreTableIsLoading.set(true); + setTimeout(() => { + expandNodes(nodes, toggle); + this.nodes = cloneDeep(this.nodes); + this.nomenclatoreTableIsLoading.set(false); + }, 50); + } + + private expandHighlightedNodes( + node: TreeNode, + filter?: RegExp, + ): boolean { + const globalFilterFields = this.table + ?.globalFilterFields as (keyof NomenclatoreTreeNodeData)[]; + globalFilterFields; + const matches = ( + node: TreeNode, + filter?: RegExp, + ) => { + return ( + filter != null && + globalFilterFields + .map((field) => node.data?.[field]) + .some((value) => { + return value?.toString().match(filter); + }) + ); + }; + + if (!node.children?.length) { + return matches(node, filter); + } + + node.expanded = node.children + .map((child) => this.expandHighlightedNodes(child, filter)) + .some(identity); + return matches(node, filter) || node.expanded; + } + + ngOnInit(): void { + this.refresh(); + } +} diff --git a/src/app/modules/main/nomenclatore/nomenclatore.routes.ts b/src/app/modules/main/nomenclatore/nomenclatore.routes.ts new file mode 100644 index 0000000..cc68d24 --- /dev/null +++ b/src/app/modules/main/nomenclatore/nomenclatore.routes.ts @@ -0,0 +1,17 @@ +import { ExtraOptions, Routes } from '@angular/router'; +import { NomenclatoreComponent } from './nomenclatore.component'; + +export const routerOptions: ExtraOptions = { + anchorScrolling: 'enabled', + scrollPositionRestoration: 'enabled', + paramsInheritanceStrategy: 'always', +}; + +export const nomenclatoreRoutes: Routes = [ + { + path: '', + component: NomenclatoreComponent, + children: [], + // data: { expectedPrivileges: ['NOMENCLATORE_MANAGER'] }, + }, +]; diff --git a/src/app/modules/main/nomenclatore/nomenclatore.service.ts b/src/app/modules/main/nomenclatore/nomenclatore.service.ts new file mode 100644 index 0000000..a2acf50 --- /dev/null +++ b/src/app/modules/main/nomenclatore/nomenclatore.service.ts @@ -0,0 +1,602 @@ +import { Injectable, inject } from '@angular/core'; +import type { + CreateNomenclatoreLivello1, + CreateNomenclatoreLivello2, + CreateNomenclatoreLivello3, + CreateNomenclatoreLivello4, + NomenclatoreExcerptRes, + NomenclatoreLivello1ResDto, + NomenclatoreLivello2ResDto, + NomenclatoreLivello3ResDto, + NomenclatoreLivello4ResDto, + NomenclatoreRes, + UpdateNomenclatoreLivello1, + UpdateNomenclatoreLivello2, + UpdateNomenclatoreLivello3, + UpdateNomenclatoreLivello4, +} from '@api/models'; +import { NomenclatoreApiClient } from '@api/services'; +import { sortBy } from 'lodash'; +import type { TreeNode } from 'primeng/api'; +import { MessageService } from 'primeng/api'; +import { + Observable, + ReplaySubject, + catchError, + map, + of, + shareReplay, + switchMap, + tap, + throwError, +} from 'rxjs'; + +export type NomenclatoreExcerpt = NomenclatoreExcerptRes; +export type Nomenclatore = NomenclatoreRes; +export type NomenclatoreLiv1 = NomenclatoreLivello1ResDto; +export type NomenclatoreLiv2 = NomenclatoreLivello2ResDto; +export type NomenclatoreLiv3 = NomenclatoreLivello3ResDto; +export type NomenclatoreLiv4 = NomenclatoreLivello4ResDto; + +export type NomenclatoreNodeType = 'voce nomenclatore' | 'livello'; +export type NomenclatoreTreeNodeData = { + id: number; + codice: string; + descrizione: string; + idLivello1: number | null; + idLivello2: number | null; + idLivello3: number | null; + idLivello4: number | null; + type: NomenclatoreNodeType; +}; + +@Injectable({ providedIn: 'root' }) +export class NomenclatoreService { + nomenclatoreApiClient = inject(NomenclatoreApiClient); + messageService = inject(MessageService); + + readonly refresh$ = new ReplaySubject(1); + readonly refreshTree$ = new ReplaySubject(1); + + nomenclatoreExcerpt$ = this.refreshTree$.pipe( + switchMap(() => this.findManyNomenclatore()), + shareReplay(1), + ); + + nomenclatoreLivello1$ = this.refreshTree$.pipe( + switchMap(() => this.findManyLivello1Nomenclatore()), + map((values) => sortBy(values, (item) => (item.id <= 0 ? -1 : 1))), + shareReplay(1), + ); + + nomenclatoreLivello2$ = this.refreshTree$.pipe( + switchMap(() => this.findManyLivello2Nomenclatore()), + map((values) => sortBy(values, (item) => (item.id <= 0 ? -1 : 1))), + shareReplay(1), + ); + + nomenclatoreLivello3$ = this.refreshTree$.pipe( + switchMap(() => this.findManyLivello3Nomenclatore()), + map((values) => sortBy(values, (item) => (item.id <= 0 ? -1 : 1))), + shareReplay(1), + ); + + nomenclatoreLivello4$ = this.refreshTree$.pipe( + switchMap(() => this.findManyLivello4Nomenclatore()), + map((values) => sortBy(values, (item) => (item.id <= 0 ? -1 : 1))), + shareReplay(1), + ); + + categoriePrestazione$ = this.refresh$.pipe( + switchMap(() => this.findManyCategoriePrestazione()), + map((values) => sortBy(values, (item) => (item.id <= 0 ? -1 : 1))), + shareReplay(1), + ); + + elementi$ = this.refresh$.pipe( + switchMap(() => this.findManyElementi()), + map((values) => sortBy(values, (item) => (item.id <= 0 ? -1 : 1))), + shareReplay(1), + ); + + tipiPrestazione$ = this.refresh$.pipe( + switchMap(() => this.findManyTipiPrestazione()), + map((values) => sortBy(values, (item) => (item.id <= 0 ? -1 : 1))), + shareReplay(1), + ); + + tipiStruttura$ = this.refresh$.pipe( + switchMap(() => this.findManyTipiStruttura()), + map((values) => sortBy(values, (item) => (item.id <= 0 ? -1 : 1))), + shareReplay(1), + ); + + unitaDiMisura$ = this.refresh$.pipe( + switchMap(() => this.findManyUnitaDiMisura()), + map((values) => sortBy(values, (item) => (item.id <= 0 ? -1 : 1))), + shareReplay(1), + ); + + refresh(opts?: { treeOnly: boolean }) { + this.refreshTree$.next(); + if (!opts?.treeOnly) { + this.refresh$.next(); + } + } + + getOneNomenclatoreById(params: { id: number }) { + return this.nomenclatoreApiClient + .nomenclatoreControllerGetOneNomenclatoreById(params) + .pipe( + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `${err}`, + }); + return throwError(() => err); + }), + ); + } + + exportCSV() { + return this.nomenclatoreApiClient + .nomenclatoreControllerExportNomenclatore() + .pipe( + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `${err}`, + }); + return throwError(() => err); + }), + ); + } + + findManyNomenclatore() { + return this.nomenclatoreApiClient + .nomenclatoreControllerFindManyNomenclatore() + .pipe( + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `${err}`, + }); + return throwError(() => err); + }), + ); + } + + findManyLivello1Nomenclatore() { + return this.nomenclatoreApiClient + .nomenclatoreControllerFindManyLivello1Nomenclatore() + .pipe( + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `${err}`, + }); + return throwError(() => err); + }), + ); + } + + findManyLivello2Nomenclatore() { + return this.nomenclatoreApiClient + .nomenclatoreControllerFindManyLivello2Nomenclatore() + .pipe( + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `${err}`, + }); + return throwError(() => err); + }), + ); + } + + findManyLivello3Nomenclatore() { + return this.nomenclatoreApiClient + .nomenclatoreControllerFindManyLivello3Nomenclatore() + .pipe( + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `${err}`, + }); + return throwError(() => err); + }), + ); + } + + findManyLivello4Nomenclatore() { + return this.nomenclatoreApiClient + .nomenclatoreControllerFindManyLivello4Nomenclatore() + .pipe( + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `${err}`, + }); + return throwError(() => err); + }), + ); + } + + findManyCategoriePrestazione() { + return this.nomenclatoreApiClient + .nomenclatoreControllerFindManyCategoriePrestazione() + .pipe( + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `${err}`, + }); + return throwError(() => err); + }), + ); + } + + findManyElementi() { + return this.nomenclatoreApiClient + .nomenclatoreControllerFindManyElementi() + .pipe( + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `${err}`, + }); + return throwError(() => err); + }), + ); + } + + findManyTipiPrestazione() { + return this.nomenclatoreApiClient + .nomenclatoreControllerFindManyTipiPrestazione() + .pipe( + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `${err}`, + }); + return throwError(() => err); + }), + ); + } + + findManyTipiStruttura() { + return this.nomenclatoreApiClient + .nomenclatoreControllerFindManyTipiStruttura() + .pipe( + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `${err}`, + }); + return throwError(() => err); + }), + ); + return of([] as { id: number }[]); + } + + findManyUnitaDiMisura() { + return this.nomenclatoreApiClient + .nomenclatoreControllerFindManyUnitaDiMisura() + .pipe( + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `${err}`, + }); + return throwError(() => err); + }), + ); + } + + createNomenclatore(dto: any) { + return this.nomenclatoreApiClient + .nomenclatoreControllerCreateNomenclatore({ body: dto }) + .pipe( + tap((res) => { + this.messageService.add({ + severity: 'success', + summary: 'Modifiche effettuate', + detail: 'Voce nomenclatore creata con successo', + }); + }), + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `${err}`, + }); + return throwError(() => err); + }), + ); + } + + updateNomenclatore(id: number, dto: any) { + return this.nomenclatoreApiClient + .nomenclatoreControllerUpdateNomenclatore({ id, body: dto }) + .pipe( + tap((res) => { + this.messageService.add({ + severity: 'success', + summary: 'Modifiche effettuate', + detail: 'Voce nomenclatore modificata con successo', + }); + }), + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `${err}`, + }); + return throwError(() => err); + }), + ); + } + + createNomenclatoreLivello( + data: + | { livello: 1; dto: CreateNomenclatoreLivello1 } + | { livello: 2; dto: CreateNomenclatoreLivello2 } + | { livello: 3; dto: CreateNomenclatoreLivello3 } + | { livello: 4; dto: CreateNomenclatoreLivello4 }, + ) { + const { livello, dto } = data; + const getObs = (): Observable< + | CreateNomenclatoreLivello1 + | CreateNomenclatoreLivello2 + | CreateNomenclatoreLivello3 + | CreateNomenclatoreLivello4 + > => { + switch (livello) { + case 1: + return this.nomenclatoreApiClient.nomenclatoreControllerCreateNomenclatoreLivello1( + { body: dto }, + ); + case 2: + return this.nomenclatoreApiClient.nomenclatoreControllerCreateNomenclatoreLivello2( + { body: dto }, + ); + case 3: + return this.nomenclatoreApiClient.nomenclatoreControllerCreateNomenclatoreLivello3( + { body: dto }, + ); + case 4: + return this.nomenclatoreApiClient.nomenclatoreControllerCreateNomenclatoreLivello4( + { body: dto }, + ); + default: + throw Error(); + } + }; + return getObs().pipe( + tap((res) => { + this.messageService.add({ + severity: 'success', + summary: 'Modifiche effettuate', + detail: `Voce livello ${livello} nomenclatore creata con successo`, + }); + }), + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `${err}`, + }); + return throwError(() => err); + }), + ); + } + + updateNomenclatoreLivello( + id: number, + data: + | { livello: 1; dto: UpdateNomenclatoreLivello1 } + | { livello: 2; dto: UpdateNomenclatoreLivello2 } + | { livello: 3; dto: UpdateNomenclatoreLivello3 } + | { livello: 4; dto: UpdateNomenclatoreLivello4 }, + ) { + const { livello, dto } = data; + const getObs = (): Observable< + | UpdateNomenclatoreLivello1 + | UpdateNomenclatoreLivello2 + | UpdateNomenclatoreLivello3 + | UpdateNomenclatoreLivello4 + > => { + switch (livello) { + case 1: + return this.nomenclatoreApiClient.nomenclatoreControllerUpdateNomenclatoreLivello1( + { + id, + body: dto, + }, + ); + case 2: + return this.nomenclatoreApiClient.nomenclatoreControllerUpdateNomenclatoreLivello2( + { + id, + body: dto, + }, + ); + case 3: + return this.nomenclatoreApiClient.nomenclatoreControllerUpdateNomenclatoreLivello3( + { + id, + body: dto, + }, + ); + case 4: + return this.nomenclatoreApiClient.nomenclatoreControllerUpdateNomenclatoreLivello4( + { + id, + body: dto, + }, + ); + default: + throw Error(); + } + }; + return getObs().pipe( + tap((res) => { + this.messageService.add({ + severity: 'success', + summary: 'Modifiche effettuate', + detail: `Voce livello ${livello} nomenclatore modificata con successo`, + }); + }), + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `${err}`, + }); + return throwError(() => err); + }), + ); + } +} + +export function buildNomenclatoreTree( + nomenclatoreLiv1: NomenclatoreLiv1[], + nomenclatoreLiv2: NomenclatoreLiv2[], + nomenclatoreLiv3: NomenclatoreLiv3[], + nomenclatoreLiv4: NomenclatoreLiv4[], + nomenclatore: NomenclatoreExcerpt[], +): TreeNode[] { + const tassonomia = nomenclatoreLiv1 + .filter((l1) => l1.id > 0) + .map((l1) => ({ + data: { + type: 'livello' as NomenclatoreNodeType, + ...l1, + idLivello1: 0, + idLivello2: 0, + idLivello3: 0, + idLivello4: 0, + }, + children: [ + ...nomenclatoreLiv2 + .filter((l2) => l2.idLivello1 === l1.id) + .map((l2) => ({ + data: { + type: 'livello' as NomenclatoreNodeType, + ...l2, + idLivello1: l1.id, + idLivello2: 0, + idLivello3: 0, + idLivello4: 0, + }, + children: [ + ...nomenclatoreLiv3 + .filter((l3) => l3.idLivello2 === l2.id) + .map((l3) => ({ + data: { + type: 'livello' as NomenclatoreNodeType, + ...l3, + idLivello1: l1.id, + idLivello2: l2.id, + idLivello3: 0, + idLivello4: 0, + }, + children: [ + ...nomenclatoreLiv4 + .filter((l4) => l4.idLivello3 === l3.id) + .map((l4) => ({ + data: { + type: 'livello' as NomenclatoreNodeType, + ...l4, + idLivello1: l1.id, + idLivello2: l2.id, + idLivello3: l3.id, + idLivello4: 0, + }, + children: nomenclatore + .filter( + (n) => + n.idLivello1 === l1.id && + n.idLivello2 === l2.id && + n.idLivello3 === l3.id && + n.idLivello4 === l4.id, + ) + .map((n) => ({ + data: { + type: 'voce nomenclatore' as NomenclatoreNodeType, + ...n, + }, + })), + })), + ...nomenclatore + .filter( + (n) => + n.idLivello1 === l1.id && + n.idLivello2 === l2.id && + n.idLivello3 === l3.id && + n.idLivello4 === 0, + ) + .map((n) => ({ + data: { + type: 'voce nomenclatore' as NomenclatoreNodeType, + ...n, + }, + })), + ], + })), + ...nomenclatore + .filter( + (n) => + n.idLivello1 === l1.id && + n.idLivello2 === l2.id && + n.idLivello3 === 0 && + n.idLivello4 === 0, + ) + .map((n) => ({ + data: { + type: 'voce nomenclatore' as NomenclatoreNodeType, + ...n, + }, + })), + ], + })), + ...nomenclatore + .filter( + (n) => + n.idLivello1 === l1.id && + n.idLivello2 === 0 && + n.idLivello3 === 0 && + n.idLivello4 === 0, + ) + .map((n) => ({ + data: { type: 'voce nomenclatore' as NomenclatoreNodeType, ...n }, + })), + ], + })); + + const fuoriTassonomia = nomenclatore + .filter( + (n) => + n.idLivello1 === 0 && + n.idLivello2 === 0 && + n.idLivello3 === 0 && + n.idLivello4 === 0, + ) + .map((n) => ({ + data: { type: 'voce nomenclatore' as NomenclatoreNodeType, ...n }, + })); + + return [...tassonomia, ...fuoriTassonomia]; +} diff --git a/src/app/modules/main/ruoli/manage-roles-dialog/manage-roles-dialog.component.html b/src/app/modules/main/ruoli/manage-roles-dialog/manage-roles-dialog.component.html new file mode 100644 index 0000000..9401603 --- /dev/null +++ b/src/app/modules/main/ruoli/manage-roles-dialog/manage-roles-dialog.component.html @@ -0,0 +1,171 @@ +@let vm = (model$ | async)!; + + + + + + {{ col.header }} + + + + + + +
+ +
+
+ + + + + {{ row.action.standardCode }} + + + {{ row.action.description }} + + + @if (row.action.flagEnabledReadonly) { + + } + + + + + + + + + + + + + Non ci sono privilegi + + +
+ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/app/modules/main/ruoli/manage-roles-dialog/manage-roles-dialog.component.scss b/src/app/modules/main/ruoli/manage-roles-dialog/manage-roles-dialog.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/modules/main/ruoli/manage-roles-dialog/manage-roles-dialog.component.ts b/src/app/modules/main/ruoli/manage-roles-dialog/manage-roles-dialog.component.ts new file mode 100644 index 0000000..1b53ac6 --- /dev/null +++ b/src/app/modules/main/ruoli/manage-roles-dialog/manage-roles-dialog.component.ts @@ -0,0 +1,329 @@ +import { CommonModule } from '@angular/common'; +import { Component, Optional } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { FindActionResDto, FindPrivilegeResDto } from '@api/models'; +import { TableColumn } from '@core/models'; +import { RxState } from '@rx-angular/state'; +import { ConfirmationService, ToastMessageOptions } from 'primeng/api'; +import { ButtonModule } from 'primeng/button'; +import { ConfirmDialogModule } from 'primeng/confirmdialog'; +import { ConfirmPopupModule } from 'primeng/confirmpopup'; +import { DialogModule } from 'primeng/dialog'; +import { + DialogService, + DynamicDialogConfig, + DynamicDialogRef, +} from 'primeng/dynamicdialog'; +import { IconFieldModule } from 'primeng/iconfield'; +import { InputIconModule } from 'primeng/inputicon'; +import { InputSwitchModule } from 'primeng/inputswitch'; +import { InputTextModule } from 'primeng/inputtext'; +import { MessagesModule } from 'primeng/messages'; +import { MultiSelectModule } from 'primeng/multiselect'; +import { SelectModule } from 'primeng/select'; +import { SkeletonModule } from 'primeng/skeleton'; +import { TableModule } from 'primeng/table'; +import { TagModule } from 'primeng/tag'; +import { ToastModule } from 'primeng/toast'; +import { TooltipModule } from 'primeng/tooltip'; +import { + catchError, + EMPTY, + endWith, + map, + Observable, + of, + startWith, + switchMap, + tap, +} from 'rxjs'; +import { handleDynamicDialog } from '../../../shared/utils/dynamic-dialog-utils'; +import { RuoliService } from '../ruoli.service'; + +export interface ManageRolesDialogComponentState { + isSaving: boolean; + isLoading: boolean; + privileges: FindPrivilegeResDto[]; + availablePrivileges: FindActionResDto[]; + privilegesAreLoading: boolean; + roleId: number; + visible: boolean; + availablePrivilegesAreLoading: boolean; + selectedAvailablePrivileges: FindActionResDto[]; + settingPrivilegesIsLoading: boolean; + cdIsLoading: boolean; +} + +type State = ManageRolesDialogComponentState; + +@Component({ + selector: 'app-manage-roles-dialog', + imports: [ + CommonModule, + TableModule, + InputTextModule, + SkeletonModule, + ButtonModule, + TooltipModule, + FormsModule, + ReactiveFormsModule, + MultiSelectModule, + ConfirmDialogModule, + IconFieldModule, + InputIconModule, + MessagesModule, + TagModule, + ConfirmPopupModule, + ToastModule, + InputSwitchModule, + DialogModule, + SelectModule, + ], + providers: [RxState, DialogService, ConfirmationService], + templateUrl: './manage-roles-dialog.component.html', + styleUrl: './manage-roles-dialog.component.scss', +}) +export class ManageRolesDialogComponent { + //state = inject(RxState); + + //model$ = this.state.select(); + + model$: Observable; + + showTransitionOptions = '500ms'; + + messages: ToastMessageOptions[] = []; + + livelliPermesso: any[] = [ + { + value: true, + label: 'Lettura', + }, + { + value: false, + label: 'Lettura/Scrittura', + }, + ]; + + selectedLevels: any[] = []; + + colsPrivileges: TableColumn[] = [ + { field: 'action.standardCode', header: 'Codice' }, + { field: 'action.description', header: 'Descrizione' }, + { field: 'action.id', header: 'Permessi' }, + { field: 'flagEnabledBoolean', header: 'Abilitazione' }, + { field: 'azioni', header: 'Azioni' }, + ]; + + constructor( + private ruoliService: RuoliService, + @Optional() readonly dialogRef: DynamicDialogRef, + @Optional() readonly dialogConfig: DynamicDialogConfig, + private readonly dialogService: DialogService, + private confirmationService: ConfirmationService, + public state: RxState, + ) { + this.model$ = this.state.select(); + + this.state.set({ + isSaving: false, + isLoading: false, + privileges: [], + availablePrivileges: [], + privilegesAreLoading: false, + availablePrivilegesAreLoading: false, + settingPrivilegesIsLoading: false, + cdIsLoading: false, + }); + + handleDynamicDialog.bind(this)(); + + // handleDynamicDialog.bind({ + // dialogRef: this.dialogRef, + // dialogConfig: this.dialogConfig, + // state: this.state, + // })(); + } + + getPrivileges() { + const fetchPrivilegiById$ = of(EMPTY).pipe( + switchMap(() => + this.ruoliService.getPrivilegesById(this.state.get('roleId')).pipe( + catchError(() => of(undefined)), + tap((res) => { + if (!res) return; + }), + map((res) => ({ privileges: res })), + startWith({ privilegesAreLoading: true }), + endWith({ privilegesAreLoading: false }), + ), + ), + ); + this.state.connect(fetchPrivilegiById$); + } + + onChangeEnableFlag(privilege: FindPrivilegeResDto, value: boolean) { + const changePrivilegeEnabled$ = this.ruoliService + .changePrivilegeFlagEnabled(privilege.id, value) + .pipe( + catchError((err) => { + this.messages = [ + { + severity: 'error', + summary: 'Attenzione!', + detail: + err.status === 400 + ? err.error.message + : 'Impossibile modificare il privilegio in questo momento, riprovare più tardi', + }, + ]; + return of(null); + }), + tap((res) => { + if (!res) return; + this.messages = [ + { + severity: 'success', + summary: 'Operazione completata!', + life: 5000, + detail: 'Privilegio modificato con successo', + }, + ]; + this.getPrivileges(); + }), + map(() => ({})), + startWith({ privilegesAreLoading: true }), + endWith({ privilegesAreLoading: false }), + ); + this.state.connect(changePrivilegeEnabled$); + } + + onChangeLivello(privilegeId: number, value: boolean) { + const changePrivilegeReadOnlyFlag$ = this.ruoliService + .changePrivilegeReadOnlyFlag(privilegeId, value) + .pipe( + catchError((err) => { + this.messages = [ + { + severity: 'error', + summary: 'Attenzione!', + detail: + err.status === 400 + ? err.error.message + : 'Impossibile modificare il privilegio in questo momento, riprovare più tardi', + }, + ]; + return of(null); + }), + tap((res) => { + if (!res) return; + this.messages = [ + { + severity: 'success', + summary: 'Operazione completata!', + life: 5000, + detail: 'Privilegio modificato con successo', + }, + ]; + this.getPrivileges(); + }), + map(() => ({})), + startWith({ privilegesAreLoading: true }), + endWith({ privilegesAreLoading: false }), + ); + this.state.connect(changePrivilegeReadOnlyFlag$); + } + + openAddPrivileges() { + this.state.set({ + visible: true, + }); + const fetchPrivilegiById$ = of(EMPTY).pipe( + switchMap(() => + this.ruoliService.getAvailablePrivileges(this.state.get('roleId')).pipe( + catchError(() => of(null)), + tap((res) => { + if (!res) return; + this.state.set({ + availablePrivileges: res, + }); + }), + map(() => ({})), + startWith({ availablePrivilegesAreLoading: true }), + endWith({ availablePrivilegesAreLoading: false }), + ), + ), + ); + this.state.connect(fetchPrivilegiById$); + } + + submitPrivileges() { + const submitPrivileges$ = of(EMPTY).pipe( + switchMap(() => + this.ruoliService + .setPrivilegesForRole( + this.state.get('roleId'), + this.state.get('selectedAvailablePrivileges'), + ) + .pipe( + catchError(() => of(null)), + tap((res) => { + if (!res) return; + this.getPrivileges(); + this.state.set({ + visible: false, + }); + }), + map(() => ({})), + startWith({ settingPrivilegesIsLoading: true }), + endWith({ settingPrivilegesIsLoading: false }), + ), + ), + ); + this.state.connect(submitPrivileges$); + } + + onCloseAggiungiPermessiDialog(event: Event) { + this.state.set({ + selectedAvailablePrivileges: [], + }); + } + + showDeleteDialog(event: Event, privilegId: number): void { + this.confirmationService.confirm({ + target: event.target as EventTarget, + key: 'cd', + header: 'Elimina privilegio', + icon: 'pi pi-exclamation-triangle', + message: 'Sei sicuro di voler eliminare questo privilegio?', + acceptLabel: 'Sì, elimina', + acceptButtonStyleClass: 'p-button-rounded', + rejectButtonStyleClass: 'p-button-rounded p-button-outlined', + acceptIcon: 'pi pi-trash', + rejectLabel: 'Annulla', + accept: () => { + const saveDeleteChannel$ = this.ruoliService + .deletePrivilege(privilegId) + .pipe( + catchError((err) => of(null)), + tap((res) => { + if (!res) return; + this.messages = [ + { + severity: 'success', + summary: 'Operazione completata!', + life: 5000, + detail: 'Privilegio eliminato con successo', + }, + ]; + this.getPrivileges(); + }), + map(() => ({})), + startWith({ cdIsLoading: true }), + endWith({ cdIsLoading: false }), + ); + this.state.connect(saveDeleteChannel$); + }, + }); + } +} diff --git a/src/app/modules/main/ruoli/ruoli.component.html b/src/app/modules/main/ruoli/ruoli.component.html new file mode 100644 index 0000000..d5520e6 --- /dev/null +++ b/src/app/modules/main/ruoli/ruoli.component.html @@ -0,0 +1,161 @@ +@let vm = (model$ | async)!; + + +
+ Ruoli +
+
+ + + + +
+
+ {{ col.header }} + +
+ + + + + + + + + + + + +
+ + +
+ + + + + + {{ row.standardCode }} + + + {{ row.standardName }} + + + {{ row.description }} + + + +
+ +
+ +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/app/modules/main/ruoli/ruoli.component.scss b/src/app/modules/main/ruoli/ruoli.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/modules/main/ruoli/ruoli.component.ts b/src/app/modules/main/ruoli/ruoli.component.ts new file mode 100644 index 0000000..4b038e6 --- /dev/null +++ b/src/app/modules/main/ruoli/ruoli.component.ts @@ -0,0 +1,212 @@ +import { CommonModule } from '@angular/common'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { RxState } from '@rx-angular/state'; +import { ConfirmationService, ToastMessageOptions } from 'primeng/api'; +import { ButtonModule } from 'primeng/button'; +import { ConfirmDialogModule } from 'primeng/confirmdialog'; +import { ConfirmPopupModule } from 'primeng/confirmpopup'; +import { DialogService, DynamicDialogRef } from 'primeng/dynamicdialog'; +import { IconFieldModule } from 'primeng/iconfield'; +import { InputIconModule } from 'primeng/inputicon'; +import { InputTextModule } from 'primeng/inputtext'; +import { MessagesModule } from 'primeng/messages'; +import { MultiSelectModule } from 'primeng/multiselect'; +import { SkeletonModule } from 'primeng/skeleton'; +import { Table, TableLazyLoadEvent, TableModule } from 'primeng/table'; +import { TagModule } from 'primeng/tag'; +import { ToastModule } from 'primeng/toast'; +import { TooltipModule } from 'primeng/tooltip'; +import { + catchError, + EMPTY, + endWith, + map, + Observable, + of, + startWith, + switchMap, + tap, +} from 'rxjs'; +import { FindPrivilegeResDto, FindRoleResDto } from '../../../../api/models'; +import { TableColumn } from '../../shared/interfaces'; +import { DynamicDialogData } from '../../shared/utils/dynamic-dialog-utils'; +import { + ManageRolesDialogComponent, + ManageRolesDialogComponentState, +} from './manage-roles-dialog/manage-roles-dialog.component'; +import { RuoliService } from './ruoli.service'; + +export interface ManageRoleComponentState { + roles: FindRoleResDto[]; + rolesAreLoading: boolean; + rolesTotalCount: number; + currentFilter?: TableLazyLoadEvent; + selectedRole: FindRoleResDto | undefined; + privileges: FindPrivilegeResDto[]; + roleIsLoading: boolean; + cdIsLoading: boolean; + privilegesAreLoading: boolean; +} +type State = ManageRoleComponentState; + +@Component({ + selector: 'app-utenti', + imports: [ + CommonModule, + TableModule, + InputTextModule, + SkeletonModule, + ButtonModule, + TooltipModule, + FormsModule, + ReactiveFormsModule, + MultiSelectModule, + ConfirmDialogModule, + IconFieldModule, + InputIconModule, + MessagesModule, + TagModule, + ConfirmPopupModule, + ToastModule, + ], + providers: [RxState, DialogService, ConfirmationService], + templateUrl: './ruoli.component.html', + styleUrl: './ruoli.component.scss', +}) +export class RuoliComponent implements OnInit { + //private state = inject(RxState); + + //model$ = this.state.select(); + + model$: Observable; + + showTransitionOptions = '500ms'; + + private childDialogRef: DynamicDialogRef | undefined; + + defaultRoles: FindRoleResDto[] = [ + { description: '', id: 0, standardCode: '', standardName: '' }, + { description: '', id: 0, standardCode: '', standardName: '' }, + { description: '', id: 0, standardCode: '', standardName: '' }, + { description: '', id: 0, standardCode: '', standardName: '' }, + { description: '', id: 0, standardCode: '', standardName: '' }, + ]; + + cols: TableColumn[] = [ + { + header: 'Codice', + field: 'standardCode', + sortField: 'standardCode', + }, + { + header: 'Nome', + field: 'standardName', + sortField: 'standardName', + }, + { + header: 'Descrizione', + field: 'description', + sortField: 'description', + }, + + { + header: 'Azioni', + field: 'azioni', + }, + ]; + + defaultSort = [{ field: 'standardCode', order: 1 }]; + + @ViewChild('rolesTable') rolesTable!: Table; + + messages: ToastMessageOptions[] = []; + + constructor( + private ruoliService: RuoliService, + private readonly dialogService: DialogService, + private confirmationService: ConfirmationService, + private state: RxState, + ) { + this.model$ = this.state.select(); + this.state.set({ + roles: [], + rolesAreLoading: false, + rolesTotalCount: 0, + selectedRole: undefined, + roleIsLoading: false, + cdIsLoading: false, + privilegesAreLoading: false, + }); + } + + ngOnInit() { + this.getRoles(); + } + + getRoles() { + const roles$ = this.ruoliService.getRoles().pipe( + map((res) => ({ roles: res, rolesTotalCount: res.length })), + catchError(() => { + this.messages = [ + { + severity: 'error', + life: 5000, + summary: 'Attenzione!', + detail: + 'Impossibile recuperare la lista di ruoli al momento, riprova più tardi', + }, + ]; + return of({}); + }), + startWith({ rolesAreLoading: true }), + endWith({ rolesAreLoading: false }), + ); + this.state.connect(roles$); + } + + openPrivilegiDialog(idRuolo: number) { + const fetchPrivilegiById$ = of(EMPTY).pipe( + switchMap(() => + this.ruoliService.getPrivilegesById(idRuolo).pipe( + catchError(() => of(null)), + tap((res) => { + if (!res) return; + this.childDialogRef = this.dialogService.open( + ManageRolesDialogComponent, + { + header: 'Modifica privilegi del ruolo', + modal: true, + closable: true, + focusOnShow: false, + style: { width: '90vw', maxWidth: '1500px', minWidth: '400px' }, + data: { + privileges: res, + roleId: idRuolo, + dialogComponentName: ManageRolesDialogComponent.name, + } satisfies DynamicDialogData, + }, + ); + + this.childDialogRef?.onClose.subscribe((result: string) => { + if (!result) return; + this.messages = [ + { + severity: 'success', + summary: 'Operazione completata', + life: 5000, + detail: 'Privilegi del ruolo modificato con successo', + }, + ]; + this.getRoles(); + }); + }), + map(() => ({})), + startWith({ privilegesAreLoading: true }), + endWith({ privilegesAreLoading: false }), + ), + ), + ); + this.state.connect(fetchPrivilegiById$); + } +} diff --git a/src/app/modules/main/ruoli/ruoli.routes.ts b/src/app/modules/main/ruoli/ruoli.routes.ts new file mode 100644 index 0000000..ac5d91b --- /dev/null +++ b/src/app/modules/main/ruoli/ruoli.routes.ts @@ -0,0 +1,17 @@ +import { ExtraOptions, Routes } from '@angular/router'; +import { RuoliComponent } from './ruoli.component'; + +export const routerOptions: ExtraOptions = { + anchorScrolling: 'enabled', + scrollPositionRestoration: 'enabled', + paramsInheritanceStrategy: 'always', +}; + +export const ruoliRoutes: Routes = [ + { + path: '', + component: RuoliComponent, + children: [], + data: { expectedPrivileges: ['ROLE_MANAGER'] }, + }, +]; diff --git a/src/app/modules/main/ruoli/ruoli.service.ts b/src/app/modules/main/ruoli/ruoli.service.ts new file mode 100644 index 0000000..1d86992 --- /dev/null +++ b/src/app/modules/main/ruoli/ruoli.service.ts @@ -0,0 +1,108 @@ +import { HttpErrorResponse } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { FindActionResDto } from '@api/models'; +import { RolesApiClient } from '@api/services'; +import { catchError, throwError } from 'rxjs'; + +export type PASSWORD_MATCH_TYPE = 'MIN_8' | 'a-z' | 'A-Z'; + +@Injectable({ + providedIn: 'root', +}) +export class RuoliService { + constructor(private rolesApiClient: RolesApiClient) {} + + getRoles() { + const params = { + body: {}, + }; + return this.rolesApiClient.rolesControllerFetchRoles(params).pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + getAvailablePrivileges(id: number) { + const params = { + id: id, + }; + return this.rolesApiClient + .rolesControllerGetAvailableRolePrivileges(params) + .pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + setPrivilegesForRole(roleId: number, privilegesIds: FindActionResDto[]) { + const params = { + id: roleId, + body: { + actionIds: privilegesIds.map((x) => x.id), + }, + }; + return this.rolesApiClient.rolesControllerSetRolePrivileges(params).pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + getPrivilegesById(idRuolo: number) { + const params = { + id: idRuolo, + }; + return this.rolesApiClient.rolesControllerGetRolePrivileges(params).pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + changePrivilegeFlagEnabled(privilegeId: number, value: boolean) { + const params = { + id: privilegeId, + body: { + flagEnabled: value, + }, + }; + return this.rolesApiClient + .rolesControllerSetPrivilegeFlagEnabled(params) + .pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + changePrivilegeReadOnlyFlag(privilegeId: number, value: boolean) { + const params = { + id: privilegeId, + body: { + flagReadOnly: value, + }, + }; + return this.rolesApiClient + .rolesControllerSetPrivilegeFlagReadonly(params) + .pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + deletePrivilege(privilegeId: number) { + const param = { + id: privilegeId, + }; + return this.rolesApiClient + .rolesControllerDeleteRolePrivilege$Response(param) + .pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } +} diff --git a/src/app/modules/main/strutture/dto/strutture.dto.ts b/src/app/modules/main/strutture/dto/strutture.dto.ts new file mode 100644 index 0000000..50a3893 --- /dev/null +++ b/src/app/modules/main/strutture/dto/strutture.dto.ts @@ -0,0 +1,6 @@ +export interface FolderFile { + name: string; + ext: string; + fileSizeInBytes: number; + lastModified: Date; +} diff --git a/src/app/modules/main/strutture/manage-strutture-dialog/manage-strutture-dialog.component.html b/src/app/modules/main/strutture/manage-strutture-dialog/manage-strutture-dialog.component.html new file mode 100644 index 0000000..011661c --- /dev/null +++ b/src/app/modules/main/strutture/manage-strutture-dialog/manage-strutture-dialog.component.html @@ -0,0 +1,442 @@ +@let vm = (model$ | async)!; +
+
+ + +
+ +
+ + +
+ +
+ + + +
+ +
+ {{ struttura.nome + }}{{ + struttura.partitaIva ? ' (' + struttura.partitaIva + ')' : '' + }} + @if (struttura.codiceLuogo?.codiceStato) { + + {{ + struttura.codiceLuogo?.codiceStato === 'ITA' + ? 'Comune' + : ('Stato estero' | titlecase) + }}{{ + struttura.codiceLuogo?.codiceStato === 'ITA' + ? ': Italia → ' + + struttura.codiceLuogo?.regione + + ' + → ' + + struttura.codiceLuogo?.provincia + + ' → ' + + struttura.codiceLuogo?.comune + : '' + }} + } +
+
+
+
+
+ +
+ + + +
+ +
+ {{ struttura.comune + }}{{ + struttura.codiceStato === 'ITA' + ? ' (' + struttura.siglaProvincia + ')' + : '' + }} + + {{ + struttura.codiceStato === 'ITA' + ? 'Comune' + : ('Stato estero' | titlecase) + }}{{ + struttura.codiceStato === 'ITA' + ? ': Italia → ' + + struttura.regione + + ' + → ' + + struttura.provincia + + ' → ' + + struttura.comune + : '' + }} +
+
+
+
+
+ + + +
+ + +
+ +
+ + + +
+
+ + + +
+ +
+ + +
+ +
+ + + +

+
+
+ +
+ + + +

+
+
+
+ + + +

+
+
+ +
+ + + +
+
+ + + + + + diff --git a/src/app/modules/main/strutture/manage-strutture-dialog/manage-strutture-dialog.component.scss b/src/app/modules/main/strutture/manage-strutture-dialog/manage-strutture-dialog.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/modules/main/strutture/manage-strutture-dialog/manage-strutture-dialog.component.ts b/src/app/modules/main/strutture/manage-strutture-dialog/manage-strutture-dialog.component.ts new file mode 100644 index 0000000..08ad984 --- /dev/null +++ b/src/app/modules/main/strutture/manage-strutture-dialog/manage-strutture-dialog.component.ts @@ -0,0 +1,412 @@ +import { + AutocompleteRes, + GooglePlaceAutocompleteComponent, +} from '../../../shared/components/google-place-autocomplete/google-place-autocomplete.component'; + +import { CommonModule } from '@angular/common'; +import { Component, Optional } from '@angular/core'; +import { + FormControl, + FormGroup, + FormsModule, + ReactiveFormsModule, + Validators, +} from '@angular/forms'; +import { + LuogoRes, + Stipulatore, + Struttura, + StrutturaExcerptRes, + StrutturaMadre, + TipoGestione, + TipoStruttura, +} from '@api/models'; +import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; +import { faHospital } from '@fortawesome/free-regular-svg-icons'; +import { faCity, faGlobeEurope } from '@fortawesome/free-solid-svg-icons'; +import { RxState } from '@rx-angular/state'; +import { ToastMessageOptions } from 'primeng/api'; +import { AutoCompleteModule } from 'primeng/autocomplete'; +import { ButtonModule } from 'primeng/button'; +import { CalendarModule } from 'primeng/calendar'; +import { DatePickerModule } from 'primeng/datepicker'; +import { DividerModule } from 'primeng/divider'; +import { DropdownModule } from 'primeng/dropdown'; +import { + DialogService, + DynamicDialogConfig, + DynamicDialogRef, +} from 'primeng/dynamicdialog'; +import { InputSwitchModule } from 'primeng/inputswitch'; +import { InputTextModule } from 'primeng/inputtext'; +import { MessagesModule } from 'primeng/messages'; +import { MultiSelectModule } from 'primeng/multiselect'; +import { RatingModule } from 'primeng/rating'; +import { SelectModule } from 'primeng/select'; +import { SkeletonModule } from 'primeng/skeleton'; +import { TextareaModule } from 'primeng/textarea'; +import { combineLatest, EMPTY, Observable, of, Subject } from 'rxjs'; +import { + catchError, + endWith, + map, + startWith, + switchMap, + takeUntil, + tap, +} from 'rxjs/operators'; +import { handleDynamicDialog } from '../../../shared/utils/dynamic-dialog-utils'; +import { StruttureService } from '../strutture.service'; + +const struttureFormGroupFunc = (strutture?: Struttura) => ({ + nome: new FormControl(strutture?.nome ?? null, { + validators: [Validators.required], + }), + + valutazione: new FormControl(strutture?.stelline ?? null), + partitaIva: new FormControl(strutture?.partitaIva ?? null), + + latitudine: new FormControl(strutture?.latitudine ?? null), + longitudine: new FormControl(strutture?.longitudine ?? null), + + citta: new FormControl(strutture?.codiceLuogo ?? null, { + validators: [Validators.required], + }), + indirizzo: new FormControl(strutture?.indirizzo ?? null), + + civico: new FormControl({ + value: strutture?.numeroCivico ?? null, + disabled: false, + }), + + cap: new FormControl( + { value: strutture?.cap ?? null, disabled: false }, + { + validators: [Validators.pattern('^(|[0-9]{5})$')], + }, + ), + + strutturaMadre: new FormControl( + strutture?.strutturaMadre && strutture?.strutturaMadre.id > 0 + ? strutture.strutturaMadre + : null, + ), + tipoGestione: new FormControl( + strutture?.tipoGestione.id ?? null, + { + validators: [Validators.required], + }, + ), + tipoStruttura: new FormControl( + strutture?.struttureTipiStrutture?.map((s) => s.tipo.id) ?? [], + { validators: [Validators.required] }, + ), + stipulatori: new FormControl( + strutture?.visibilitaStrutture?.map((s) => s.idStipulatore) ?? [], + { validators: [Validators.required] }, + ), +}); +export type StruttureForm = FormGroup< + ReturnType +>; +export type AccountFormValue = StruttureForm['value']; + +export interface ManageStruttureDialogComponentState { + isSaving: boolean; + isLoading: boolean; + struttureFormSubmitted: boolean; + selectedStruttura: Struttura; + tipoStrutture: TipoStruttura[]; + tipoStruttureIsLoading: boolean; + tipoGestione: TipoGestione[]; + tipoGestioneIsLoading: boolean; + filteredCities: LuogoRes[]; + filteredStrutturaMadre: StrutturaExcerptRes[]; + stipulatori: Stipulatore[]; + stipulatoriIsLoading: boolean; +} + +type State = ManageStruttureDialogComponentState; + +@Component({ + imports: [ + CommonModule, + SkeletonModule, + InputSwitchModule, + FormsModule, + ButtonModule, + DividerModule, + DropdownModule, + ReactiveFormsModule, + InputTextModule, + CalendarModule, + MultiSelectModule, + SelectModule, + DatePickerModule, + MessagesModule, + AutoCompleteModule, + FontAwesomeModule, + RatingModule, + GooglePlaceAutocompleteComponent, + TextareaModule, + ], + providers: [RxState, DialogService], + selector: 'manage-strutture-dialog', + templateUrl: 'manage-strutture-dialog.component.html', + styleUrl: './manage-strutture-dialog.component.scss', +}) +export class ManageStruttureDialogComponent { + model$: Observable; + + struttureForm = new FormGroup(struttureFormGroupFunc(undefined)); + + showTransitionOptions = '500ms'; + + messages: ToastMessageOptions[] = []; + + setValueEvent: Subject = new Subject(); + private destroy$ = new Subject(); + autocompleteDisabled = true; + + faCity = faCity; + faGlobeEurope = faGlobeEurope; + faHospital = faHospital; + + constructor( + @Optional() readonly dialogRef: DynamicDialogRef, + @Optional() readonly dialogConfig: DynamicDialogConfig, + private struttureService: StruttureService, + public state: RxState, + ) { + this.model$ = this.state.select(); + this.state.set({ + isSaving: false, + isLoading: false, + struttureFormSubmitted: false, + tipoStruttureIsLoading: false, + tipoGestioneIsLoading: false, + stipulatori: [], + stipulatoriIsLoading: false, + }); + + const fetchStipulatori$ = of(EMPTY).pipe( + switchMap(() => + this.struttureService.getStipulatori().pipe( + map((res) => ({ + stipulatori: res, + })), + startWith({ stipulatoriIsLoading: true }), + endWith({ stipulatoriIsLoading: false }), + ), + ), + ); + this.state.connect(fetchStipulatori$); + + handleDynamicDialog.bind(this)(); + + const patchForm$ = combineLatest([ + this.state.select('selectedStruttura'), + ]).pipe( + switchMap(([struttura]) => { + return of(struttura).pipe( + tap(() => { + this.struttureForm.patchValue( + new FormGroup(struttureFormGroupFunc(struttura)).value, + ); + if (struttura.codiceLuogo) { + this.autocompleteDisabled = false; + setTimeout(() => { + this.setValueEvent.next(struttura.indirizzo); + }, 10); + } + }), + map((struttura) => ({ selectedStruttura: struttura })), + startWith({ isLoading: true }), + endWith({ isLoading: false }), + ); + }), + ); + + this.state.connect(patchForm$); + this.getTipiGestione(); + this.getTipiStrutture(); + + this.struttureForm + .get('citta') + ?.valueChanges.pipe( + tap((value) => this.handleCittaChange(value)), + takeUntil(this.destroy$), + ) + .subscribe(); + } + + private handleCittaChange(value: any) { + const isEmpty = !value; + this.autocompleteDisabled = isEmpty; + this.setValueEvent.next(null); + + [ + this.struttureForm.get('indirizzo'), + this.struttureForm.get('cap'), + this.struttureForm.get('civico'), + ].forEach((field) => { + field?.reset(); + isEmpty ? field?.disable() : field?.enable(); + }); + } + + setDetailFromGoogle(event: AutocompleteRes) { + [ + this.struttureForm.get('indirizzo'), + this.struttureForm.get('cap'), + this.struttureForm.get('civico'), + ].forEach((field) => { + field?.reset(); + field?.enable(); + }); + + const { indirizzo, cap, civico, valutazione, latitudine, longitudine } = + event; + this.struttureForm.patchValue({ + indirizzo, + cap, + civico, + valutazione, + latitudine, + longitudine, + }); + } + + getTipiStrutture() { + const tipiStrutture$ = this.struttureService.getTipoStrutture().pipe( + map((res) => ({ tipoStrutture: res.rows })), + catchError((err) => { + this.messages = [ + { + severity: 'error', + life: 5000, + summary: 'Attenzione!', + detail: + 'Impossibile recuperare i tipi struttura al momento, riprova più tardi', + }, + ]; + return of({}); + }), + startWith({ tipoStruttureIsLoading: true }), + endWith({ tipoStruttureIsLoading: false }), + ); + this.state.connect(tipiStrutture$); + } + + fetchCity( + event: { originalEvent: Event; query: string }, + flagAttivo?: number, + ) { + const fetchCities$ = this.struttureService + .getLuoghi(event.query, flagAttivo) + .pipe( + catchError((err) => { + return of(null); + }), + map((res) => ({ filteredCities: res?.rows })), + ); + this.state.connect(fetchCities$); + } + + fetchStrutturaMadre( + event: { originalEvent: Event; query: string }, + flagOnlyStrutturaMadre?: number, + ) { + const fetchStrutturaMadre$ = this.struttureService + .getStrutturaMadre(event.query, flagOnlyStrutturaMadre) + .pipe( + catchError((err) => { + return of(null); + }), + map((res) => ({ filteredStrutturaMadre: res?.rows })), + ); + this.state.connect(fetchStrutturaMadre$); + } + + getTipiGestione() { + const tipiGestione$ = this.struttureService.getTipoGestione().pipe( + map((res) => ({ tipoGestione: res.rows })), + catchError((err) => { + this.messages = [ + { + severity: 'error', + life: 5000, + summary: 'Attenzione!', + detail: + 'Impossibile recuperare i tipi gestione al momento, riprova più tardi', + }, + ]; + return of({}); + }), + startWith({ tipoGestioneIsLoading: true }), + endWith({ tipoGestioneIsLoading: false }), + ); + this.state.connect(tipiGestione$); + } + + submitStruttureForm() { + this.state.set({ + struttureFormSubmitted: true, + }); + if (this.struttureForm.invalid) return; + const _struttureForm = this.struttureForm.getRawValue(); + console.log(_struttureForm.stipulatori); + + const baseParams = { + nome: _struttureForm.nome!, + idTipoGestione: _struttureForm.tipoGestione ?? 0, + stelline: _struttureForm.valutazione ?? 0, + codiceLuogo: _struttureForm.citta!.codice ?? '', + idStrutturaMadre: _struttureForm.strutturaMadre?.id, + partitaIva: _struttureForm.partitaIva, + indirizzo: _struttureForm.indirizzo, + numeroCivico: _struttureForm.civico, + cap: _struttureForm.cap, + idTipiStruttura: Array.isArray(_struttureForm.tipoStruttura) + ? _struttureForm.tipoStruttura + : [], + }; + + const createParams = { + ...baseParams, + idStipulatori: _struttureForm.stipulatori ?? [], + }; + const saveAddStrutture$ = ( + !this.state.get('selectedStruttura') + ? this.struttureService.createStruttura(createParams) + : this.struttureService.editStruttura( + this.state.get('selectedStruttura').id, + baseParams, + ) + ).pipe( + catchError((err) => { + return of(null); + }), + tap((res) => { + if (!res) return; + this.state.set(() => ({ + struttureFormSubmitted: false, + })); + this.dialogRef.close(res); + }), + map(() => ({})), + startWith({ isSaving: true }), + endWith({ isSaving: false }), + ); + this.state.connect(saveAddStrutture$); + } + + cancelForm() { + this.dialogRef?.close(); + } + + ngOnDestroy() { + this.destroy$.next(); + this.destroy$.complete(); + } +} diff --git a/src/app/modules/main/strutture/manage-visibilita-dialog /manage-visibilita-dialog.component.html b/src/app/modules/main/strutture/manage-visibilita-dialog /manage-visibilita-dialog.component.html new file mode 100644 index 0000000..5760aaf --- /dev/null +++ b/src/app/modules/main/strutture/manage-visibilita-dialog /manage-visibilita-dialog.component.html @@ -0,0 +1,79 @@ +@let vm = (model$ | async)!; + + + + + + Stipulatore + Proprietario + + + + + + + + + {{ stipulatore.nome }} + + + + + + + + + +
+ + + +
+ + +
+
+ + + + + + diff --git a/src/app/modules/main/strutture/manage-visibilita-dialog /manage-visibilita-dialog.component.scss b/src/app/modules/main/strutture/manage-visibilita-dialog /manage-visibilita-dialog.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/modules/main/strutture/manage-visibilita-dialog /manage-visibilita-dialog.component.ts b/src/app/modules/main/strutture/manage-visibilita-dialog /manage-visibilita-dialog.component.ts new file mode 100644 index 0000000..8961004 --- /dev/null +++ b/src/app/modules/main/strutture/manage-visibilita-dialog /manage-visibilita-dialog.component.ts @@ -0,0 +1,185 @@ +import { CommonModule } from '@angular/common'; +import { Component, Optional } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { Stipulatore, Struttura } from '@api/models'; +import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; +import { RxState } from '@rx-angular/state'; +import { ToastMessageOptions } from 'primeng/api'; +import { AutoCompleteModule } from 'primeng/autocomplete'; +import { ButtonModule } from 'primeng/button'; +import { CalendarModule } from 'primeng/calendar'; +import { DatePickerModule } from 'primeng/datepicker'; +import { DividerModule } from 'primeng/divider'; +import { DropdownModule } from 'primeng/dropdown'; +import { + DialogService, + DynamicDialogConfig, + DynamicDialogRef, +} from 'primeng/dynamicdialog'; +import { InputSwitchModule } from 'primeng/inputswitch'; +import { InputTextModule } from 'primeng/inputtext'; +import { MessagesModule } from 'primeng/messages'; +import { MultiSelectModule } from 'primeng/multiselect'; +import { RatingModule } from 'primeng/rating'; +import { SelectModule } from 'primeng/select'; +import { SkeletonModule } from 'primeng/skeleton'; +import { TableModule } from 'primeng/table'; +import { TextareaModule } from 'primeng/textarea'; +import { ToggleSwitch } from 'primeng/toggleswitch'; +import { EMPTY, Observable, of, Subject } from 'rxjs'; +import { + catchError, + endWith, + map, + startWith, + switchMap, + tap, +} from 'rxjs/operators'; +import { handleDynamicDialog } from '../../../shared/utils/dynamic-dialog-utils'; +import { StruttureService } from '../strutture.service'; + +export interface StipulatoreConFlag extends Stipulatore { + flagProprietario: boolean; +} +export interface GestioneVisibilitaDialogComponentState { + isSaving: boolean; + isLoading: boolean; + selectedStruttura: Struttura; + stipulatoriAreLoading: boolean; + stipulatori: Stipulatore[]; + selectedStipulatori: StipulatoreConFlag[]; +} + +type State = GestioneVisibilitaDialogComponentState; + +@Component({ + imports: [ + CommonModule, + SkeletonModule, + InputSwitchModule, + FormsModule, + ButtonModule, + DividerModule, + DropdownModule, + ReactiveFormsModule, + InputTextModule, + CalendarModule, + MultiSelectModule, + SelectModule, + DatePickerModule, + MessagesModule, + AutoCompleteModule, + FontAwesomeModule, + RatingModule, + TextareaModule, + TableModule, + ToggleSwitch, + ], + providers: [RxState, DialogService], + selector: 'manage-visibilita-dialog', + templateUrl: 'manage-visibilita-dialog.component.html', + styleUrl: './manage-visibilita-dialog.component.scss', +}) +export class GestioneVisibilitaDialogComponent { + model$: Observable; + + showTransitionOptions = '500ms'; + + messages: ToastMessageOptions[] = []; + + setValueEvent: Subject = new Subject(); + private destroy$ = new Subject(); + + constructor( + @Optional() readonly dialogRef: DynamicDialogRef, + @Optional() readonly dialogConfig: DynamicDialogConfig, + private struttureService: StruttureService, + public state: RxState, + ) { + this.model$ = this.state.select(); + this.state.set({ + isSaving: false, + isLoading: false, + stipulatori: [], + stipulatoriAreLoading: false, + }); + + const fetchStipulatori$ = of(EMPTY).pipe( + switchMap(() => + this.struttureService.getAllStipulatori().pipe( + map((res) => { + const struttura = this.state.get()?.selectedStruttura; + const visibilita = struttura?.visibilitaStrutture ?? []; + + const stipulatoriConFlag = res.rows.map((stip) => { + const match = visibilita.find((v) => v.idStipulatore === stip.id); + return { + ...stip, + flagProprietario: match?.flagProprietario ?? false, + }; + }); + + const selectedStipulatori = stipulatoriConFlag.filter((stip) => + visibilita.some((v) => v.idStipulatore === stip.id), + ); + + return { + stipulatori: stipulatoriConFlag, + selectedStipulatori, + }; + }), + catchError(() => of({ stipulatori: [], selectedStipulatori: [] })), + startWith({ stipulatoriAreLoading: true }), + endWith({ stipulatoriAreLoading: false }), + ), + ), + ); + + this.state.connect(fetchStipulatori$); + + handleDynamicDialog.bind(this)(); + } + + isStipulatoreSelezionato(stipulatoreId: number): boolean { + const selected = this.state.get('selectedStipulatori') ?? []; + return selected.some((s) => s.id === stipulatoreId); + } + + cancelForm() { + this.dialogRef?.close(); + } + + submitStruttureForm() { + const strutturaId = this.state.get('selectedStruttura')?.id; + if (!strutturaId) return; + + const selectedStipulatori = this.state.get('selectedStipulatori') ?? []; + + const visibilitaStrutture = selectedStipulatori.map((stip) => ({ + idStipulatore: stip.id, + flagProprietario: stip.flagProprietario ?? false, + })); + + const body = { visibilitaStrutture }; + + const editVisibilitaStrutture$ = this.struttureService + .editVisibilita(strutturaId, body) + .pipe( + catchError(() => of(null)), + tap((res) => { + if (!res) return; + this.dialogRef.close(res); + }), + map(() => ({})), + startWith({ isSaving: true }), + endWith({ isSaving: false }), + ); + + this.state.connect(editVisibilitaStrutture$); + } + + ngOnDestroy() { + this.destroy$.next(); + this.destroy$.complete(); + } +} diff --git a/src/app/modules/main/strutture/strutture.component.html b/src/app/modules/main/strutture/strutture.component.html new file mode 100644 index 0000000..9f0b510 --- /dev/null +++ b/src/app/modules/main/strutture/strutture.component.html @@ -0,0 +1,1304 @@ +@let vm = (model$ | async)!; + +
+
+
+ Filtri +
+
+ +
+
+ + +
+ +
+ + + + +
+ +
+ + + + +
+ +
+ + + + +
+ @if (luogo.tipo === 'comune') { + +
+ {{ luogo.comune + }}{{ + luogo.codiceStato === 'ITA' + ? ' (' + luogo.siglaProvincia + ')' + : '' + }} + + {{ + luogo.codiceStato === 'ITA' + ? 'Comune' + : ('Stato estero' | titlecase) + }}{{ + luogo.codiceStato === 'ITA' + ? ': Italia → ' + + luogo.regione + + ' + → ' + + luogo.provincia + + ' → ' + + luogo.comune + : '' + }} +
+ } @else if (luogo.tipo === 'stato') { + +
+ {{ luogo.stato }} + + {{ + luogo.codiceStato === 'ITA' + ? ('Stato' | titlecase) + : ('Stato estero' | titlecase) + }} +
+ } @else if (luogo.tipo === 'regione') { + +
+ {{ luogo.regione }} + + Regione + {{ ': Italia → ' + luogo.regione }} +
+ } @else if (luogo.tipo === 'provincia') { + +
+ {{ luogo.provincia }} + + Provincia + {{ + ': Italia → ' + luogo.regione + ' → ' + luogo.provincia + }} +
+ } +
+
+
+
+ +
+ + + +
+ +
+ + + +
+ +
+ +
+ + +
+
+
+ +
+ + +
+
+ +
+ +
+ +
+
+ + + +
+ Strutture +
+ + +
+
+
+ + + + +
+
+ {{ col.header }} + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + @if (vm.struttureAreLoading) { + + } + + + + {{ row.nome }} + + + {{ row.partitaIva }} + + + + {{ getFormattedAddress(row) }} + + + + {{ row.strutturaMadre.nome }} + + + + {{ row.tipoGestione.descrizione }} + + + + {{ row.descrizioniTipiStruttura }} + + + + +
+ + + + + +
+ +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @if (vm.modalMode === 'show' && !vm.convenzioniAreLoading) { + + + + +
+ +
+
+ + + + Condizioni generali + + + + Data d'inizio + + + + Data di fine + + + + Stipulata da + + + + Convenzione diretta + + + + Convenzione indiretta + + + + Convenzione Ticket + + + + Sospesa + + + + Scelta medico + + + + Tariffario casa madre + + + Azioni + + + + + {{ convenzione.condizioniGeneraliConvenzione }} + {{ convenzione.dataInizio | date: 'dd/MM/yyyy' }} + {{ convenzione.dataFine | date: 'dd/MM/yyyy' }} + {{ convenzione?.stipulatore.nome }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + Nessuna convenzione per la struttura selezionata, clicca su + 'Aggiungi convenzione' per crearne una. + + + +
+ } + @if (vm.convenzioniAreLoading) { + + + + } + @if (vm.modalMode === 'edit') { +
+
+ + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + +

+
+ +
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+
+ } + @if (vm.modalMode === 'allegati') { + + +
+
+ +
+
+
+ + + + {{ col.header }} + + + + + + + + + + + + + {{ row.name }} + + + {{ row.lastModified | date: 'medium' }} + + + {{ row.fileSizeInBytes | filesize }} + + + + + + + + + + + Nessun allegato da visualizzare + + + +
+ } + +
+ + @if (vm.modalMode === 'edit') { + + } +
+
+ + +
+ @if (vm.selectedStruttura?.nome) { +
+ +
+ } + @if (vm.selectedStruttura?.partitaIva) { +
+ +
+ } + @if (vm.selectedStruttura?.indirizzo) { +
+ +
+ } + @if (vm.selectedStruttura?.numeroCivico) { +
+ +
+ } + @if (vm.selectedStruttura?.cap) { +
+ +
+ } + @if (vm.selectedStruttura?.codiceLuogo?.comune) { +
+ +
+ } + @if (vm.selectedStruttura?.codiceLuogo?.provincia) { +
+ +
+ } + @if (vm.selectedStruttura?.codiceLuogo?.regione) { +
+ +
+ } + @if (vm.selectedStruttura?.codiceLuogo?.stato) { +
+ +
+ } + @if (vm.selectedStruttura?.strutturaMadre?.nome) { +
+ +
+ } + @if (vm.selectedStruttura?.strutturaMadre?.partitaIva) { +
+ +
+ } + @if (vm.selectedStruttura?.tipoGestione?.descrizione) { +
+ +
+ } + +
+
+ +
+
+ + + + + + diff --git a/src/app/modules/main/strutture/strutture.component.scss b/src/app/modules/main/strutture/strutture.component.scss new file mode 100644 index 0000000..420e926 --- /dev/null +++ b/src/app/modules/main/strutture/strutture.component.scss @@ -0,0 +1,7 @@ +// .active-filter { +// background-color: black !important; +// } +// .active-filter { +// border: 1px solid #173775 !important; +// border-radius: 50px; +// } diff --git a/src/app/modules/main/strutture/strutture.component.ts b/src/app/modules/main/strutture/strutture.component.ts new file mode 100644 index 0000000..000a963 --- /dev/null +++ b/src/app/modules/main/strutture/strutture.component.ts @@ -0,0 +1,1068 @@ +/* eslint-disable @typescript-eslint/no-unsafe-return */ +import { StrutturaExcerptRes } from './../../../../api/models/struttura-excerpt-res'; + +import { CommonModule } from '@angular/common'; +import { Component, ViewChild } from '@angular/core'; +import { + AbstractControl, + FormControl, + FormGroup, + FormsModule, + ReactiveFormsModule, + ValidationErrors, + Validators, +} from '@angular/forms'; +import { StatoConvenzioniEnum } from '@core/common/enum/convenzioni.enum'; +import { FileSizePipe } from '@core/pipes'; +import { UtilsService } from '@core/services/utils.service'; +import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; +import { faHospital } from '@fortawesome/free-regular-svg-icons'; +import { + faCity, + faGlobeEurope, + faMapLocationDot, +} from '@fortawesome/free-solid-svg-icons'; +import { RxState } from '@rx-angular/state'; +import dayjs from 'dayjs'; +import saveAs from 'file-saver'; +import { ConfirmationService, ToastMessageOptions } from 'primeng/api'; +import { AutoCompleteModule } from 'primeng/autocomplete'; +import { ButtonModule } from 'primeng/button'; +import { CheckboxModule } from 'primeng/checkbox'; +import { ConfirmDialogModule } from 'primeng/confirmdialog'; +import { ConfirmPopupModule } from 'primeng/confirmpopup'; +import { DatePickerModule } from 'primeng/datepicker'; +import { DialogModule } from 'primeng/dialog'; +import { DividerModule } from 'primeng/divider'; +import { DropdownModule } from 'primeng/dropdown'; +import { DialogService, DynamicDialogRef } from 'primeng/dynamicdialog'; +import { IconFieldModule } from 'primeng/iconfield'; +import { InputIconModule } from 'primeng/inputicon'; +import { InputTextModule } from 'primeng/inputtext'; +import { MessagesModule } from 'primeng/messages'; +import { MultiSelectModule } from 'primeng/multiselect'; +import { RatingModule } from 'primeng/rating'; +import { SelectModule } from 'primeng/select'; +import { SkeletonModule } from 'primeng/skeleton'; +import { Table, TableModule } from 'primeng/table'; +import { TagModule } from 'primeng/tag'; +import { TextareaModule } from 'primeng/textarea'; +import { ToastModule } from 'primeng/toast'; +import { TooltipModule } from 'primeng/tooltip'; +import { + BehaviorSubject, + catchError, + EMPTY, + endWith, + map, + Observable, + of, + startWith, + switchMap, + tap, +} from 'rxjs'; +import { + AccountResDto, + ConvenzioniStrutture, + DownloadFile, + FileDetails, + FindStrutture, + GenericMessageDto, + LuogoRes, + Stipulatore, + Struttura, + StrutturaMadre, + TipoGestione, + TipoStruttura, +} from '../../../../api/models'; +import { AuthService, TableColumn } from '../../../core'; +import { MyDirectiveModule } from '../../../core/directives/my-directive.module'; +import { UploadDocumentazioneComponent } from '../../shared/components/upload-documentazione-cf/upload-documentazione.component'; +import { DynamicDialogData } from '../../shared/utils/dynamic-dialog-utils'; +import { FolderFile } from './dto/strutture.dto'; +import { + ManageStruttureDialogComponent, + ManageStruttureDialogComponentState, +} from './manage-strutture-dialog/manage-strutture-dialog.component'; +import { + GestioneVisibilitaDialogComponent, + GestioneVisibilitaDialogComponentState, +} from './manage-visibilita-dialog /manage-visibilita-dialog.component'; +import { StruttureService } from './strutture.service'; + +const cercaStruttureFormGroupFunc = () => { + return new FormGroup( + { + nome: new FormControl(null), + regione: new FormControl(null), + provincia: new FormControl(null), + localita: new FormControl(null), + tipologiaStruttura: new FormControl(null), + dataInizioConvenzione: new FormControl(null), + dataFineConvenzione: new FormControl(null), + statoConvenzione: new FormControl( + StatoConvenzioniEnum.ATTIVO, + { + nonNullable: true, + }, + ), + flagOnlyStrutturaMadre: new FormControl(false), + luogo: new FormControl(null), + }, + [atLeastOneFilterRequired], + ); +}; + +export type cercaStruttureForm = ReturnType; +export type cercaStruttureFormValue = cercaStruttureForm['value']; + +const convenzioneFormGroupFunc = (convenzione?: ConvenzioniStrutture) => ({ + condizioniGeneraliConvenzione: new FormControl( + convenzione ? convenzione.condizioniGeneraliConvenzione : null, + ), + dataInizio: new FormControl( + convenzione ? new Date(convenzione.dataInizio) : null, + { + validators: [Validators.required], + }, + ), + dataFine: new FormControl( + convenzione ? new Date(convenzione.dataFine) : null, + ), + stipulata: new FormControl( + convenzione ? convenzione.stipulatore.id : 0, + { + validators: [Validators.required], + }, + ), + flagConvenzioneDiretta: new FormControl( + convenzione ? convenzione.flagConvenzioneDiretta : false, + ), + flagConvenzioneIndiretta: new FormControl( + convenzione ? convenzione.flagConvenzioneIndiretta : false, + ), + flagConvenzioneTicket: new FormControl( + convenzione ? convenzione.flagConvenzioneTicket : false, + ), + flagSospesa: new FormControl( + convenzione ? convenzione.flagSospesa : false, + ), + flagSceltaMedico: new FormControl( + convenzione ? convenzione.flagSceltaMedico : false, + ), + flagUsaTariffarioCasaMadre: new FormControl( + convenzione ? convenzione.flagUsaTariffarioCasaMadre : false, + ), +}); +export type ConvenzioneForm = FormGroup< + ReturnType +>; +export type ConvenzioneFormValue = ConvenzioneForm['value']; + +export interface ManageStruttureComponentState { + strutture: StrutturaExcerptRes[]; + struttureAreLoading: boolean; + struttureTotalCount: number; + selectedStruttura: Struttura; + cdIsLoading: boolean; + convenzioniAreLoading: boolean; + showConvenzioniDialog: boolean; + convenzioni: ConvenzioniStrutture[]; + modalMode: string; + modalName: string; + selectedConvenzione: ConvenzioniStrutture; + convenzioneFormSubmitted: boolean; + cercaStruttureFormSubmitted: boolean; + showStrutturaDialog: boolean; + tipoGestione: TipoGestione[]; + tipoStruttura: TipoStruttura[]; + csvExportIsLoading: boolean; + tipoGestioneIsLoading: boolean; + tipoStruttureIsLoading: boolean; + isSaving: boolean; + stipulatori: Stipulatore[]; + stipulatoriIsLoading: boolean; + + statusConvenzioni: { label: string; value: string }[]; + statusConvenzioniAreLoading: boolean; + tipologieStrutture: TipoStruttura[]; + tipologieStruttureAreLoading: boolean; + isSearching: boolean; + filteredLuoghiEsteso: LuogoRes[]; + + allegati: FileDetails[]; + loadingAllegatiTable: boolean; + showUploadDialog: boolean; + descrizioniTipiStruttura: any[]; + account: AccountResDto; + accountIsLoading: boolean; +} +type State = ManageStruttureComponentState; + +@Component({ + selector: 'app-strutture', + imports: [ + CommonModule, + TableModule, + InputTextModule, + SkeletonModule, + ButtonModule, + TooltipModule, + FormsModule, + ReactiveFormsModule, + MultiSelectModule, + SelectModule, + ConfirmDialogModule, + IconFieldModule, + InputIconModule, + MessagesModule, + TagModule, + ConfirmPopupModule, + ToastModule, + DialogModule, + DividerModule, + TextareaModule, + DatePickerModule, + RatingModule, + DropdownModule, + CheckboxModule, + AutoCompleteModule, + FontAwesomeModule, + FileSizePipe, + UploadDocumentazioneComponent, + MyDirectiveModule, + ], + providers: [RxState, DialogService, ConfirmationService], + templateUrl: 'strutture.component.html', + styleUrl: './strutture.component.scss', +}) +export class StruttureComponent { + model$: Observable; + + showTransitionOptions = '500ms'; + + faCity = faCity; + faGlobeEurope = faGlobeEurope; + faMapLocationDot = faMapLocationDot; + faHospital = faHospital; + + minDate = new Date(1998, 0, 1); + todayDate = new Date(); + + luoghiFilter = new BehaviorSubject(null); + + convenzioneForm = new FormGroup(convenzioneFormGroupFunc()); + cercaStruttureForm = cercaStruttureFormGroupFunc(); + private childDialogRef: DynamicDialogRef | undefined; + + struttureTable!: Table; + + @ViewChild('struttureTable') set table(table: Table) { + if (!table || this.struttureTable === table) return; + this.struttureTable = table; + } + + emptyStruttura: StrutturaExcerptRes = { + cap: null, + codiceLuogo: null, + id: 0, + indirizzo: null, + nome: '', + numeroCivico: null, + partitaIva: null, + strutturaMadre: {} as StrutturaMadre, + struttureTipiStrutture: [], + tipoGestione: {} as TipoGestione, + visibilitaStrutture: [], + }; + + emptyStrutturaArray = Array(10).fill(this.emptyStruttura); + + cols: TableColumn[] = [ + { + header: 'Nome', + field: 'nome', + sortField: 'nome', + }, + { + header: 'Partita IVA', + field: 'partitaIva', + sortField: 'partitaIva', + }, + { + header: 'Indirizzo', + field: 'indirizzo', + }, + + { + header: 'Struttura madre', + field: 'strutturaMadre.nome', + sortField: 'strutturaMadre.nome', + }, + + { + header: 'Tipo gestione', + field: 'tipoGestione.descrizione', + sortField: 'tipoGestione.descrizione', + }, + { + header: 'Tipo struttura', + field: 'tipoStruttura.codice', + sortField: 'tipoStruttura.codice', + }, + { + header: 'Azioni', + field: 'azioni', + }, + ]; + + allegatiCols: TableColumn[] = [ + { field: 'preview', header: '' }, + { field: 'name', header: 'Nome' }, + { field: 'lastModified', header: 'Data ultima modifica' }, + { field: 'fileSizeInBytes', header: 'Dimensione' }, + { field: 'actions', header: 'Azioni' }, + ]; + + defaultSort = [{ field: 'numero', order: 1 }]; + + messages: ToastMessageOptions[] = []; + filterMessage: ToastMessageOptions[] = []; + + editStrutturaIsLoading: boolean[] = []; + dettaglioStrutturaIsLoading: boolean[] = []; + editVisibilitaStrutturaIsLoading: boolean[] = []; + openStrutturaIsLoading: boolean[] = []; + convenzioniAreLoading: boolean[] = []; + allegatiAreLoading: boolean[] = []; + downloading: boolean[] = []; + hasAdminRole: boolean = false; + convenzioneStrutturaPrivilegio: boolean = false; + + constructor( + private struttureService: StruttureService, + private readonly dialogService: DialogService, + private confirmationService: ConfirmationService, + public state: RxState, + public utilsService: UtilsService, + private authService: AuthService, + ) { + this.model$ = this.state.select(); + this.state.set({ + strutture: [], + struttureAreLoading: false, + struttureTotalCount: 0, + selectedStruttura: undefined, + cdIsLoading: false, + convenzioniAreLoading: false, + showConvenzioniDialog: false, + convenzioni: [], + modalMode: '', + modalName: '', + convenzioneFormSubmitted: false, + cercaStruttureFormSubmitted: false, + csvExportIsLoading: false, + stipulatoriIsLoading: false, + + statusConvenzioniAreLoading: false, + tipologieStruttureAreLoading: false, + isSearching: false, + + loadingAllegatiTable: false, + showUploadDialog: false, + descrizioniTipiStruttura: [], + account: undefined, + accountIsLoading: false, + }); + + const fetchValoriStatus$ = of(EMPTY).pipe( + switchMap(() => + this.struttureService.getValoriStatusConvenzioni().pipe( + map((res) => ({ + statusConvenzioni: res, + })), + startWith({ statusConvenzioniAreLoading: true }), + endWith({ statusConvenzioniAreLoading: false }), + ), + ), + ); + this.state.connect(fetchValoriStatus$); + + const fetchTipologieStrutture$ = of(EMPTY).pipe( + switchMap(() => + this.struttureService.getTipologieStrutture().pipe( + map((res) => ({ + tipologieStrutture: res, + })), + catchError(() => of({ tipologieStrutture: [] })), + startWith({ tipologieStruttureAreLoading: true }), + endWith({ tipologieStruttureAreLoading: false }), + ), + ), + ); + this.state.connect(fetchTipologieStrutture$); + + const fetchAccount$ = of(null).pipe( + map(() => { + const res = this.authService.getCurrentUser(); + const hasAdminRole = + res?.roles?.some((role) => role.roleCode === 'ADMIN') ?? false; + this.hasAdminRole = hasAdminRole; + + return { + account: res ?? undefined, + }; + }), + catchError(() => of({ account: undefined })), + startWith({ tipologieStruttureAreLoading: true }), + endWith({ tipologieStruttureAreLoading: false }), + ); + + this.state.connect(fetchAccount$); + + this.getTipiGestione(); + this.getTipiStrutture(); + this.getStipulatori(); + } + + getStipulatori() { + const stipulatori$ = this.struttureService.getStipulatori().pipe( + map((res) => ({ stipulatori: res })), + catchError(() => { + this.messages = [ + { + severity: 'error', + life: 5000, + summary: 'Attenzione!', + detail: + 'Impossibile recuperare la lista di stipulatori al momento, riprova più tardi', + }, + ]; + return of({}); + }), + startWith({ stipulatoriIsLoading: true }), + endWith({ stipulatoriIsLoading: false }), + ); + this.state.connect(stipulatori$); + } + + fetchLuogo( + event: { originalEvent: Event; query: string }, + flagAttivo?: number, + ) { + const fetchCities$ = this.struttureService + .getLuoghiEsteso(event.query, flagAttivo) + .pipe( + catchError((err) => { + return of(null); + }), + map((res) => ({ filteredLuoghiEsteso: res?.rows })), + ); + this.state.connect(fetchCities$); + } + + getTipiGestione() { + const tipiGestione$ = this.struttureService.getTipoGestione().pipe( + map((res) => ({ tipoGestione: res.rows })), + catchError(() => { + this.messages = [ + { + severity: 'error', + life: 5000, + summary: 'Attenzione!', + detail: + 'Impossibile recuperare i tipi gestione al momento, riprova più tardi', + }, + ]; + return of({}); + }), + startWith({ tipoGestioneIsLoading: true }), + endWith({ tipoGestioneIsLoading: false }), + ); + this.state.connect(tipiGestione$); + } + + getTipiStrutture() { + const tipiStrutture$ = this.struttureService.getTipoStrutture().pipe( + map((res) => ({ tipoStruttura: res.rows })), + catchError(() => { + this.messages = [ + { + severity: 'error', + life: 5000, + summary: 'Attenzione!', + detail: + 'Impossibile recuperare i tipi struttura al momento, riprova più tardi', + }, + ]; + return of({}); + }), + startWith({ tipoStruttureIsLoading: true }), + endWith({ tipoStruttureIsLoading: false }), + ); + this.state.connect(tipiStrutture$); + } + + createStruttura() { + this.childDialogRef = this.dialogService.open( + ManageStruttureDialogComponent, + { + header: 'Crea struttura', + modal: true, + closable: true, + focusOnShow: false, + style: { width: '120vw', maxWidth: '800px', minWidth: '400px' }, + data: { + isLoading: false, + dialogComponentName: ManageStruttureDialogComponent.name, + } satisfies DynamicDialogData, + }, + ); + + this.childDialogRef?.onClose.subscribe((struttura: Struttura) => { + if (!struttura) return; + this.openConvenzioniDialog(struttura, -1); + this.messages = [ + { + severity: 'success', + life: 5000, + summary: 'Operazione completata', + detail: 'Struttura creato con successo', + }, + ]; + }); + } + + resetFilters() { + this.cercaStruttureForm.reset(); + } + + search() { + if (this.cercaStruttureForm.invalid) { + this.filterMessage = [ + { + severity: 'error', + life: 5000, + summary: 'Attenzione!', + detail: 'Inserire almeno un filtro.', + }, + ]; + return; + } + this.state.set({ + cercaStruttureFormSubmitted: true, + }); + const _form = this.cercaStruttureForm.getRawValue(); + this.cercaStruttureForm.disable(); + const param: FindStrutture = { + filters: { + flagOnlyStrutturaMadre: false, + nome: _form.nome, + idTipoStruttura: _form.tipologiaStruttura, + dataInizio: _form.dataInizioConvenzione?.map((x) => + dayjs(x).toISOString(), + ), + dataFine: _form.dataFineConvenzione?.map((x) => dayjs(x).toISOString()), + statoConvenzione: _form.statoConvenzione, + ...(_form.luogo?.luogo && _form.luogo?.tipo + ? { + luogo: { + luogo: _form.luogo?.luogo, + tipo: _form.luogo?.tipo, + }, + } + : {}), + }, + }; + const strutture$ = this.struttureService.getStrutture(param).pipe( + map((res) => { + const strutture = res.rows.map((row: any) => ({ + ...row, + descrizioniTipiStruttura: + row.struttureTipiStrutture + ?.map((s: any) => s.tipo.descrizione) + .join(', ') || '', + })); + + return { + strutture, + struttureTotalCount: strutture.length, + }; + }), + tap(() => { + this.cercaStruttureForm.enable(); + }), + catchError(() => { + this.messages = [ + { + severity: 'error', + life: 5000, + summary: 'Attenzione!', + detail: + 'Impossibile recuperare la lista di strutture al momento, riprova più tardi', + }, + ]; + this.cercaStruttureForm.enable(); + return of({ + strutture: [], + struttureTotalCount: 0, + }); + }), + startWith({ struttureAreLoading: true, isSearching: true }), + endWith({ struttureAreLoading: false, isSearching: false }), + ); + + this.state.connect(strutture$); + } + + editStruttura(struttura: StrutturaExcerptRes, rowIndex: number) { + this.editStrutturaIsLoading[rowIndex] = true; + const fetchUserById$ = of(EMPTY).pipe( + switchMap(() => + this.struttureService.getStrutturaById(struttura.id).pipe( + catchError(() => of(null)), + tap((res) => { + this.editStrutturaIsLoading[rowIndex] = false; + if (!res) return; + this.childDialogRef = this.dialogService.open( + ManageStruttureDialogComponent, + { + header: 'Modifica struttura ' + struttura.nome, + modal: true, + closable: true, + focusOnShow: false, + style: { width: '90vw', maxWidth: '800px', minWidth: '400px' }, + data: { + selectedStruttura: res, + dialogComponentName: ManageStruttureDialogComponent.name, + } satisfies DynamicDialogData, + }, + ); + + this.childDialogRef?.onClose.subscribe((result: Struttura) => { + if (!result) return; + + this.messages = [ + { + severity: 'success', + summary: 'Operazione completata', + life: 5000, + detail: 'Struttura modificata con successo', + }, + ]; + + this.search(); + }); + }), + map(() => ({})), + ), + ), + ); + this.state.connect(fetchUserById$); + } + + editVisibilitaStruttura(struttura: StrutturaExcerptRes, rowIndex: number) { + this.editVisibilitaStrutturaIsLoading[rowIndex] = true; + + const fetchStrutturaById$ = of(EMPTY).pipe( + switchMap(() => + this.struttureService.getStrutturaById(struttura.id).pipe( + catchError(() => of(null)), + tap((res) => { + this.editVisibilitaStrutturaIsLoading[rowIndex] = false; + if (!res) return; + + this.childDialogRef = this.dialogService.open( + GestioneVisibilitaDialogComponent, + { + header: 'Gestione visibilità struttura ' + struttura.nome, + modal: true, + closable: true, + focusOnShow: false, + style: { width: '90vw', maxWidth: '800px', minWidth: '400px' }, + data: { + selectedStruttura: res, + dialogComponentName: GestioneVisibilitaDialogComponent.name, + } satisfies DynamicDialogData, + }, + ); + + this.childDialogRef?.onClose.subscribe((result: string) => { + if (!result) return; + this.messages = [ + { + severity: 'success', + summary: 'Visibilità aggiornata', + life: 5000, + detail: + 'La visibilità della struttura è stata modificata con successo', + }, + ]; + }); + }), + map(() => ({})), + ), + ), + ); + + this.state.connect(fetchStrutturaById$); + } + + documentazioneUploaded(res: GenericMessageDto) { + this.utilsService.showAlert( + 'success', + 'Operazione completata', + res.message, + ); + this.visualizzaAllegatiConvenzione( + this.state.get('selectedConvenzione'), + 0, + ); + this.closeDialog(); + } + + closeDialog() { + this.state.set({ + showUploadDialog: false, + }); + } + + openConvenzioniDialog(struttura: Struttura, rowIndex: number) { + this.convenzioneStrutturaPrivilegio = + struttura.visibilitaStrutture[0].flagProprietario; + if (rowIndex !== -1) this.convenzioniAreLoading[rowIndex] = true; + const fetchPrivilegiById$ = of(EMPTY).pipe( + switchMap(() => + this.struttureService.getConvenzioniByStrutturaId(struttura.id).pipe( + catchError(() => of(null)), + tap((res) => { + if (!res) return; + this.state.set({ + selectedStruttura: struttura, + showConvenzioniDialog: true, + convenzioni: res.map((x) => ({ + ...x, + dataInizio: new Date(x.dataInizio).toISOString(), + dataFine: new Date(x.dataFine).toISOString(), + })), + modalMode: 'show', + modalName: 'Convenzioni per la struttura ' + struttura?.nome, + }); + if (rowIndex !== -1) this.convenzioniAreLoading[rowIndex] = false; + }), + map(() => ({})), + startWith({ convenzioniAreLoading: true }), + endWith({ convenzioniAreLoading: false }), + ), + ), + ); + this.state.connect(fetchPrivilegiById$); + } + + exportCSV() { + this.state.set({ + csvExportIsLoading: true, + }); + const exportCSV$ = this.struttureService.exportCSV().pipe( + catchError(() => { + this.messages = [ + { + severity: 'error', + life: 5000, + summary: 'Attenzione!', + detail: + 'Impossibile esportare il csv delle strutture al momento, riprova più tardi', + }, + ]; + return of(null); + }), + tap((blob) => { + if (!blob) return; + const timestamp = dayjs().format('YYYYMMDD_HHmmss'); + const fileName = `nomenclatore_export_${timestamp}.csv`; + saveAs(blob, fileName); + this.state.set({ + csvExportIsLoading: false, + }); + }), + ); + exportCSV$.subscribe(); + } + + onCloseConvenzioniDialog(event: Event) { + this.state.set({ + modalMode: '', + selectedConvenzione: undefined, + modalName: '', + convenzioneFormSubmitted: false, + }); + } + + onBackDialog(event: Event) { + if ( + this.state.get('modalMode') === 'edit' || + this.state.get('modalMode') === 'allegati' + ) { + this.state.set({ modalMode: 'show' }); + } else { + this.state.set({ showConvenzioniDialog: false }); + this.onCloseConvenzioniDialog(event); + } + } + + editConvenzione(convenzione: ConvenzioniStrutture) { + this.convenzioneForm.patchValue( + new FormGroup(convenzioneFormGroupFunc(convenzione)).value, + ); + this.state.set({ + modalMode: 'edit', + selectedConvenzione: convenzione, + modalName: 'Modifica convenzione', + }); + } + + addConvenzione() { + this.convenzioneForm.patchValue( + new FormGroup(convenzioneFormGroupFunc()).value, + ); + this.state.set({ + modalMode: 'edit', + selectedConvenzione: undefined, + modalName: 'Aggiungi convenzione', + }); + } + + visualizzaAllegatiConvenzione( + convenzione: ConvenzioniStrutture, + rowIndex: number, + ) { + this.allegatiAreLoading[rowIndex] = true; + this.state.set({ + selectedConvenzione: convenzione, + }); + const fetchAllegati$ = of(EMPTY).pipe( + switchMap(() => + this.struttureService + .getAllegatiByConvenzioneId( + this.state.get('selectedStruttura').id, + convenzione.id, + ) + .pipe( + catchError(() => of(null)), + tap((res) => { + if (!res) return; + this.state.set({ + modalMode: 'allegati', + allegati: res, + modalName: 'Allegati della convenzione', + }); + this.convenzioniAreLoading[rowIndex] = false; + }), + map(() => ({})), + startWith({ loadingAllegatiTable: true }), + endWith({ loadingAllegatiTable: false }), + ), + ), + ); + this.state.connect(fetchAllegati$); + } + + showDeleteDialog(event: Event, file: FileDetails): void { + this.confirmationService.confirm({ + target: event.target as EventTarget, + key: 'cd', + header: 'Elimina allegato', + icon: 'pi pi-exclamation-triangle', + message: 'Sei sicuro di voler eliminare questo allegato?', + acceptLabel: 'Sì, elimina', + acceptButtonStyleClass: 'p-button-rounded p-button-danger', + rejectButtonStyleClass: 'p-button-rounded p-button-outlined', + acceptIcon: 'pi pi-trash', + rejectLabel: 'Annulla', + accept: () => { + const params = { + id: this.state.get('selectedStruttura')?.id, + idConvenzione: this.state.get('selectedConvenzione').id, + fileName: file.name, + }; + const saveDeleteChannel$ = this.struttureService + .deleteAllegato(params) + .pipe( + catchError(() => { + this.utilsService.showAlert( + 'error', + 'Qualcosa è andato storto', + `Impossibile eliminare l'allegato al momento`, + ); + return of(null); + }), + tap((res) => { + if (!res) return; + this.utilsService.showAlert( + 'success', + 'Operazione completata', + 'Allegato eliminato con successo', + ); + this.visualizzaAllegatiConvenzione( + this.state.get('selectedConvenzione'), + 0, + ); + }), + map(() => ({})), + startWith({ cdIsLoading: true }), + endWith({ cdIsLoading: false }), + ); + this.state.connect(saveDeleteChannel$); + }, + }); + } + + submitConvenzioneForm() { + this.state.set({ + convenzioneFormSubmitted: true, + }); + if (this.convenzioneForm.invalid) return; + const _form = this.convenzioneForm.getRawValue(); + const params = { + condizioniGeneraliConvenzione: + _form.condizioniGeneraliConvenzione ?? null, + dataInizio: dayjs(_form.dataInizio).toISOString(), + dataFine: _form.dataFine ? dayjs(_form.dataFine).toISOString() : null, + flagConvenzioneDiretta: _form.flagConvenzioneDiretta ?? false, + flagConvenzioneIndiretta: _form.flagConvenzioneIndiretta ?? false, + flagConvenzioneTicket: _form.flagConvenzioneTicket ?? false, + flagSospesa: _form.flagSospesa ?? false, + flagSceltaMedico: _form.flagSceltaMedico ?? false, + flagUsaTariffarioCasaMadre: _form.flagUsaTariffarioCasaMadre ?? false, + idStipulatore: _form.stipulata ?? 0, + }; + + const saveAddAutore$ = ( + !this.state.get('selectedConvenzione') + ? this.struttureService.createConvenzione( + this.state.get('selectedStruttura')?.id ?? 0, + params, + ) + : this.struttureService.editConvenzione( + params, + this.state.get('selectedStruttura')?.id ?? 0, + this.state.get('selectedConvenzione').id, + ) + ).pipe( + catchError(() => of(null)), + tap((res) => { + if (!res) return; + // this.getStrutture(this.state.get('currentFilter')!); + + this.openConvenzioniDialog(this.state.get('selectedStruttura'), 0); + this.state.set(() => ({ + convenzioneFormSubmitted: false, + modalMode: 'show', + })); + }), + map(() => ({})), + startWith({ isSaving: true }), + endWith({ isSaving: false }), + ); + this.state.connect(saveAddAutore$); + } + + openStrutturaDialog(idStruttura: number, rowIndex: number) { + this.dettaglioStrutturaIsLoading[rowIndex] = true; + const fetchStrutturaById$ = of(EMPTY).pipe( + switchMap(() => + this.struttureService.getStrutturaById(idStruttura).pipe( + catchError(() => of(null)), + tap((res) => { + if (!res) return; + this.state.set({ + showStrutturaDialog: true, + selectedStruttura: res, + }); + this.dettaglioStrutturaIsLoading[rowIndex] = false; + }), + map(() => ({})), + ), + ), + ); + this.state.connect(fetchStrutturaById$); + } + + openUploadDialog() { + this.state.set({ + showUploadDialog: true, + }); + } + + getFormattedAddress(row: Struttura): string { + return [ + row.indirizzo, + row.cap, + row.codiceLuogo?.comune, + row.codiceLuogo?.siglaProvincia, + row.codiceLuogo?.regione, + row.codiceLuogo?.stato, + ] + .filter((field) => field) + .join(', '); + } + + downloadFile(file: FolderFile, rowIndex: number) { + this.downloading[rowIndex] = true; + const fetchAllegati$ = of(EMPTY).pipe( + switchMap(() => + this.struttureService + .downloadAllegato( + this.state.get('selectedStruttura').id, + this.state.get('selectedConvenzione').id, + file.name, + ) + .pipe( + catchError(() => of({} as DownloadFile)), + tap((res: any) => { + if (!res) return; + this.downloading[rowIndex] = false; + if (res.buffer) { + const myArr = new Uint8Array(res.buffer.data); + const blob = new Blob([myArr], { + type: 'application/octet-stream', + }); + saveAs(blob, file.name); + } else { + this.utilsService.showAlert( + 'error', + 'Ops! qualcosa è andato storto', + 'Impossibile scaricare il file richiesto, riprova più tardi!', + ); + } + }), + map(() => ({})), + ), + ), + ); + this.state.connect(fetchAllegati$); + } +} + +export function atLeastOneFilterRequired( + control: AbstractControl, +): ValidationErrors | null { + if (control instanceof FormGroup) { + const groupAndOrderFields = ['flagOnlyStrutturaMadre']; + + const controls = Object.entries(control.controls) + .filter(([key]) => !groupAndOrderFields.includes(key)) + .map(([, ctrl]) => ctrl); + + const filtersHaveOneValue = controls.some( + (ctrl) => + ctrl.value != null && + ctrl.value !== '' && + !(Array.isArray(ctrl.value) && ctrl.value.length === 0), + ); + + return filtersHaveOneValue ? null : { atLeastOneRequired: true }; + } + + return null; +} diff --git a/src/app/modules/main/strutture/strutture.routes.ts b/src/app/modules/main/strutture/strutture.routes.ts new file mode 100644 index 0000000..1cc6ff1 --- /dev/null +++ b/src/app/modules/main/strutture/strutture.routes.ts @@ -0,0 +1,17 @@ +import { ExtraOptions, Routes } from '@angular/router'; +import { StruttureComponent } from './strutture.component'; + +export const routerOptions: ExtraOptions = { + anchorScrolling: 'enabled', + scrollPositionRestoration: 'enabled', + paramsInheritanceStrategy: 'always', +}; + +export const struttureRoutes: Routes = [ + { + path: '', + component: StruttureComponent, + children: [], + data: { expectedPrivileges: ['STRUTTURE'] }, + }, +]; diff --git a/src/app/modules/main/strutture/strutture.service.ts b/src/app/modules/main/strutture/strutture.service.ts new file mode 100644 index 0000000..087f069 --- /dev/null +++ b/src/app/modules/main/strutture/strutture.service.ts @@ -0,0 +1,347 @@ +import { HttpErrorResponse } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { LuoghiControllerFindLuogoByAutocomplete$Params } from '@api/fn/luoghi/luoghi-controller-find-luogo-by-autocomplete'; +import { StruttureControllerDeleteAllegatoConvenzione$Params } from '@api/fn/strutture/strutture-controller-delete-allegato-convenzione'; +import { + LuoghiApiClient, + StipulatoriApiClient, + StruttureApiClient, +} from '@api/services'; +import { StatoConvenzioniEnum } from '@core/common/enum/convenzioni.enum'; +import { LazyLoadEvent, MessageService } from 'primeng/api'; +import { catchError, map, of, throwError } from 'rxjs'; +import { + CreateConvenzioneStruttura, + CreateStruttura, + FindStrutture, + UpdateConvenzioneStruttura, +} from '../../../../api/models'; + +@Injectable({ + providedIn: 'root', +}) +export class StruttureService { + constructor( + private struttureApiClient: StruttureApiClient, + private luoghiApiClient: LuoghiApiClient, + private readonly messageService: MessageService, + private stipulatoreApiClient: StipulatoriApiClient, + ) {} + + getStrutture(filters: FindStrutture) { + const params = { + body: filters, + }; + return this.struttureApiClient + .struttureControllerFindManyStrutture(params) + .pipe( + map((res) => ({ rows: res })), + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + getLuoghi(q: string, flagAttivo?: number) { + const params: LuoghiControllerFindLuogoByAutocomplete$Params = { + q: q, + flagAttivo: flagAttivo, + statiEsteri: 1, + }; + + return this.luoghiApiClient + .luoghiControllerFindLuogoByAutocomplete(params) + .pipe( + map((res) => ({ rows: res, rowsTotalCount: res.length })), + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + getLuoghiEsteso(q: string, flagAttivo?: number) { + const params = { + q: q, + flagAttivo: flagAttivo, + }; + + return this.luoghiApiClient.luoghiControllerFindLuogoEsteso(params).pipe( + map((res) => ({ rows: res, rowsTotalCount: res.length })), + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + getStrutturaMadre(q: string, flagOnlyStrutturaMadre?: number) { + const params = { + q: q, + flagOnlyStrutturaMadre: flagOnlyStrutturaMadre, + }; + + return this.struttureApiClient + .struttureControllerFindManyStruttureByAutocomplete(params) + .pipe( + map((res) => ({ rows: res, rowsTotalCount: res.length })), + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + getValoriStatusConvenzioni() { + return of([ + { + label: 'Attive', + value: StatoConvenzioniEnum.ATTIVO, + }, + { + label: 'Chiuse', + value: StatoConvenzioniEnum.CHIUSO, + }, + { + label: 'Tutte', + value: StatoConvenzioniEnum.TUTTI, + }, + ]); + } + + getTipologieStrutture() { + return this.struttureApiClient + .struttureControllerFindManyTipiStrutture() + .pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + getStipulatori() { + return this.stipulatoreApiClient + .stipulatoriControllerFindManyStipulatori() + .pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + getTipoStrutture() { + return this.struttureApiClient + .struttureControllerFindManyTipiStrutture() + .pipe( + map((res) => ({ rows: res, rowsTotalCount: res.length })), + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + getTipoGestione() { + return this.struttureApiClient + .struttureControllerFindManyTipiGestioni() + .pipe( + map((res) => ({ rows: res, rowsTotalCount: res.length })), + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + getAllStipulatori() { + return this.stipulatoreApiClient + .stipulatoriControllerFindManyStipulatori() + .pipe( + map((res) => ({ rows: res, rowsTotalCount: res.length })), + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + getConvenzioniByStrutturaId(idStruttura: number) { + const params = { + id: idStruttura, + }; + + return this.struttureApiClient + .struttureControllerGetConvenzioniByStrutturaId(params) + .pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + getAllegatiByConvenzioneId(idStruttura: number, idConvenzione: number) { + const params = { + id: idStruttura, + idConvenzione: idConvenzione, + }; + return this.struttureApiClient + .struttureControllerGetAllegatiConvenzione(params) + .pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + downloadAllegato( + idStruttura: number, + idConvenzione: number, + fileName: string, + ) { + const params = { + id: idStruttura, + idConvenzione: idConvenzione, + fileName: fileName, + }; + return this.struttureApiClient + .struttureControllerDownloadAllegatoConvenzione(params) + .pipe( + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `Riprova più tardi`, + }); + return throwError(() => err); + }), + ); + } + + exportCSV() { + return this.struttureApiClient.struttureControllerExportStrutture().pipe( + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `Riprova più tardi`, + }); + return throwError(() => err); + }), + ); + } + + createStruttura(params: CreateStruttura) { + const param = { + body: params, + }; + return this.struttureApiClient + .struttureControllerCreateStruttura(param) + .pipe( + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `Riprova più tardi`, + }); + return throwError(() => err); + }), + ); + } + + editStruttura(id: number, params: any) { + const param = { + id: id, + body: params, + }; + return this.struttureApiClient + .struttureControllerUpdateStruttura(param) + .pipe( + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `Riprova più tardi`, + }); + return throwError(() => err); + }), + ); + } + + editVisibilita(id: number, params: any) { + const param = { + id: id, + body: params, + }; + return this.struttureApiClient + .struttureControllerUpdateVisibilitaStruttura(param) + .pipe( + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `Riprova più tardi`, + }); + return throwError(() => err); + }), + ); + } + + getStrutturaById(id: number) { + const params = { + id: id, + }; + + return this.struttureApiClient + .struttureControllerGetOneStrutturaById(params) + .pipe( + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `Riprova più tardi`, + }); + return throwError(() => err); + }), + ); + } + + createConvenzione(idStruttura: number, params: CreateConvenzioneStruttura) { + const param = { + id: idStruttura, + body: params, + }; + return this.struttureApiClient + .struttureControllerCreateConvenzione(param) + .pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + editConvenzione( + params: UpdateConvenzioneStruttura, + strutturaId: number, + convenzioneId: number, + ) { + const param = { + id: strutturaId, + idConvenzione: convenzioneId, + body: params, + }; + return this.struttureApiClient + .struttureControllerUpdateConvenzione(param) + .pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + deleteAllegato(params: StruttureControllerDeleteAllegatoConvenzione$Params) { + return this.struttureApiClient + .struttureControllerDeleteAllegatoConvenzione(params) + .pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } +} +function convertLazyLoadEvent(arg0: LazyLoadEvent) { + throw new Error('Function not implemented.'); +} diff --git a/src/app/modules/main/utenti/manage-stipulatori-dialog /manage-stipulatori-dialog.component.html b/src/app/modules/main/utenti/manage-stipulatori-dialog /manage-stipulatori-dialog.component.html new file mode 100644 index 0000000..1f05465 --- /dev/null +++ b/src/app/modules/main/utenti/manage-stipulatori-dialog /manage-stipulatori-dialog.component.html @@ -0,0 +1,66 @@ +@let vm = (model$ | async)!; + +
+ + + +

+
+
+ +
+ + + +
+ + + + + + diff --git a/src/app/modules/main/utenti/manage-stipulatori-dialog /manage-stipulatori-dialog.component.scss b/src/app/modules/main/utenti/manage-stipulatori-dialog /manage-stipulatori-dialog.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/modules/main/utenti/manage-stipulatori-dialog /manage-stipulatori-dialog.component.ts b/src/app/modules/main/utenti/manage-stipulatori-dialog /manage-stipulatori-dialog.component.ts new file mode 100644 index 0000000..e381854 --- /dev/null +++ b/src/app/modules/main/utenti/manage-stipulatori-dialog /manage-stipulatori-dialog.component.ts @@ -0,0 +1,169 @@ +import { CommonModule } from '@angular/common'; +import { Component, Optional } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { + EditAccountStipulatoriDto, + FindAccountResDto, + Stipulatore, +} from '@api/models'; +import { RxState } from '@rx-angular/state'; +import { ToastMessageOptions } from 'primeng/api'; +import { ButtonModule } from 'primeng/button'; +import { CalendarModule } from 'primeng/calendar'; +import { DatePickerModule } from 'primeng/datepicker'; +import { DividerModule } from 'primeng/divider'; +import { DropdownModule } from 'primeng/dropdown'; +import { + DialogService, + DynamicDialogConfig, + DynamicDialogRef, +} from 'primeng/dynamicdialog'; +import { InputSwitchModule } from 'primeng/inputswitch'; +import { InputTextModule } from 'primeng/inputtext'; +import { MessagesModule } from 'primeng/messages'; +import { MultiSelectModule } from 'primeng/multiselect'; +import { SelectModule } from 'primeng/select'; +import { SkeletonModule } from 'primeng/skeleton'; +import { EMPTY, Observable, of } from 'rxjs'; +import { + catchError, + endWith, + map, + startWith, + switchMap, + tap, +} from 'rxjs/operators'; +import { handleDynamicDialog } from '../../../shared/utils/dynamic-dialog-utils'; +import { UtentiService } from '../utenti.service'; + +export interface ManagestipulatoriDialogComponentState { + isSaving: boolean; + isLoading: boolean; + selectedUser: FindAccountResDto; + ruoliIsLoading: boolean; + stipulatori: Stipulatore[]; + stipulatoriIsLoading: boolean; + stipulatoriAccount: number[]; + stipulatoriAccountIsLoading: boolean; +} + +type State = ManagestipulatoriDialogComponentState; + +@Component({ + imports: [ + CommonModule, + SkeletonModule, + InputSwitchModule, + FormsModule, + ButtonModule, + DividerModule, + DropdownModule, + ReactiveFormsModule, + InputTextModule, + CalendarModule, + MultiSelectModule, + SelectModule, + DatePickerModule, + MessagesModule, + ], + providers: [RxState, DialogService], + selector: 'manage-stipulatori-dialog', + templateUrl: 'manage-stipulatori-dialog.component.html', + styleUrl: './manage-stipulatori-dialog.component.scss', +}) +export class ManagestipulatoriDialogComponent { + //state = inject(RxState); + + //model$ = this.state.select(); + + model$: Observable; + + showTransitionOptions = '500ms'; + + messages: ToastMessageOptions[] = []; + + constructor( + @Optional() readonly dialogRef: DynamicDialogRef, + @Optional() readonly dialogConfig: DynamicDialogConfig, + private utentiService: UtentiService, + public state: RxState, + ) { + this.model$ = this.state.select(); + + this.state.set({ + isSaving: false, + isLoading: false, + stipulatori: [], + stipulatoriIsLoading: false, + stipulatoriAccount: [], + stipulatoriAccountIsLoading: false, + }); + + handleDynamicDialog.bind(this)(); + + const fetchStipulatori$ = of(EMPTY).pipe( + switchMap(() => + this.utentiService.getStipulatori().pipe( + map((res) => ({ + stipulatori: res, + })), + catchError(() => of({ stipulatori: [] })), + startWith({ stipulatoriIsLoading: true }), + endWith({ stipulatoriIsLoading: false }), + ), + ), + ); + this.state.connect(fetchStipulatori$); + + const fetchStipulatoriByAccountId$ = of(EMPTY).pipe( + switchMap(() => + this.utentiService + .getStipulatoriByAccountId(this.state.get('selectedUser').id) + .pipe( + map((res) => ({ + stipulatoriAccount: res.map((s) => s.id), + })), + catchError(() => of({ stipulatoriAccount: [] })), + startWith({ stipulatoriAccountIsLoading: true }), + endWith({ stipulatoriAccountIsLoading: false }), + ), + ), + ); + this.state.connect(fetchStipulatoriByAccountId$); + } + + submitEditStipulatori() { + const params: EditAccountStipulatoriDto = { + stipulatori: this.state.get('stipulatoriAccount'), + }; + const saveAddstipulatore$ = this.utentiService + .editStipulatori(this.state.get('selectedUser').id, params) + .pipe( + catchError((err) => { + this.messages = [ + { + severity: 'error', + summary: 'Attenzione!', + detail: + err.status === 400 + ? err.error.message + : "Impossibile modificare gli stipulatori dell'account in questo momento, riprovare più tardi", + }, + ]; + return of(null); + }), + tap((res) => { + if (!res) return; + this.dialogRef.close('success'); + }), + map(() => ({})), + startWith({ isSaving: true }), + endWith({ isSaving: false }), + ); + this.state.connect(saveAddstipulatore$); + } + + cancelForm() { + this.dialogRef?.close(); + } +} diff --git a/src/app/modules/main/utenti/manage-users-dialog/manage-users-dialog.component.html b/src/app/modules/main/utenti/manage-users-dialog/manage-users-dialog.component.html new file mode 100644 index 0000000..78be7d8 --- /dev/null +++ b/src/app/modules/main/utenti/manage-users-dialog/manage-users-dialog.component.html @@ -0,0 +1,174 @@ +@let vm = (model$ | async)!; +
+
+ + +
+ +
+ + +
+ +
+ + + +
+ +
+ + + +

+
+
+ + @if (vm.selectedUser) { +
+ + + + +
+ } + +
+ + + +
+
+ + + + + + diff --git a/src/app/modules/main/utenti/manage-users-dialog/manage-users-dialog.component.scss b/src/app/modules/main/utenti/manage-users-dialog/manage-users-dialog.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/modules/main/utenti/manage-users-dialog/manage-users-dialog.component.ts b/src/app/modules/main/utenti/manage-users-dialog/manage-users-dialog.component.ts new file mode 100644 index 0000000..9546773 --- /dev/null +++ b/src/app/modules/main/utenti/manage-users-dialog/manage-users-dialog.component.ts @@ -0,0 +1,240 @@ +import { CommonModule } from '@angular/common'; +import { Component, Optional } from '@angular/core'; +import { + FormControl, + FormGroup, + FormsModule, + ReactiveFormsModule, + Validators, +} from '@angular/forms'; +import { FindAccountResDto, FindRoleResDto } from '@api/models'; +import { RxState } from '@rx-angular/state'; +import dayjs from 'dayjs'; +import { ToastMessageOptions } from 'primeng/api'; +import { ButtonModule } from 'primeng/button'; +import { CalendarModule } from 'primeng/calendar'; +import { DatePickerModule } from 'primeng/datepicker'; +import { DividerModule } from 'primeng/divider'; +import { DropdownModule } from 'primeng/dropdown'; +import { + DialogService, + DynamicDialogConfig, + DynamicDialogRef, +} from 'primeng/dynamicdialog'; +import { InputSwitchModule } from 'primeng/inputswitch'; +import { InputTextModule } from 'primeng/inputtext'; +import { MessagesModule } from 'primeng/messages'; +import { MultiSelectModule } from 'primeng/multiselect'; +import { SelectModule } from 'primeng/select'; +import { SkeletonModule } from 'primeng/skeleton'; +import { combineLatest, EMPTY, Observable, of } from 'rxjs'; +import { + catchError, + endWith, + map, + startWith, + switchMap, + tap, +} from 'rxjs/operators'; +import { handleDynamicDialog } from '../../../shared/utils/dynamic-dialog-utils'; +import { UtentiService } from '../utenti.service'; + +const userFormGroupFunc = (user?: FindAccountResDto) => ({ + firstName: new FormControl(user?.firstName ?? null, { + validators: [Validators.required], + }), + lastName: new FormControl(user?.lastName ?? null, { + validators: [Validators.required], + }), + username: new FormControl(user?.username ?? null, { + validators: [Validators.required, Validators.email], + }), + expireDate: new FormControl( + user?.expireDate && + dayjs(user.expireDate) + .startOf('day') + .isBefore(dayjs('9998-12-31').startOf('day')) + ? new Date(user?.expireDate) + : null, + ), + // statusID: new FormControl(user?.statusID ?? null, { + // validators: [Validators.required], + // }), + ruolo: new FormControl(user?.profiles[0].role.id ?? null, { + validators: [Validators.required], + }), +}); +export type UserForm = FormGroup>; +export type AccountFormValue = UserForm['value']; + +export interface ManageUsersDialogComponentState { + isSaving: boolean; + isLoading: boolean; + userFormSubmitted: boolean; + selectedUser: FindAccountResDto; + ruoli: FindRoleResDto[]; + ruoliIsLoading: boolean; + user: FindAccountResDto; +} + +type State = ManageUsersDialogComponentState; + +@Component({ + imports: [ + CommonModule, + SkeletonModule, + InputSwitchModule, + FormsModule, + ButtonModule, + DividerModule, + DropdownModule, + ReactiveFormsModule, + InputTextModule, + CalendarModule, + MultiSelectModule, + SelectModule, + DatePickerModule, + MessagesModule, + ], + providers: [RxState, DialogService], + selector: 'manage-users-dialog', + templateUrl: 'manage-users-dialog.component.html', + styleUrl: './manage-users-dialog.component.scss', +}) +export class ManageUsersDialogComponent { + //state = inject(RxState); + + //model$ = this.state.select(); + + model$: Observable; + + userForm = new FormGroup(userFormGroupFunc(undefined)); + + showTransitionOptions = '500ms'; + + messages: ToastMessageOptions[] = []; + + constructor( + @Optional() readonly dialogRef: DynamicDialogRef, + @Optional() readonly dialogConfig: DynamicDialogConfig, + private utentiService: UtentiService, + public state: RxState, + ) { + this.model$ = this.state.select(); + + this.state.set({ + isSaving: false, + isLoading: false, + userFormSubmitted: false, + }); + + handleDynamicDialog.bind(this)(); + + // const patchForm$ = combineLatest([ + // this.state.select('ruoli'), + // this.state.select('selectedUser'), + // ]).pipe( + // switchMap(([ruoli, user]) => { + // return of(user).pipe( + // tap(() => { + // this.userForm.patchValue( + // new FormGroup(userFormGroupFunc(user)).value, + // ); + // }), + // startWith({ isLoading: true }), + // endWith({ isLoading: false }), + // ); + // }), + // ); + // this.state.connect(patchForm$); + + const patchForm$ = combineLatest([ + this.state.select('ruoli'), + this.state.select('selectedUser'), + ]).pipe( + switchMap(([ruoli, user]) => { + return of(user).pipe( + tap(() => { + this.userForm.patchValue( + new FormGroup(userFormGroupFunc(user)).value, + ); + }), + map((user) => ({ user })), + startWith({ isLoading: true }), + endWith({ isLoading: false }), + ); + }), + ); + + this.state.connect(patchForm$); + + const fetchRuoli$ = of(EMPTY).pipe( + switchMap(() => + this.utentiService.getRoles().pipe( + map((res) => ({ + ruoli: res, + })), + startWith({ ruoliIsLoading: true }), + endWith({ ruoliIsLoading: false }), + ), + ), + ); + this.state.connect(fetchRuoli$); + } + + submitUserForm() { + this.state.set({ + userFormSubmitted: true, + }); + if (this.userForm.invalid) return; + const _userForm = this.userForm.getRawValue(); + const params = { + username: _userForm.username ?? 'null', + firstName: _userForm.firstName ?? 'null', + lastName: _userForm.lastName ?? 'null', + roleId: _userForm.ruolo ?? 0, + ...(this.state.get('selectedUser') && { + expireDate: _userForm.expireDate + ? _userForm.expireDate.toISOString() + : null, + }), + ...(this.state.get('selectedUser') && { + profileId: this.state.get('selectedUser').profiles[0].id, + }), + }; + const saveAddUser$ = ( + !this.state.get('selectedUser') + ? this.utentiService.createUser(params) + : this.utentiService.editUser(this.state.get('selectedUser').id, params) + ).pipe( + catchError((err) => { + this.messages = [ + { + severity: 'error', + summary: 'Attenzione!', + detail: + err.status === 400 + ? err.error.message + : "Impossibile creare l'account in questo momento, riprovare più tardi", + }, + ]; + return of(null); + }), + tap((res) => { + if (!res) return; + this.state.set(() => ({ + userFormSubmitted: false, + })); + this.dialogRef.close('success'); + }), + map(() => ({})), + startWith({ isSaving: true }), + endWith({ isSaving: false }), + ); + this.state.connect(saveAddUser$); + } + + cancelForm() { + this.dialogRef?.close(); + } +} diff --git a/src/app/modules/main/utenti/utenti.component.html b/src/app/modules/main/utenti/utenti.component.html new file mode 100644 index 0000000..6e1a402 --- /dev/null +++ b/src/app/modules/main/utenti/utenti.component.html @@ -0,0 +1,245 @@ +@let vm = (model$ | async)!; + + +
+ Utenti + +
+
+ + + + +
+
+ {{ col.header }} + +
+ + + + + + + + + + + + + + + + +
+ + +
+ + + + + + {{ row.firstName }} + + + {{ row.lastName }} + + + {{ row.username }} + + + + {{ row.profiles[0].role.standardName }} + + + + + {{ row.creationDate | date: 'dd/MM/yyyy' }} + + + + {{ + isFinalDate(row.expireDate) + ? (row.expireDate | date: 'dd/MM/yyyy') + : '' + }} + + + + + + +
+ + + +
+ +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/app/modules/main/utenti/utenti.component.scss b/src/app/modules/main/utenti/utenti.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/modules/main/utenti/utenti.component.ts b/src/app/modules/main/utenti/utenti.component.ts new file mode 100644 index 0000000..a556373 --- /dev/null +++ b/src/app/modules/main/utenti/utenti.component.ts @@ -0,0 +1,473 @@ +import { CommonModule } from '@angular/common'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { FindAccountResDto } from '@api/models'; +import { TableColumn } from '@core/models'; +import { RxState } from '@rx-angular/state'; +import dayjs from 'dayjs'; +import { ConfirmationService, ToastMessageOptions } from 'primeng/api'; +import { ButtonModule } from 'primeng/button'; +import { ConfirmDialogModule } from 'primeng/confirmdialog'; +import { ConfirmPopupModule } from 'primeng/confirmpopup'; +import { DialogService, DynamicDialogRef } from 'primeng/dynamicdialog'; +import { IconFieldModule } from 'primeng/iconfield'; +import { InputIconModule } from 'primeng/inputicon'; +import { InputTextModule } from 'primeng/inputtext'; +import { MessagesModule } from 'primeng/messages'; +import { MultiSelectModule } from 'primeng/multiselect'; +import { SkeletonModule } from 'primeng/skeleton'; +import { Table, TableLazyLoadEvent, TableModule } from 'primeng/table'; +import { TagModule } from 'primeng/tag'; +import { ToastModule } from 'primeng/toast'; +import { TooltipModule } from 'primeng/tooltip'; +import { + catchError, + EMPTY, + endWith, + map, + Observable, + of, + startWith, + switchMap, + tap, +} from 'rxjs'; +import { DynamicDialogData } from '../../shared/utils/dynamic-dialog-utils'; +import { + ManagestipulatoriDialogComponent, + ManagestipulatoriDialogComponentState, +} from './manage-stipulatori-dialog /manage-stipulatori-dialog.component'; +import { + ManageUsersDialogComponent, + ManageUsersDialogComponentState, +} from './manage-users-dialog/manage-users-dialog.component'; +import { UtentiService } from './utenti.service'; + +export interface ManageUserComponentState { + users: FindAccountResDto[]; + usersAreLoading: boolean; + usersTotalCount: number; + currentFilter?: TableLazyLoadEvent; + selectedUser: FindAccountResDto | undefined; + userIsLoading: boolean; + cdIsLoading: boolean; + messages?: { + severity: string; + summary: string; + life: number; + detail: string; + }[]; + isLoading?: boolean; +} +type State = ManageUserComponentState; + +@Component({ + selector: 'app-utenti', + imports: [ + CommonModule, + TableModule, + InputTextModule, + SkeletonModule, + ButtonModule, + TooltipModule, + FormsModule, + ReactiveFormsModule, + MultiSelectModule, + ConfirmDialogModule, + IconFieldModule, + InputIconModule, + MessagesModule, + TagModule, + ConfirmPopupModule, + ToastModule, + ], + providers: [RxState, DialogService, ConfirmationService], + templateUrl: './utenti.component.html', + styleUrl: './utenti.component.scss', +}) +export class UtentiComponent implements OnInit { + //private state = inject(RxState); + + //model$ = this.state.select(); + + model$: Observable; + + showTransitionOptions = '500ms'; + + private childDialogRef: DynamicDialogRef | undefined; + + defaultUsers: FindAccountResDto[] = [ + { + creationDate: '', + expireDate: '', + id: 0, + profiles: [], + username: '', + firstName: '', + lastName: '', + status: { + description: null, + id: 0, + standardCode: null, + standardName: null, + }, + }, + { + creationDate: '', + expireDate: '', + id: 0, + profiles: [], + username: '', + firstName: '', + lastName: '', + status: { + description: null, + id: 0, + standardCode: null, + standardName: null, + }, + }, + ]; + + cols: TableColumn[] = [ + { + header: 'Nome', + field: 'firstName', + sortField: 'firstName', + }, + { + header: 'Cognome', + field: 'lastName', + sortField: 'lastName', + }, + + { + header: 'Email', + field: 'username', + sortField: 'username', + }, + { + header: 'Ruolo', + field: 'ruolo', + sortField: 'ruolo', + }, + { + header: 'Data creazione', + field: 'creationDate', + sortField: 'creationDate', + }, + { + header: 'Data fine validità', + field: 'expireDate', + sortField: 'expireDate', + }, + { + header: 'Status', + field: 'status.standardName', + sortField: 'status.id', + }, + { + header: 'Azioni', + field: 'azioni', + }, + ]; + + defaultSort = [{ field: 'cognome', order: 1 }]; + + @ViewChild('usersTable') usersTable!: Table; + + messages: ToastMessageOptions[] = []; + + constructor( + private utentiService: UtentiService, + private readonly dialogService: DialogService, + private confirmationService: ConfirmationService, + private state: RxState, + ) { + this.model$ = this.state.select(); + + this.state.set({ + users: [], + usersAreLoading: false, + usersTotalCount: 0, + selectedUser: undefined, + userIsLoading: false, + cdIsLoading: false, + }); + } + + ngOnInit() { + this.getUsers(); + } + + getUsers() { + const Users$ = this.utentiService.getUsers().pipe( + map((res) => ({ users: res.accounts, usersTotalCount: res.count })), + catchError((err) => { + this.messages = [ + { + severity: 'error', + life: 5000, + summary: 'Attenzione!', + detail: + 'Impossibile recuperare la lista utenti al momento, riprova più tardi', + }, + ]; + return of({}); + }), + startWith({ usersAreLoading: true }), + endWith({ usersAreLoading: false }), + ); + this.state.connect(Users$); + } + + createUser() { + this.childDialogRef = this.dialogService.open(ManageUsersDialogComponent, { + header: 'Crea utente', + modal: true, + style: { width: '120vw', maxWidth: '800px', minWidth: '400px' }, + data: { + isLoading: false, + dialogComponentName: ManageUsersDialogComponent.name, + } satisfies DynamicDialogData, + }); + + this.childDialogRef?.onClose.subscribe((result: string) => { + if (!result) return; + this.messages = [ + { + severity: 'success', + life: 5000, + summary: 'Operazione completata', + detail: 'Account creato con successo', + }, + ]; + this.getUsers(); + }); + } + + editUser(user: FindAccountResDto) { + const fetchUserById$ = of(EMPTY).pipe( + switchMap(() => + this.utentiService.getUserById(user.id).pipe( + catchError(() => of(null)), + tap((res) => { + if (!res) return; + this.childDialogRef = this.dialogService.open( + ManageUsersDialogComponent, + { + header: 'Modifica utente', + modal: true, + style: { width: '90vw', maxWidth: '800px', minWidth: '400px' }, + data: { + selectedUser: res, + dialogComponentName: ManageUsersDialogComponent.name, + } satisfies DynamicDialogData, + }, + ); + + this.childDialogRef?.onClose.subscribe((result: string) => { + if (!result) return; + this.messages = [ + { + severity: 'success', + summary: 'Operazione completata', + life: 5000, + detail: 'Account modificato con successo', + }, + ]; + this.getUsers(); + }); + }), + map(() => ({})), + startWith({ userIsLoading: true }), + endWith({ userIsLoading: false }), + ), + ), + ); + this.state.connect(fetchUserById$); + } + + editStipulatori(user: FindAccountResDto) { + const fetchUserById$ = of(EMPTY).pipe( + switchMap(() => + this.utentiService.getUserById(user.id).pipe( + catchError(() => of(null)), + tap((res) => { + if (!res) return; + this.childDialogRef = this.dialogService.open( + ManagestipulatoriDialogComponent, + { + header: 'Modifica utente', + modal: true, + style: { width: '90vw', maxWidth: '800px', minWidth: '400px' }, + data: { + selectedUser: res, + dialogComponentName: ManagestipulatoriDialogComponent.name, + } satisfies DynamicDialogData, + }, + ); + + this.childDialogRef?.onClose.subscribe((result: string) => { + if (!result) return; + this.messages = [ + { + severity: 'success', + summary: 'Operazione completata', + life: 5000, + detail: 'Stipulaori modificato con successo', + }, + ]; + this.getUsers(); + }); + }), + map(() => ({})), + startWith({ userIsLoading: true }), + endWith({ userIsLoading: false }), + ), + ), + ); + this.state.connect(fetchUserById$); + } + + showDeleteDialog(event: Event, user: FindAccountResDto): void { + this.confirmationService.confirm({ + target: event.target as EventTarget, + key: 'cd', + header: 'Elimina utente', + icon: 'pi pi-exclamation-triangle', + message: 'Sei sicuro di voler eliminare questo utente?', + acceptLabel: 'Sì, elimina', + acceptButtonStyleClass: 'p-button-rounded', + rejectButtonStyleClass: 'p-button-rounded p-button-outlined', + acceptIcon: 'pi pi-trash', + rejectLabel: 'Annulla', + accept: () => { + const saveDeleteChannel$ = this.utentiService.deleteUser(user.id).pipe( + catchError((err) => of(null)), + tap((res) => { + if (!res) return; + this.messages = [ + { + severity: 'success', + summary: 'Operazione completata!', + life: 5000, + detail: 'Account eliminato con successo', + }, + ]; + this.getUsers(); + }), + map(() => ({})), + startWith({ cdIsLoading: true }), + endWith({ cdIsLoading: false }), + ); + this.state.connect(saveDeleteChannel$); + }, + }); + } + + getSeverity(statusCode: 'Disabled' | 'Enabled') { + switch (statusCode) { + case 'Disabled': + return 'danger'; + + case 'Enabled': + return 'success'; + + default: + return 'danger'; + } + } + + // sendFirstAccessMail(event: Event, id: number) { + // this.confirmationService.confirm({ + // target: event.target as EventTarget, + // header: 'Invio mail prima attivazione', + // message: 'Sei sicuro di voler inviare la mail?', + // icon: 'pi pi-exclamation-triangle', + // acceptLabel: 'Invia', + // acceptButtonStyleClass: 'p-button-success', + // acceptIcon: 'pi pi-send', + // rejectLabel: 'Annulla', + // key: 'cd', + // accept: () => { + // const sendActivationMail$ = this.utentiService + // .sendActivationMail(id) + // .pipe( + // tap(() => { + // this.messages = [ + // { + // severity: 'success', + // summary: 'Operazione completata!', + // life: 5000, + // detail: 'Email inviata con successo', + // }, + // ]; + // }), + // catchError((err) => { + // this.messages = [ + // { + // severity: 'error', + // summary: 'Attenzione!', + // life: 5000, + // detail: + // 'Impossibile mandare la email in questo momento, riprova più tardi', + // }, + // ]; + // return throwError(() => new Error(err)); + // }), + // ); + // this.state.connect(sendActivationMail$); + // }, + // }); + // } + + sendFirstAccessMail(event: Event, id: number) { + this.confirmationService.confirm({ + target: event.target as EventTarget, + header: 'Invio mail prima attivazione', + message: 'Sei sicuro di voler inviare la mail?', + icon: 'pi pi-exclamation-triangle', + acceptLabel: 'Invia', + acceptButtonStyleClass: 'p-button-rounded', + rejectButtonStyleClass: 'p-button-rounded p-button-outlined', + acceptIcon: 'pi pi-send', + rejectLabel: 'Annulla', + key: 'cd', + accept: () => { + const sendActivationMail$ = this.utentiService + .sendActivationMail(id) + .pipe( + map((res) => ({ + messages: [ + { + severity: 'success', + summary: 'Operazione completata!', + life: 5000, + detail: 'Email inviata con successo', + }, + ], + })), + catchError((err) => { + return of({ + messages: [ + { + severity: 'error', + summary: 'Attenzione!', + life: 5000, + detail: + 'Impossibile mandare la email in questo momento, riprova più tardi', + }, + ], + }); + }), + ); + this.state.connect(sendActivationMail$); + }, + }); + } + isFinalDate(date: string) { + return dayjs(date) + .startOf('day') + .isBefore(dayjs('9998-12-31').startOf('day')); + } +} diff --git a/src/app/modules/main/utenti/utenti.routes.ts b/src/app/modules/main/utenti/utenti.routes.ts new file mode 100644 index 0000000..eee4078 --- /dev/null +++ b/src/app/modules/main/utenti/utenti.routes.ts @@ -0,0 +1,17 @@ +import { ExtraOptions, Routes } from '@angular/router'; +import { UtentiComponent } from './utenti.component'; + +export const routerOptions: ExtraOptions = { + anchorScrolling: 'enabled', + scrollPositionRestoration: 'enabled', + paramsInheritanceStrategy: 'always', +}; + +export const utentiRoutes: Routes = [ + { + path: '', + component: UtentiComponent, + children: [], + // data: { expectedPrivileges: ['ACCOUNT_MANAGER'] }, + }, +]; diff --git a/src/app/modules/main/utenti/utenti.service.ts b/src/app/modules/main/utenti/utenti.service.ts new file mode 100644 index 0000000..120020d --- /dev/null +++ b/src/app/modules/main/utenti/utenti.service.ts @@ -0,0 +1,139 @@ +import { HttpErrorResponse } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { CreateAccountDto, EditAccountDto } from '@api/models'; +import { + AccountsApiClient, + RolesApiClient, + StipulatoriApiClient, +} from '@api/services'; +import { catchError, throwError } from 'rxjs'; + +export type PASSWORD_MATCH_TYPE = 'MIN_8' | 'a-z' | 'A-Z'; + +@Injectable({ + providedIn: 'root', +}) +export class UtentiService { + constructor( + private accountsApiClient: AccountsApiClient, + private rolesApiClient: RolesApiClient, + private stipulatoriApiClient: StipulatoriApiClient, + ) {} + + getUsers() { + const params = { + body: {}, + }; + return this.accountsApiClient.accountsControllerFetchAccounts(params).pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + getRoles() { + const params = { + body: {}, + }; + return this.rolesApiClient.rolesControllerFetchRoles(params).pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + getStipulatori() { + return this.stipulatoriApiClient + .stipulatoriControllerFindManyStipulatori() + .pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + getStipulatoriByAccountId(idAccount: number) { + const params = { + id: idAccount, + }; + + return this.accountsApiClient + .accountsControllerGetAccountStipulatori(params) + .pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + editStipulatori(id: number, params: any) { + const param = { + id: id, + body: params, + }; + return this.accountsApiClient + .accountsControllerEditAccountStipulatori(param) + .pipe( + catchError((err: unknown) => { + return throwError(() => err); + }), + ); + } + + getUserById(id: number) { + const params = { + id: id, + }; + return this.accountsApiClient.accountsControllerFetchAccount(params).pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + createUser(params: CreateAccountDto) { + const param = { + body: params, + }; + return this.accountsApiClient.accountsControllerCreateAccount(param).pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + editUser(id: number, params: EditAccountDto) { + const param = { + id: id, + body: params, + }; + return this.accountsApiClient.accountsControllerEditAccount(param).pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + deleteUser(id: number) { + const param = { + id: id, + }; + return this.accountsApiClient.accountsControllerDeleteAccount(param).pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + sendActivationMail(id: number) { + const param = { + id: id, + }; + return this.accountsApiClient + .accountsControllerSendActivationLink(param) + .pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } +} diff --git a/src/app/modules/page-not-found/page-not-found.component.html b/src/app/modules/page-not-found/page-not-found.component.html new file mode 100644 index 0000000..80bc2d9 --- /dev/null +++ b/src/app/modules/page-not-found/page-not-found.component.html @@ -0,0 +1,42 @@ +
+
+ poseidon-layout +
+ +
+
+ Pagina non trovata + La pagina che stavi cercando non è stata trovata + + + poseidon-layout + + Consorzio MuSa +
+
+
+ diff --git a/src/app/modules/page-not-found/page-not-found.component.ts b/src/app/modules/page-not-found/page-not-found.component.ts new file mode 100644 index 0000000..c28e268 --- /dev/null +++ b/src/app/modules/page-not-found/page-not-found.component.ts @@ -0,0 +1,25 @@ +import { CommonModule } from '@angular/common'; +import { Component } from '@angular/core'; +import { RouterLink } from '@angular/router'; +import { ButtonDirective, ButtonModule } from 'primeng/button'; +import { Ripple, RippleModule } from 'primeng/ripple'; + +@Component({ + templateUrl: './page-not-found.component.html', + styles: [ + ` + :host ::ng-deep .p-button-label { + font-weight: 400; + } + `, + ], + imports: [ + ButtonDirective, + Ripple, + CommonModule, + RouterLink, + ButtonModule, + RippleModule, + ], +}) +export class PageNotFoundComponent {} diff --git a/src/app/modules/public/public.routes.ts b/src/app/modules/public/public.routes.ts new file mode 100644 index 0000000..7e01df8 --- /dev/null +++ b/src/app/modules/public/public.routes.ts @@ -0,0 +1,24 @@ +import { ExtraOptions, Routes } from '@angular/router'; +import { RedirectGuard } from '@core/guards'; + +export const routerOptions: ExtraOptions = { + anchorScrolling: 'enabled', + scrollPositionRestoration: 'enabled', + paramsInheritanceStrategy: 'always', +}; + +export const publicRoutes: Routes = [ + { + path: '', + canActivate: [RedirectGuard], + children: [], + }, + { + path: 'strutture', + // component: AppLayout, + loadChildren: () => + import('./strutture-pubbliche/strutture-pubbliche.routes').then( + (r) => r.strutturePubblicheRoutes, + ), + }, +]; diff --git a/src/app/modules/public/strutture-pubbliche/strutture-pubbliche.component.html b/src/app/modules/public/strutture-pubbliche/strutture-pubbliche.component.html new file mode 100644 index 0000000..fd85992 --- /dev/null +++ b/src/app/modules/public/strutture-pubbliche/strutture-pubbliche.component.html @@ -0,0 +1,272 @@ +@let vm = (model$ | async)!; +
+
+
+ poseidon-layout +
+
+
+ Consorzio Mu.Sa. +
+
+ Cerca strutture convenzionate +
+
+
+ + +
+
+ + + + +
+ @if (luogo.tipo === 'comune') { + +
+ {{ luogo.comune + }}{{ + luogo.codiceStato === 'ITA' + ? ' (' + luogo.siglaProvincia + ')' + : '' + }} + + {{ + luogo.codiceStato === 'ITA' + ? 'Comune' + : ('Stato estero' | titlecase) + }}{{ + luogo.codiceStato === 'ITA' + ? ': Italia → ' + + luogo.regione + + ' → ' + + luogo.provincia + + ' → ' + + luogo.comune + : '' + }} +
+ } @else if (luogo.tipo === 'stato') { + +
+ {{ luogo.stato }} + + {{ + luogo.codiceStato === 'ITA' + ? ('Stato' | titlecase) + : ('Stato estero' | titlecase) + }} +
+ } @else if (luogo.tipo === 'regione') { + +
+ {{ luogo.regione }} + + Regione + {{ ': Italia → ' + luogo.regione }} +
+ } @else if (luogo.tipo === 'provincia') { + +
+ {{ luogo.provincia }} + + Provincia + {{ + ': Italia → ' + luogo.regione + ' → ' + luogo.provincia + }} +
+ } +
+
+
+ + + + +
+ @if ( + cercaStruttureForm.errors?.['atLeastOneRequired'] && + vm.cercaStruttureFormSubmitted + ) { + Seleziona almeno un filtro. + } +
+ +
+ + + + +
+ + + +
+ + + + + + +
+
+ + + + +
+
+ {{ col.header }} + +
+
+ + +
+ + + + + + {{ row.struttura.nome }} +
+ Sito Web +
+ + + +

{{ row.struttura.indirizzo }}{{ row.struttura.numeroCivico ? ', ' + row.struttura.numeroCivico : '' }} +

+

+ {{ row.struttura.cap }} + {{ row.struttura.codiceLuogo ? row.struttura.codiceLuogo.comune + ' (' + + row.struttura.codiceLuogo.siglaProvincia + ')' : '' + }} +

+
+ CUP Pubblico: + {{ row.struttura.cupPubblico }} +
+
+ CUP Privato: + {{ row.struttura.cupPrivato }} +
+ + + + +
+ + + +
+ +
+ +
+ +
+ + + Nessuna struttura trovata. + + +
+
+ diff --git a/src/app/modules/public/strutture-pubbliche/strutture-pubbliche.component.scss b/src/app/modules/public/strutture-pubbliche/strutture-pubbliche.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/modules/public/strutture-pubbliche/strutture-pubbliche.component.ts b/src/app/modules/public/strutture-pubbliche/strutture-pubbliche.component.ts new file mode 100644 index 0000000..64428aa --- /dev/null +++ b/src/app/modules/public/strutture-pubbliche/strutture-pubbliche.component.ts @@ -0,0 +1,425 @@ +import { CommonModule } from '@angular/common'; +import { Component, ViewChild } from '@angular/core'; +import { + FormControl, + FormGroup, + FormsModule, + ReactiveFormsModule, +} from '@angular/forms'; +import { + GoogleMap, + GoogleMapsModule, + MapInfoWindow, + MapMarker, +} from '@angular/google-maps'; +import { LuogoRes, StrutturePubblicheResDto, TipoStruttura } from '@api/models'; +import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; +import { + faCity, + faGlobeEurope, + faHospital, + faMapLocationDot, +} from '@fortawesome/free-solid-svg-icons'; +import { RxState } from '@rx-angular/state'; +import { MessageService, ToastMessageOptions } from 'primeng/api'; +import { AutoCompleteModule } from 'primeng/autocomplete'; +import { ButtonModule } from 'primeng/button'; +import { DividerModule } from 'primeng/divider'; +import { DropdownModule } from 'primeng/dropdown'; +import { IconFieldModule } from 'primeng/iconfield'; +import { InputIconModule } from 'primeng/inputicon'; +import { InputTextModule } from 'primeng/inputtext'; +import { MultiSelectModule } from 'primeng/multiselect'; +import { RatingModule } from 'primeng/rating'; +import { Table, TableModule } from 'primeng/table'; +import { ToastModule } from 'primeng/toast'; +import { ToggleButtonModule } from 'primeng/togglebutton'; +import { + catchError, + EMPTY, + endWith, + map, + Observable, + of, + startWith, + switchMap, + tap, +} from 'rxjs'; +import { StrutturePubblicheControllerFindManyStrutture$Params } from '../../../../api/fn/strutture-pubbliche/strutture-pubbliche-controller-find-many-strutture'; +import { atLeastOneFilterRequired } from '../../main/strutture/strutture.component'; +import { TableColumn } from '../../shared'; +import { StrutturePubblicheService } from './strutture-pubbliche.service'; + +const cercaStruttureFormGroupFunc = () => { + return new FormGroup( + { + tipologiaStruttura: new FormControl(null), + luogo: new FormControl(null), + indirizzo: new FormControl(null), + }, + [atLeastOneFilterRequired], + ); +}; +export type cercaStruttureForm = ReturnType; +export type cercaStruttureFormValue = cercaStruttureForm['value']; + +export interface CercaStruttureComponentState { + strutture: StrutturePubblicheResDto[]; + tipologieStrutture: TipoStruttura[]; + filteredLuoghiEsteso: LuogoRes[]; + + cercaStruttureFormSubmitted: boolean; + tipologieStruttureAreLoading: boolean; + struttureAreLoading: boolean; + luoghiAreLoading: boolean; + isSearching: boolean; +} +type State = CercaStruttureComponentState; + +@Component({ + selector: 'app-strutture-pubbliche', + imports: [ + CommonModule, + FormsModule, + ReactiveFormsModule, + ButtonModule, + DividerModule, + MultiSelectModule, + ToggleButtonModule, + GoogleMapsModule, + AutoCompleteModule, + FontAwesomeModule, + InputTextModule, + DropdownModule, + ToastModule, + TableModule, + IconFieldModule, + InputIconModule, + RatingModule, + ], + providers: [RxState], + templateUrl: './strutture-pubbliche.component.html', + styleUrl: './strutture-pubbliche.component.scss', +}) +export class StrutturePubblicheComponent { + model$: Observable; + messages: ToastMessageOptions[] = []; + + @ViewChild('gmap', { static: false }) map!: GoogleMap; + @ViewChild(MapInfoWindow) infoWindow!: MapInfoWindow; + options: google.maps.MapOptions; + markerOptions: google.maps.MarkerOptions[] = []; + indirizzoGmaps: string = 'indirizoooo'; + + struttureTable!: Table; + calcolaIndirizzoDa: string | null | undefined; + @ViewChild('struttureTable') set table(table: Table) { + if (!table || this.struttureTable === table) return; + this.struttureTable = table; + } + + cercaStruttureForm = cercaStruttureFormGroupFunc(); + faCity = faCity; + faGlobeEurope = faGlobeEurope; + faMapLocationDot = faMapLocationDot; + faHospital = faHospital; + struttureConCoords: StrutturePubblicheResDto[] = []; + + cols: TableColumn[] = [ + { + header: 'Strutture', + field: 'struttura.nome', + sortField: 'struttura.nome', + }, + { + header: 'Indirizzo', + field: 'indirizzo', + }, + + { + header: 'Posizione', + field: 'posizione', + }, + ]; + + constructor( + private strutturePubblicheService: StrutturePubblicheService, + public state: RxState, + private messageService: MessageService, + ) { + this.model$ = this.state.select(); + this.state.set({ + strutture: [], + tipologieStrutture: [], + filteredLuoghiEsteso: [], + + cercaStruttureFormSubmitted: false, + tipologieStruttureAreLoading: false, + struttureAreLoading: false, + luoghiAreLoading: false, + isSearching: false, + }); + + const fetchTipologieStrutture$ = of(EMPTY).pipe( + switchMap(() => + this.strutturePubblicheService.getTipologieStrutture().pipe( + map((res) => ({ + tipologieStrutture: res, + })), + catchError(() => of({ tipologieStrutture: [] })), + startWith({ tipologieStruttureAreLoading: true }), + endWith({ tipologieStruttureAreLoading: false }), + ), + ), + ); + this.state.connect(fetchTipologieStrutture$); + + this.options = { + center: { lat: 45.4627123, lng: 9.1075213 }, + zoom: 8, + // mapId: 'c18657fa9d1be788abd38482', + }; + } + + fetchLuogo( + event: { originalEvent: Event; query: string }, + flagAttivo?: number, + ) { + const fetchCities$ = this.strutturePubblicheService + .getLuoghiEsteso(event.query, flagAttivo) + .pipe( + catchError((err) => { + return of(null); + }), + map((res) => ({ filteredLuoghiEsteso: res?.rows })), + ); + this.state.connect(fetchCities$); + } + + getStrutture() { + this.state.set({ + cercaStruttureFormSubmitted: true, + }); + if (this.cercaStruttureForm.invalid) { + return; + } + + const _form = this.cercaStruttureForm.value; + + this.cercaStruttureForm.disable(); + const params: StrutturePubblicheControllerFindManyStrutture$Params = { + indirizzo: _form.indirizzo, + tipoStruttura: _form.tipologiaStruttura, + luogo: _form.luogo?.luogo, + 'luogo.tipo': _form.luogo?.tipo, + }; + this.calcolaIndirizzoDa = _form.indirizzo; + + const strutture$ = this.strutturePubblicheService.getStrutture(params).pipe( + catchError(() => { + this.messageService.add({ + severity: 'error', + life: 5000, + summary: 'Attenzione!', + detail: + 'Impossibile recuperare la lista delle strutture in questo momento, riprova più tardi', + }); + return of([] as StrutturePubblicheResDto[]); + }), + tap((res) => { + this.cercaStruttureForm.enable(); + if (!res) return; + this.state.set(() => ({ + cercaStruttureFormSubmitted: false, + })); + this.gMapMarkers(res, false); + }), + map((res) => ({ strutture: res })), + startWith({ struttureAreLoading: true, isSearching: true }), + endWith({ struttureAreLoading: false, isSearching: false }), + ); + + this.state.connect(strutture$); + } + + openInfoWindow(marker: MapMarker, index: number) { + if (this.struttureConCoords.length === index) { + // se è home icon (il push è stato fatto alla fine, quindi sarà l'ultimo nella lista) + const contentStringHome = `
+

${this.indirizzoGmaps}

+
`; + this.infoWindow.infoWindow?.setContent(contentStringHome); + this.infoWindow.open(marker); + } else { + const info = this.struttureConCoords[index]; + const contentString = ` +
+
+ ${ + info.struttura.stelline + } +

${ + info.struttura.nome + }

+
+
+

+ ${info.struttura.indirizzo}${ + info.struttura.numeroCivico + ? ', ' + info.struttura.numeroCivico + : '' + } +

+

+ ${info.struttura.cap} ${info.struttura.codiceLuogo.comune} ${ + info.struttura.codiceLuogo.provincia + ? '(' + info.struttura.codiceLuogo.siglaProvincia + ')' + : '' + } +

+
+
+ `; + this.infoWindow.infoWindow?.setContent(contentString); + this.infoWindow.open(marker); + this.infoWindow.infoWindow?.addListener('domready', () => { + const el = document.getElementById(`facility_${info?.struttura.id}`); + if (el) { + el.addEventListener('click', () => { + // this.next(info); + }); + } + }); + } + } + + gMapMarkers(items: StrutturePubblicheResDto[], filter: boolean) { + // Filtra solo strutture con coordinate valide + const itemsWithCoords = items.filter((x) => { + const lat = this.parseCoord(x.struttura.latitudine); + const lng = this.parseCoord(x.struttura.longitudine); + return lat !== null && lng !== null; + }); + this.struttureConCoords = itemsWithCoords; + + if (!itemsWithCoords.length) { + this.markerOptions = []; + return; + } + + // Calcola centro mappa + const firstItem = itemsWithCoords[0]; + const centerLat = + this.parseCoord(firstItem.struttura.latitudine) ?? 45.472520078847595; + const centerLng = + this.parseCoord(firstItem.struttura.longitudine) ?? 9.194890732834459; + + this.options = { + center: { lat: centerLat, lng: centerLng }, + zoom: itemsWithCoords.length ? 13 : 11, + // mapId: 'c18657fa9d1be788abd38482', + }; + + // Marker strutture + this.markerOptions = itemsWithCoords.map((x, i) => ({ + position: { + lat: this.parseCoord(x.struttura.latitudine)!, + lng: this.parseCoord(x.struttura.longitudine)!, + }, + title: x.struttura.nome, + draggable: false, + icon: + !filter && i < 6 + ? 'https://maps.google.com/mapfiles/kml/paddle/blu-stars.png' + : undefined, + })); + + // Marker "home" + if (firstItem.startingLocation) { + this.markerOptions.push({ + position: firstItem.startingLocation, + title: this.indirizzoGmaps, + icon: { + url: 'https://maps.google.com/mapfiles/kml/pal3/icon56.png', + scaledSize: new google.maps.Size(50, 50), + }, + }); + } + + // Crea i marker cluster dopo che la mappa è pronta + // setTimeout(() => { + // if (!this.map?.googleMap) return; + + // const markers = this.markerOptions + // .filter((opt) => !!opt.position) + // .map((opt) => { + // return new google.maps.marker.AdvancedMarkerElement({ + // position: opt.position!, + // title: opt.title, + // map: this.map.googleMap!, + // }); + // }); + + // new MarkerClusterer({ + // map: this.map.googleMap, + // markers, + // }); + // }); + } + + private parseCoord(value?: string | null): number | null { + if (!value) return null; + const n = Number(value.replace(',', '.')); + return Number.isFinite(n) ? n : null; + } + + externalLink(url: string) { + window.open('//' + url, '_blank'); + } + + applyFilterGlobal($event: Event, stringVal: string) { + console.log(this.struttureTable); + + this.struttureTable.filterGlobal( + ($event.target as HTMLInputElement).value, + stringVal, + ); + } + + calculateMapsLink(struttura: StrutturePubblicheResDto): void { + // https://www.google.com/maps/dir/?api=1&origin=45.476333943968626,9.17169124076061&destination=45.4692422,9.16562&travelmode=driving + // https://www.google.com/maps/dir/?api=1&destination=45.4692422,9.16562&travelmode=driving + + const baseUrl = 'https://www.google.com/maps/dir/?api=1'; + const travelMode = 'driving'; + const destinationMode: 'latlng' | 'nameAddress' = 'nameAddress'; + + let url = ((destinationMode: 'latlng' | 'nameAddress') => { + switch (destinationMode) { + case 'nameAddress': { + let address = `${struttura.struttura.indirizzo}${ + struttura.struttura.numeroCivico + ? ', ' + struttura.struttura.numeroCivico + : '' + }`; + address += `${struttura.struttura.cap} ${struttura.struttura.codiceLuogo.comune}`; + address += `${struttura.struttura.codiceLuogo.provincia ? '(' + struttura.struttura.codiceLuogo.siglaProvincia + ')' : ''}`; + + const destination = encodeURIComponent( + `${struttura.struttura.nome}, ${address}`, + ); + return `${baseUrl}&destination=${destination}`; + } + case 'latlng': + return `${baseUrl}&destination=${struttura.struttura.latitudine},${struttura.struttura.longitudine}`; + } + })(destinationMode); + + if (this.calcolaIndirizzoDa) { + url = `${url}&origin=${this.calcolaIndirizzoDa}`; + } + + url = `${url}&travelmode=${travelMode}`; + window.open(url, '_blank'); + } +} diff --git a/src/app/modules/public/strutture-pubbliche/strutture-pubbliche.routes.ts b/src/app/modules/public/strutture-pubbliche/strutture-pubbliche.routes.ts new file mode 100644 index 0000000..7b4b322 --- /dev/null +++ b/src/app/modules/public/strutture-pubbliche/strutture-pubbliche.routes.ts @@ -0,0 +1,16 @@ +import { ExtraOptions, Routes } from '@angular/router'; +import { StrutturePubblicheComponent } from './strutture-pubbliche.component'; + +export const routerOptions: ExtraOptions = { + anchorScrolling: 'enabled', + scrollPositionRestoration: 'enabled', + paramsInheritanceStrategy: 'always', +}; + +export const strutturePubblicheRoutes: Routes = [ + { + path: '', + component: StrutturePubblicheComponent, + children: [], + }, +]; diff --git a/src/app/modules/public/strutture-pubbliche/strutture-pubbliche.service.ts b/src/app/modules/public/strutture-pubbliche/strutture-pubbliche.service.ts new file mode 100644 index 0000000..e65b67f --- /dev/null +++ b/src/app/modules/public/strutture-pubbliche/strutture-pubbliche.service.ts @@ -0,0 +1,50 @@ +import { HttpErrorResponse } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { StrutturePubblicheControllerFindManyStrutture$Params } from '@api/fn/strutture-pubbliche/strutture-pubbliche-controller-find-many-strutture'; +import { LuoghiApiClient, StrutturePubblicheApiClient } from '@api/services'; +import { catchError, map, throwError } from 'rxjs'; + +@Injectable({ + providedIn: 'root', +}) +export class StrutturePubblicheService { + constructor( + private strutturePubblicheApiClient: StrutturePubblicheApiClient, + private luoghiApiClient: LuoghiApiClient, + ) {} + + getStrutture(filters: StrutturePubblicheControllerFindManyStrutture$Params) { + return this.strutturePubblicheApiClient + .strutturePubblicheControllerFindManyStrutture(filters) + .pipe( + map((res) => res), + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + getLuoghiEsteso(q: string, flagAttivo?: number) { + const params = { + q: q, + flagAttivo: flagAttivo, + }; + + return this.luoghiApiClient.luoghiControllerFindLuogoEsteso(params).pipe( + map((res) => ({ rows: res, rowsTotalCount: res.length })), + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } + + getTipologieStrutture() { + return this.strutturePubblicheApiClient + .strutturePubblicheControllerFindManyTipiStrutture() + .pipe( + catchError((err: HttpErrorResponse) => { + return throwError(() => err); + }), + ); + } +} diff --git a/src/app/modules/recovery-password/recovery-password.component.html b/src/app/modules/recovery-password/recovery-password.component.html new file mode 100644 index 0000000..c54babe --- /dev/null +++ b/src/app/modules/recovery-password/recovery-password.component.html @@ -0,0 +1,250 @@ +@let vm = (model$ | async)!; +
+
+
+
+ Image +
+ {{ + vm.showRecovery + ? 'Recupera Password' + : vm.showReset + ? 'Imposta nuova password' + : '' + }} +
+
+ +
+ + + + + + + +
+ +
+ + + + +
Scegli una password
+
+ + +
    +
  • + Almeno una lettera minuscola +
  • +
  • + Almeno una lettera maiuscola o un numero +
  • +
  • + Minimo 8 caratteri +
  • +
+
+
+ La password deve essere di almeno 8 caratteri, deve contenere almeno + una lettera minuscola, una maiuscola e un numero + + + + Le due password inserite non corrispondono + + + + +
+ +
+ +
+ + +
+
+
diff --git a/src/app/modules/recovery-password/recovery-password.component.ts b/src/app/modules/recovery-password/recovery-password.component.ts new file mode 100644 index 0000000..81d1743 --- /dev/null +++ b/src/app/modules/recovery-password/recovery-password.component.ts @@ -0,0 +1,285 @@ +/* eslint-disable @typescript-eslint/require-await */ +/* eslint-disable @typescript-eslint/no-misused-promises */ +import { CommonModule } from '@angular/common'; +import { Component, inject } from '@angular/core'; +import { + FormControl, + FormGroup, + FormsModule, + ReactiveFormsModule, + Validators, +} from '@angular/forms'; +import { + ActivatedRoute, + NavigationExtras, + Router, + RouterLink, +} from '@angular/router'; +import { EditPasswordDto, LinkVerificationDto } from '@api/models'; +import { AuthService } from '@core/services'; +import { MustMatch } from '@core/validators/password-must-match.validator'; +import { RxState } from '@rx-angular/state'; +import { ToastMessageOptions } from 'primeng/api'; +import { ButtonModule } from 'primeng/button'; +import { CheckboxModule } from 'primeng/checkbox'; +import { DividerModule } from 'primeng/divider'; +import { InputTextModule } from 'primeng/inputtext'; +import { MessagesModule } from 'primeng/messages'; +import { PasswordModule } from 'primeng/password'; +import { ProgressSpinnerModule } from 'primeng/progressspinner'; +import { RippleModule } from 'primeng/ripple'; +import { catchError, delay, endWith, map, of, startWith, tap } from 'rxjs'; +import { RecoveryPasswordService } from './recovery-password.service'; + +const recoveryFormGroupFunc = () => ({ + email: new FormControl(null, { + validators: [Validators.required, Validators.email], + }), +}); +export type RecoveryForm = FormGroup>; +export type RecoveryFormValue = RecoveryForm['value']; + +const setPasswordFormGroupFunc = () => ({ + password: new FormControl('', { + nonNullable: true, + validators: [ + Validators.required, + Validators.minLength(8), + Validators.pattern(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*\W).{8,}$/), + ], + }), + confirmPassword: new FormControl('', { + nonNullable: true, + validators: [Validators.required], + }), +}); +export type SetPasswordForm = FormGroup< + ReturnType +>; +export type SetPasswordFormValue = SetPasswordForm['value']; + +export interface recoveryState { + submitted: boolean; + isLoading: boolean; + showRecovery: boolean; + showReset: boolean; +} +type State = recoveryState; + +@Component({ + templateUrl: './recovery-password.component.html', + standalone: true, + imports: [ + RouterLink, + CommonModule, + InputTextModule, + FormsModule, + ReactiveFormsModule, + ButtonModule, + MessagesModule, + CheckboxModule, + FormsModule, + RippleModule, + PasswordModule, + DividerModule, + ProgressSpinnerModule, + ], + providers: [RxState], +}) +export class RecoveryPasswordComponent { + private state = inject(RxState); + + showTransitionOptions = '500ms'; + model$ = this.state.select(); + + recoveryForm = new FormGroup(recoveryFormGroupFunc()); + setPasswordForm = new FormGroup(setPasswordFormGroupFunc(), { + validators: MustMatch('password', 'confirmPassword'), + }); + + messages: ToastMessageOptions[] = []; + urlP: string | undefined; + + constructor( + private authService: AuthService, + public recoveryService: RecoveryPasswordService, + private activatedRoute: ActivatedRoute, + private router: Router, + ) { + this.authService.purgeAuth(); + this.urlP = this.router.url.split('/').pop(); + this.state.set({ + submitted: false, + isLoading: false, + showRecovery: false, + showReset: false, + }); + + this.activatedRoute.queryParamMap.subscribe(async (params) => { + const id = Number(params.get('code')); + const username = params.get('username'); + const token = params.get('token'); + if (id && username && token) { + this.linkVerification({ id, username, token }); + } else { + this.state.set({ showRecovery: true }); + } + }); + } + + submit() { + this.state.set({ submitted: true, isLoading: false }); + this.messages = []; + + if (this.recoveryForm.invalid) { + return; + } + const form = this.recoveryForm.value; + const params = { + username: form.email!, + }; + this.recoveryForm.disable(); + const recovery$ = this.authService.recoverPassword(params).pipe( + catchError((err) => { + this.messages = [ + { + severity: 'error', + summary: 'Attenzione!', + detail: + 'Impossibile effettuare il recupero password in questo momento, riprova più tardi', + }, + ]; + return of(null); + }), + tap((res) => { + this.recoveryForm.enable(); + if (!res) return; + this.messages = [ + { + severity: 'success', + summary: 'Ci siamo quasi!', + detail: + 'Se risulti iscritto riceverai una mail con il link per ripristinare la password', + }, + ]; + this.state.set({ showRecovery: false }); + }), + map(() => ({})), + startWith({ isLoading: true }), + endWith({ isLoading: false }), + ); + this.state.connect(recovery$); + } + + linkVerification(params: LinkVerificationDto) { + const verify$ = this.authService.linkVerification(params).pipe( + delay(500), + catchError((err) => { + this.messages = [ + { + severity: 'error', + summary: err.error.title || 'Attenzione!', + detail: err.error.message || 'Link non valido o scaduto', + }, + ]; + this.state.set({ showReset: false }); + return of(null); + }), + tap((res) => { + if (!res) return; + this.state.set({ showReset: true }); + }), + map(() => ({})), + startWith({ isLoading: true }), + endWith({ isLoading: false }), + ); + this.state.connect(verify$); + } + + submitSetPassword() { + if (this.setPasswordForm.invalid) { + return; + } + const form = this.setPasswordForm.value; + this.state.set({ isLoading: true }); + this.activatedRoute.queryParamMap.subscribe(async (params) => { + const id = Number(params.get('code')); + const username = params.get('username'); + const token = params.get('token'); + + if (id && username && token) { + this.setPassword({ id, username, password: form.password!, token }); + } else { + this.state.set({ showRecovery: true }); + this.messages = [ + { + severity: 'error', + summary: 'Attenzione!', + detail: `Impossibile ripristinare la password in questo momento, riprova più tardi`, + }, + ]; + this.state.set({ isLoading: true }); + } + }); + } + + setPassword(params: EditPasswordDto) { + this.setPasswordForm.disable(); + const setPassword$ = this.authService.setPassword(params).pipe( + catchError((err) => { + this.messages = [ + { + severity: 'error', + summary: err.error.title || 'Attenzione!', + detail: + err.error.message || + `Impossibile ${ + this.urlP === 'recupera-password' ? 'ripristinare' : 'impostare' + } la password in questo momento, riprova più tardi`, + }, + ]; + return of(null); + }), + tap((res) => { + this.setPasswordForm.enable(); + if (!res) return; + this.state.set({ showReset: false }); + this.showTransitionOptions = '0ms'; + this.messages = [ + { + severity: 'success', + summary: `PASSWORD ${ + this.urlP === 'recupera-password' ? 'RIPRISTINATA' : 'IMPOSTATA' + }!`, + detail: 'Verrai reindirizzato al login entro 5 secondi...', + }, + ]; + let timer = 5; + const interval = setInterval(() => { + timer -= 1; + const unit = timer === 1 ? 'secondo' : 'secondi'; + this.messages = [ + { + severity: 'success', + summary: `PASSWORD ${ + this.urlP === 'recupera-password' ? 'RIPRISTINATA' : 'IMPOSTATA' + }!`, + detail: `Verrai reindirizzato al login entro ${timer} ${unit}...`, + }, + ]; + if (timer === 0) { + clearInterval(interval); + const navigationExtras: NavigationExtras = { + queryParams: { email: params.username }, + }; + this.router.navigate(['/login'], navigationExtras); + } + }, 1000); + }), + map(() => ({})), + startWith({ isLoading: true }), + endWith({ isLoading: false }), + ); + this.state.connect(setPassword$); + } +} diff --git a/src/app/modules/recovery-password/recovery-password.service.ts b/src/app/modules/recovery-password/recovery-password.service.ts new file mode 100644 index 0000000..9541689 --- /dev/null +++ b/src/app/modules/recovery-password/recovery-password.service.ts @@ -0,0 +1,29 @@ +import { Injectable } from '@angular/core'; + +export type PASSWORD_MATCH_TYPE = 'MIN_8' | 'a-z' | 'A-Z'; + +@Injectable({ + providedIn: 'root', +}) +export class RecoveryPasswordService { + constructor() {} + + stringMatch(type: PASSWORD_MATCH_TYPE, value: string): boolean { + if (!value) { + return false; + } + let regex: RegExp; + switch (type) { + case 'a-z': + regex = /^.*[a-z].*$/g; + break; + case 'A-Z': + regex = /^(?=.*[A-Z0-9]).+$/g; + break; + case 'MIN_8': + regex = /^.{8,}$/g; + break; + } + return regex.test(value); + } +} diff --git a/src/app/modules/shared/components/google-place-autocomplete/google-place-autocomplete.component.html b/src/app/modules/shared/components/google-place-autocomplete/google-place-autocomplete.component.html new file mode 100644 index 0000000..4966c14 --- /dev/null +++ b/src/app/modules/shared/components/google-place-autocomplete/google-place-autocomplete.component.html @@ -0,0 +1,46 @@ +@let vm = model$ | async; + + +
+ +
+ {{ place.description }} + @if (vm?.codiceLuogo) { + + {{ vm?.codiceLuogo?.comune }}, + {{ vm?.codiceLuogo?.siglaProvincia }} + } +
+
+
+ +
+ Powered by Google +
+
+
diff --git a/src/app/modules/shared/components/google-place-autocomplete/google-place-autocomplete.component.scss b/src/app/modules/shared/components/google-place-autocomplete/google-place-autocomplete.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/modules/shared/components/google-place-autocomplete/google-place-autocomplete.component.ts b/src/app/modules/shared/components/google-place-autocomplete/google-place-autocomplete.component.ts new file mode 100644 index 0000000..73e813c --- /dev/null +++ b/src/app/modules/shared/components/google-place-autocomplete/google-place-autocomplete.component.ts @@ -0,0 +1,165 @@ +import { CommonModule } from '@angular/common'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { LuogoRes } from '@api/models'; +import { RxState } from '@rx-angular/state'; +import { + AutoCompleteCompleteEvent, + AutoCompleteModule, + AutoCompleteSelectEvent, +} from 'primeng/autocomplete'; +import { Observable, Subject, takeUntil } from 'rxjs'; + +interface PlaceAutocompleteState { + codiceLuogo: LuogoRes | null; + autocompleteRes: AutocompleteRes; + predictions: Prediction[]; + indirizzo: string | null; + disabled: boolean; +} +type State = PlaceAutocompleteState; + +interface Prediction { + placeId: string; + description: string; +} + +export interface AutocompleteRes { + indirizzo: string | null; + cap: string | null; + civico: string | null; + valutazione: number | null; + latitudine: string | null; + longitudine: string | null; +} + +@Component({ + selector: 'app-google-place-autocomplete', + imports: [CommonModule, FormsModule, AutoCompleteModule], + templateUrl: './google-place-autocomplete.component.html', + styleUrl: './google-place-autocomplete.component.scss', + providers: [RxState], +}) +export class GooglePlaceAutocompleteComponent { + model$: Observable; + private destroy$ = new Subject(); + + @Input() value!: Observable; + @Input() set codiceLuogo(codiceLuogo: LuogoRes | null) { + this.state.set({ codiceLuogo: codiceLuogo ?? null }); + } + @Input() set disabled(disabled: boolean) { + this.state.set({ disabled: disabled ?? false }); + } + @Output() autoCompleteSelected: EventEmitter = + new EventEmitter(); + + private autocompleteService = new google.maps.places.AutocompleteService(); + private request: google.maps.places.AutocompletionRequest = { + componentRestrictions: { country: 'it' }, + input: '', + }; + + constructor(private state: RxState) { + this.model$ = this.state.select(); + this.state.set({ + predictions: [], + indirizzo: null, + }); + } + + ngOnInit() { + this.value + .pipe(takeUntil(this.destroy$)) + .subscribe((val: string | null) => { + this.state.set({ indirizzo: val }); + }); + } + + getPlacePredictions(event: AutoCompleteCompleteEvent) { + const value = event.query; + const codiceLuogo = this.state.get('codiceLuogo'); + const citta = codiceLuogo?.comune; + const provincia = codiceLuogo?.siglaProvincia; + const stato = codiceLuogo?.stato; + + if (!value) return; + this.request.input = `${value}${codiceLuogo ? ', ' : ''} ${citta ?? ''}${provincia ? ', ' + provincia : ''}${stato ? ', ' + stato : ''}`; + void this.autocompleteService.getPlacePredictions( + this.request, + (predictions, status) => { + if ( + status != google.maps.places.PlacesServiceStatus.OK || + !predictions + ) { + predictions = []; + } + this.state.set({ + predictions: predictions.map((x) => ({ + placeId: x.place_id, + description: x.description, + })), + }); + }, + ); + } + + getPlaceDetail(event: AutoCompleteSelectEvent) { + const request: google.maps.places.PlaceDetailsRequest = { + placeId: event.value.placeId, + fields: ['name', 'geometry', 'address_components', 'place_id', 'rating'], + }; + const service = new google.maps.places.PlacesService( + document.createElement('div'), + ); + service.getDetails(request, (place, status) => { + if (status === google.maps.places.PlacesServiceStatus.OK && place) { + this.fillInAddress(place); + } + }); + } + + fillInAddress(place: google.maps.places.PlaceResult) { + const latitudine = place.geometry?.location?.lat()?.toString() ?? null; + const longitudine = place.geometry?.location?.lng()?.toString() ?? null; + const valutazione = Math.round(place.rating ?? 0); + + const { indirizzo, cap, civico } = (place.address_components ?? []).reduce( + (acc, component) => { + switch (component.types[0]) { + case 'street_number': + acc.civico = component.long_name; + break; + case 'route': + acc.indirizzo = component.long_name; + break; + case 'postal_code': + acc.cap = component.long_name; + break; + case 'postal_code_suffix': + acc.cap = acc.cap + ? `${acc.cap}-${component.long_name}` + : component.long_name; + break; + } + return acc; + }, + {} as { indirizzo?: string; cap?: string; civico?: string }, + ); + + this.autoCompleteSelected.emit({ + indirizzo: indirizzo ?? null, + cap: cap ?? null, + civico: civico ?? null, + valutazione, + latitudine, + longitudine, + }); + this.state.set({ indirizzo: indirizzo ?? null }); + } + + ngOnDestroy() { + this.destroy$.next(); + this.destroy$.complete(); + } +} diff --git a/src/app/modules/shared/components/manage-model/manage-model.component.html b/src/app/modules/shared/components/manage-model/manage-model.component.html new file mode 100644 index 0000000..3edc2c0 --- /dev/null +++ b/src/app/modules/shared/components/manage-model/manage-model.component.html @@ -0,0 +1,279 @@ +@let vm = (model$ | async)!; + +
+
+ + + +
+ + +
+
+ + +
+
+ +
+
+
+ + + +
+
+ + +
+ +
+ + + + +
+
+ {{ col.header }} + +
+ + + + + + +
+ + +
+ + + @if (vm.filtriAreLoading) { + + } + + + + {{ row.nome }} + + + + {{ row.ts | date: 'dd/MM/yyyy HH:mm:ss' }} + + + + +
+ + + +
+ +
+ +
+
+ +
+ +
+
+ + + + + + + + + + + + + + + +
+ + diff --git a/src/app/modules/shared/components/manage-model/manage-model.component.scss b/src/app/modules/shared/components/manage-model/manage-model.component.scss new file mode 100644 index 0000000..417fa7c --- /dev/null +++ b/src/app/modules/shared/components/manage-model/manage-model.component.scss @@ -0,0 +1,7 @@ +.w-max { + width: max-content !important; +} + +.h-fit { + height: fit-content !important; +} diff --git a/src/app/modules/shared/components/manage-model/manage-model.component.ts b/src/app/modules/shared/components/manage-model/manage-model.component.ts new file mode 100644 index 0000000..6d4c9ee --- /dev/null +++ b/src/app/modules/shared/components/manage-model/manage-model.component.ts @@ -0,0 +1,422 @@ +import { CommonModule } from '@angular/common'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { RxState } from '@rx-angular/state'; +import { ConfirmationService, ToastMessageOptions } from 'primeng/api'; +import { ButtonModule } from 'primeng/button'; +import { CalendarModule } from 'primeng/calendar'; +import { ConfirmDialogModule } from 'primeng/confirmdialog'; +import { DialogModule } from 'primeng/dialog'; +import { DividerModule } from 'primeng/divider'; +import { DropdownModule } from 'primeng/dropdown'; +import { DialogService } from 'primeng/dynamicdialog'; +import { InputNumberModule } from 'primeng/inputnumber'; +import { InputTextModule } from 'primeng/inputtext'; +import { MessagesModule } from 'primeng/messages'; +import { MultiSelectModule } from 'primeng/multiselect'; +import { SelectModule } from 'primeng/select'; +import { SkeletonModule } from 'primeng/skeleton'; +import { TableModule } from 'primeng/table'; +import { TabViewModule } from 'primeng/tabview'; +import { ToastModule } from 'primeng/toast'; +import { ToggleButtonModule } from 'primeng/togglebutton'; +import { TooltipModule } from 'primeng/tooltip'; +import { + catchError, + EMPTY, + endWith, + map, + Observable, + of, + startWith, + switchMap, + tap, +} from 'rxjs'; +import { FiltroExcerptRes } from '../../../../../api/models'; +import { MyDirectiveModule } from '../../../../core/directives/my-directive.module'; +import { TableColumn } from '../../../../core/models'; +import { CruscottiService } from '../../../main/cruscotti/cruscotti.service'; + +export interface ManageModelComponentState { + isLoading: boolean; + showSaveModelDialog: boolean; + nomeModello: string; + showViewModelDialog: boolean; + nomeModelloIsSubmitted: boolean; + modelloIsSaving: boolean; + modelValue: any; + misure: string[]; + ambiente: string; + transformedValues: { value: string; order: boolean; label: string }[]; + filtri: FiltroExcerptRes[]; + filtriAreLoading: boolean; + filtriTotalCount: number; + modelloIsApplying: boolean; + isSaving: boolean; + modelloIsDeleting: boolean; + cdIsLoading: boolean; +} +type State = ManageModelComponentState; + +@Component({ + selector: 'app-manage-model', + imports: [ + CommonModule, + TableModule, + InputTextModule, + SkeletonModule, + ButtonModule, + TooltipModule, + FormsModule, + ReactiveFormsModule, + MultiSelectModule, + CalendarModule, + DropdownModule, + ConfirmDialogModule, + TabViewModule, + MyDirectiveModule, + DividerModule, + SelectModule, + InputNumberModule, + DialogModule, + MessagesModule, + ToggleButtonModule, + ToastModule, + ], + templateUrl: './manage-model.component.html', + styleUrl: './manage-model.component.scss', + providers: [RxState, DialogService, ConfirmationService], +}) +export class ManageModelComponent { + messages: ToastMessageOptions[] = []; + model$: Observable; + dialogMessages: ToastMessageOptions[] = []; + buttonMessages: ToastMessageOptions[] = []; + + emptyFiltri: FiltroExcerptRes = { + id: 0, + + json: '', + + nome: '', + + ts: '', + }; + + emptyFiltriArray = Array(10).fill(this.emptyFiltri); + + cols: TableColumn[] = [ + { + header: 'Nome', + field: 'nome', + sortField: 'nome', + }, + { + header: 'Ultima modifica', + field: 'ts', + sortField: 'ts', + }, + { + header: 'Azioni', + field: 'azioni', + }, + ]; + + showTransitionOptions = '500ms'; + + @Input() set modelValue(modelValue: any) { + this.state.set({ + modelValue: modelValue, + }); + } + + @Input() set ambiente(ambiente: string) { + this.state.set({ + ambiente: ambiente, + }); + } + + @Input() set misure(misure: string[]) { + this.state.set({ + misure: misure, + }); + } + + @Input() set transformedValues( + transformedValues: { value: string; order: boolean; label: string }[], + ) { + this.state.set({ + transformedValues: transformedValues, + }); + } + + @Output() resJson: EventEmitter = new EventEmitter(); + + constructor( + public state: RxState, + private cruscottiService: CruscottiService, + private confirmationService: ConfirmationService, + ) { + this.model$ = this.state.select(); + this.state.set({ + isLoading: false, + showSaveModelDialog: false, + nomeModello: '', + showViewModelDialog: false, + nomeModelloIsSubmitted: false, + modelloIsSaving: false, + modelValue: '', + ambiente: '', + transformedValues: [], + filtri: [], + misure: [], + filtriAreLoading: false, + filtriTotalCount: 0, + modelloIsApplying: false, + isSaving: false, + modelloIsDeleting: false, + cdIsLoading: false, + }); + } + + getFiltriByAmbiente(ambiente: string) { + const fetchFiltriByAmbiente$ = of(EMPTY).pipe( + switchMap(() => + this.cruscottiService.getFiltriByAmbiente(ambiente).pipe( + map((res) => ({ + filtri: res, + filtriTotalCount: res.length, + })), + tap(() => { + this.state.set({ + showViewModelDialog: true, + }); + }), + startWith({ filtriAreLoading: true }), + endWith({ filtriAreLoading: false }), + ), + ), + ); + this.state.connect(fetchFiltriByAmbiente$); + } + + createModello() { + this.state.set({ nomeModelloIsSubmitted: true }); + if (!this.state.get('nomeModello')) { + return; + } + const modelValue = this.state.get('modelValue'); + const misure = this.state.get('misure'); + const polishedParams = { + nome: this.state.get('nomeModello'), + json: JSON.stringify({ + ...modelValue, + misure, + ordinamento: this.state.get('transformedValues'), + }), + }; + const saveAddModello$ = this.cruscottiService + .createFiltroByAmbiente(this.state.get('ambiente'), polishedParams) + .pipe( + catchError((err) => { + if (err.error.statusCode === 400) { + this.dialogMessages = [ + { + severity: 'error', + life: 5000, + summary: 'Attenzione!', + detail: 'Questo nome è già utilizzato', + }, + ]; + } else { + this.dialogMessages = [ + { + severity: 'error', + life: 5000, + summary: 'Attenzione!', + detail: 'Qualcosa è andato storto, riprovare più.', + }, + ]; + } + return of(null); + }), + tap((res) => { + if (!res) return; + this.buttonMessages = [ + { + severity: 'success', + summary: 'Operazione completata!', + life: 5000, + detail: 'Modello creato con successo', + }, + ]; + this.state.set(() => ({ + prestazioniRimborsiFormSubmitted: false, + nomeModelloIsSubmitted: false, + })); + this.closeSaveModelDialog(); + }), + map(() => ({})), + startWith({ modelloIsSaving: true }), + endWith({ modelloIsSaving: false }), + ); + this.state.connect(saveAddModello$); + } + + sovrascriviModello(event: Event, idModello: number) { + const modelValue = this.state.get('modelValue'); + const ordinamento = this.state.get('transformedValues'); + const misure = this.state.get('misure'); + + const polishedParams = { + json: JSON.stringify({ + ...modelValue, + misure, + ordinamento, + }), + }; + this.confirmationService.confirm({ + target: event.target as EventTarget, + key: 'cd', + header: 'Sovrascrivi modello', + icon: 'pi pi-exclamation-triangle', + message: + 'Questo modello verrà sostituito con i filtri selezionati in questo momento, procedere?', + acceptLabel: 'Sì, sovrascrivi', + //acceptButtonStyleClass: 'p-button-danger', + acceptIcon: 'pi pi-check', + rejectLabel: 'Annulla', + accept: () => { + const saveEditModello$ = this.cruscottiService + .editFiltroByAmbiente(idModello, polishedParams) + .pipe( + catchError(() => { + this.dialogMessages = [ + { + severity: 'error', + summary: 'Qualcosa è andato storto!', + life: 5000, + detail: + 'Impossibile sovrascrivere il modello al momento, riprova più tardi', + }, + ]; + return of(null); + }), + tap((res) => { + if (!res) return; + this.dialogMessages = [ + { + severity: 'success', + summary: 'Operazione completata!', + life: 5000, + detail: 'Modello sovrascritto con successo', + }, + ]; + this.getFiltriByAmbiente(this.state.get('ambiente')); + }), + map(() => ({})), + startWith({ isSaving: true }), + endWith({ isSaving: false }), + ); + this.state.connect(saveEditModello$); + }, + }); + } + + showDeleteModelloDialog(event: Event, idModello: number): void { + this.confirmationService.confirm({ + target: event.target as EventTarget, + key: 'cd', + header: 'Elimina modello', + icon: 'pi pi-exclamation-triangle', + message: 'Sei sicuro di voler eliminare questo modello?', + acceptLabel: 'Sì, elimina', + acceptButtonStyleClass: 'p-button-danger', + acceptIcon: 'pi pi-trash', + rejectLabel: 'Annulla', + accept: () => { + const deleteModello$ = this.cruscottiService + .deleteFiltro(idModello) + .pipe( + catchError(() => { + this.messages = [ + { + severity: 'error', + life: 5000, + summary: 'Attenzione!', + detail: + 'Impossibile eliminare il modello al momento, riprova più tardi', + }, + ]; + return of(null); + }), + tap((res) => { + if (!res) return; + this.dialogMessages = [ + { + severity: 'success', + summary: 'Operazione completata!', + life: 5000, + detail: 'Modello eliminato con successo', + }, + ]; + this.getFiltriByAmbiente(this.state.get('ambiente')); + }), + map(() => ({})), + startWith({ modelloIsDeleting: true }), + endWith({ modelloIsDeleting: false }), + ); + this.state.connect(deleteModello$); + }, + }); + } + + applicaModello(idFiltro: number) { + const saveApplicaModello$ = this.cruscottiService + .getFiltroById(idFiltro) + .pipe( + catchError(() => { + this.dialogMessages = [ + { + severity: 'error', + life: 5000, + summary: 'Attenzione!', + detail: 'Qualcosa è andato storto, riprovare più.', + }, + ]; + return of(null); + }), + tap((res) => { + if (!res) return; + this.resJson.emit(res.json); + this.closeUpdateModelDialog(); + }), + map(() => ({})), + ); + this.state.connect(saveApplicaModello$); + } + + openSaveModelDialog() { + this.state.set({ + showSaveModelDialog: true, + }); + } + + openViewModelliDialog() { + this.getFiltriByAmbiente(this.state.get('ambiente')); + } + + closeSaveModelDialog() { + this.state.set({ + showSaveModelDialog: false, + nomeModello: '', + nomeModelloIsSubmitted: false, + }); + } + + closeUpdateModelDialog() { + this.state.set({ + showViewModelDialog: false, + }); + } +} diff --git a/src/app/modules/shared/components/upload-documentazione-cf/upload-documentazione.component.html b/src/app/modules/shared/components/upload-documentazione-cf/upload-documentazione.component.html new file mode 100644 index 0000000..812ddc9 --- /dev/null +++ b/src/app/modules/shared/components/upload-documentazione-cf/upload-documentazione.component.html @@ -0,0 +1,97 @@ +@let vm = (model$ | async)!; + +
+
+ + + + +

+ Nessun documento selezionato +

+
+ +
+
{{ file.name }}
+
+ {{ file.size | filesize }} +
+
+ +
+
+
+
+
+
+ + + + + + + +
diff --git a/src/app/modules/shared/components/upload-documentazione-cf/upload-documentazione.component.scss b/src/app/modules/shared/components/upload-documentazione-cf/upload-documentazione.component.scss new file mode 100644 index 0000000..42d7911 --- /dev/null +++ b/src/app/modules/shared/components/upload-documentazione-cf/upload-documentazione.component.scss @@ -0,0 +1,3 @@ +::ng-deep .uploadTrasmetti .p-fileupload-files { + display: block; +} diff --git a/src/app/modules/shared/components/upload-documentazione-cf/upload-documentazione.component.ts b/src/app/modules/shared/components/upload-documentazione-cf/upload-documentazione.component.ts new file mode 100644 index 0000000..0d38d18 --- /dev/null +++ b/src/app/modules/shared/components/upload-documentazione-cf/upload-documentazione.component.ts @@ -0,0 +1,199 @@ +import { CommonModule } from '@angular/common'; +import { HttpEventType } from '@angular/common/http'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; +import { ConvenzioniStrutture, Struttura } from '@api/models'; +import { FileSizePipe, FileSizePipeBinary } from '@core/pipes'; +import { UtilsService } from '@core/services/utils.service'; +import { environment } from '@environments/environment'; +import { RxState } from '@rx-angular/state'; +import { some, sumBy } from 'lodash'; +import { ToastMessageOptions } from 'primeng/api'; +import { ButtonModule } from 'primeng/button'; +import { DialogModule } from 'primeng/dialog'; +import { FileUpload, FileUploadModule } from 'primeng/fileupload'; +import { MessagesModule } from 'primeng/messages'; +import { ToastModule } from 'primeng/toast'; +import { + catchError, + EMPTY, + endWith, + map, + Observable, + of, + startWith, + switchMap, + tap, +} from 'rxjs'; +import { UploadDocumentazioneService } from './upload-documentazione.service'; + +interface State { + isLoading: boolean; + isSaving: boolean; + + struttura: Struttura; + convenzione: ConvenzioniStrutture; + filesSizeSumExceed: boolean; + + visible: boolean; + submitted: boolean; +} + +@Component({ + selector: 'app-upload-documentazione', + imports: [ + CommonModule, + FileUploadModule, + DialogModule, + ReactiveFormsModule, + MessagesModule, + ButtonModule, + FileSizePipe, + FileSizePipeBinary, + ToastModule, + ], + templateUrl: './upload-documentazione.component.html', + styleUrls: ['./upload-documentazione.component.scss'], + providers: [RxState], +}) +export class UploadDocumentazioneComponent { + model$: Observable; + MAX_FILE_SIZE = environment.MAX_FILE_SIZE; + showTransitionOptions = '500ms'; + messages: ToastMessageOptions[] = []; + + @Input() set struttura(struttura: Struttura | undefined) { + if (!struttura) return; + this.state.set({ struttura }); + } + @Input() set convenzione(convenzione: ConvenzioniStrutture) { + if (!convenzione) return; + this.state.set({ convenzione }); + } + @Input() set visible(visible: boolean) { + this.state.set({ visible: visible ?? false }); + } + + @Output() close: EventEmitter = new EventEmitter(); + @Output() documentazioneUploaded: EventEmitter<{ message: string }> = + new EventEmitter<{ message: string }>(); + + constructor( + public readonly state: RxState, + private utilsService: UtilsService, + private uploadDocumentazioneService: UploadDocumentazioneService, + ) { + this.model$ = this.state.select(); + this.state.set({ + filesSizeSumExceed: false, + }); + const isLoading$ = this.state.select(['isSaving'], (s) => some(s)); + this.state.connect('isLoading', isLoading$); + } + + progressReport(fileUpload: FileUpload, $event: any) { + fileUpload.progress = $event; + } + + removeFile(event: Event, fileUpload: FileUpload, file: File) { + const index = fileUpload.files.indexOf(file); + fileUpload.remove(event, index); + this.checkIfTooLarge(fileUpload.files); + } + + resetUpload(fileUpload: FileUpload) { + this.state.set({ submitted: false }); + fileUpload.onProgress.emit({ + originalEvent: { + type: HttpEventType.UploadProgress, + loaded: 0, + total: 100, + }, + progress: 0, + }); + fileUpload.clear(); + } + + selectFile(files: File[]): void { + this.checkIfTooLarge(files); + } + + changeVisible(value: boolean) { + this.state.set({ visible: value }); + this.close.emit(value); + } + + cancel() { + this.changeVisible(false); + } + + checkIfTooLarge(files: File[]) { + const sumSize = sumBy(files, (f) => f.size); + const maxSize = this.formatBytes(environment.MAX_FILE_SIZE); + if (sumSize > maxSize) { + this.state.set({ filesSizeSumExceed: true }); + } else { + this.state.set({ filesSizeSumExceed: false }); + } + } + + formatBytes(bytes: number, decimals = 2) { + if (bytes === 0) { + return 0; + } + const k = 1024; + const dm = decimals < 0 ? 0 : decimals; + const i = Math.floor(Math.log(bytes) / Math.log(k)); + return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) * Math.pow(1000, i); + } + + save(fileUpload: FileUpload) { + this.state.set({ submitted: true }); + const tooLarge = this.state.get('filesSizeSumExceed'); + if (tooLarge || !fileUpload.files.length) { + return; + } + const params = { + id: this.state.get('struttura').id, + idConvenzione: this.state.get('convenzione').id, + body: { + files: fileUpload.files, + }, + }; + fileUpload.disabled = true; + + const caricaDocumentazione$ = of(EMPTY).pipe( + switchMap(() => + this.uploadDocumentazioneService.uploadDocumentazione(params).pipe( + catchError(() => { + fileUpload.disabled = false; + this.messages = [ + { + severity: 'error', + summary: 'Qualcosa è andato storto!', + life: 5000, + detail: 'Riprovare più tardi', + }, + ]; + // fileUpload.onProgress.emit(0); + return of(null); + }), + tap((res) => { + if (!res) return; + // if (res.status === 'progress' && fileUpload) { + // fileUpload.onProgress.emit(res['message']); + // } else if (res?.status === 201) { + // } + fileUpload.disabled = false; + this.changeVisible(false); + this.documentazioneUploaded.emit(res); + }), + map(() => ({})), + startWith({ isSaving: true }), + endWith({ isSaving: false }), + ), + ), + ); + this.state.connect(caricaDocumentazione$); + } +} diff --git a/src/app/modules/shared/components/upload-documentazione-cf/upload-documentazione.service.ts b/src/app/modules/shared/components/upload-documentazione-cf/upload-documentazione.service.ts new file mode 100644 index 0000000..2147300 --- /dev/null +++ b/src/app/modules/shared/components/upload-documentazione-cf/upload-documentazione.service.ts @@ -0,0 +1,30 @@ +import { Injectable } from '@angular/core'; +import { StruttureControllerUploadFiles$Params } from '@api/fn/strutture/strutture-controller-upload-files'; +import { StruttureApiClient } from '@api/services/strutture-api-client'; +import { UtilsService } from '@core/services/utils.service'; +import { MessageService } from 'primeng/api'; +import { catchError, throwError } from 'rxjs'; + +@Injectable({ + providedIn: 'root', +}) +export class UploadDocumentazioneService { + constructor( + private utilsService: UtilsService, + private struttureApiClient: StruttureApiClient, + private readonly messageService: MessageService, + ) {} + + uploadDocumentazione(params: StruttureControllerUploadFiles$Params) { + return this.struttureApiClient.struttureControllerUploadFiles(params).pipe( + catchError((err: unknown) => { + this.messageService.add({ + severity: 'error', + summary: 'Oops, qualcosa è andato storto!', + detail: `Riprova più tardi`, + }); + return throwError(() => err); + }), + ); + } +} diff --git a/src/app/modules/shared/index.ts b/src/app/modules/shared/index.ts new file mode 100644 index 0000000..9578609 --- /dev/null +++ b/src/app/modules/shared/index.ts @@ -0,0 +1 @@ +export * from './interfaces'; diff --git a/src/app/modules/shared/interfaces.ts b/src/app/modules/shared/interfaces.ts new file mode 100644 index 0000000..cb5b622 --- /dev/null +++ b/src/app/modules/shared/interfaces.ts @@ -0,0 +1,12 @@ +export type TableColumn = { + header: string; + field: string; + sortField?: string; + hidden?: boolean; + width?: number; + filter?: { + field: string; + type?: string; + display?: string; + }; +}; diff --git a/src/app/modules/shared/utils/dynamic-dialog-utils.ts b/src/app/modules/shared/utils/dynamic-dialog-utils.ts new file mode 100644 index 0000000..3a71bd2 --- /dev/null +++ b/src/app/modules/shared/utils/dynamic-dialog-utils.ts @@ -0,0 +1,24 @@ +import { RxState } from '@rx-angular/state'; +import { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog'; + +export type DynamicDialogData = Partial & { dialogComponentName: string }; + +export function handleDynamicDialog< + T extends { + dialogRef: DynamicDialogRef | null; + dialogConfig: DynamicDialogConfig> | null; + state: RxState; + }, + TState extends object, +>(this: T) { + if ( + this.dialogRef && + this.dialogConfig && + this.dialogConfig?.data?.dialogComponentName === this.constructor.name + ) { + this.state.set(this.dialogConfig.data); + } else { + this.dialogRef = null; + this.dialogConfig = null; + } +} diff --git a/src/assets/.gitkeep b/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/assets/css/app/_breadcrumb.scss b/src/assets/css/app/_breadcrumb.scss new file mode 100644 index 0000000..c436c22 --- /dev/null +++ b/src/assets/css/app/_breadcrumb.scss @@ -0,0 +1,37 @@ +.layout-breadcrumb { + background-color: var(--surface-card); + border-bottom: 1px solid var(--surface-border); + color: var(--surface-900); + padding: 0.5rem 2rem; + height: 35px; + + ul { + margin: 0; + padding: 0; + display: flex; + align-items: center; + list-style-type: none; + + li { + display: flex; + align-items: center; + + a { + line-height: 1; + color: var(--text-secondary); + text-transform: capitalize; + text-decoration: none; + } + + &:last-child { + a { + font-weight: 700; + } + } + + .chevron { + margin: 0 0.5rem; + } + } + } +} diff --git a/src/assets/css/app/_config.scss b/src/assets/css/app/_config.scss new file mode 100644 index 0000000..9ab3af6 --- /dev/null +++ b/src/assets/css/app/_config.scss @@ -0,0 +1,110 @@ +.layout-config { + .p-sidebar { + overflow: auto; + + .p-sidebar-content { + padding: 0 2rem; + } + + .p-sidebar-close { + top: 2rem; + right: 2rem; + z-index: 1; + } + } + + .grid > div { + padding: 1rem; + text-align: center; + + span { + display: block; + } + + button { + position: relative; + display: inline-flex; + justify-content: center; + } + } + + .themes-grid { + img { + width: 50px; + border-radius: 4px; + transition: transform 0.2s; + + &:hover { + transform: scale(1.1); + } + } + + span { + font-size: 0.875rem; + margin-top: 0.25rem; + } + } + + .config-title { + font-weight: 700; + font-size: 1.25rem; + margin: 2rem 0rem 1rem 0rem; + + &:first-child { + margin-top: 0; + } + } + + .config-scale { + display: flex; + align-items: center; + + .p-button { + margin-right: 0.5rem; + } + + i { + margin-right: 0.5rem; + font-size: 0.75rem; + color: var(--text-color-secondary); + + &.scale-active { + font-size: 1.25rem; + color: var(--primary-color); + } + } + } +} + +.layout-config-button { + display: block; + position: fixed; + width: 52px; + height: 52px; + line-height: 52px; + background-color: var(--primary-color); + text-align: center; + color: var(--primary-color-text); + top: 270px; + right: 0; + z-index: 100; + overflow: hidden; + cursor: pointer; + outline: 0 none; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + box-shadow: + 0 5px 5px -3px rgba(0, 0, 0, 0.2), + 0 8px 10px 1px rgba(0, 0, 0, 0.14), + 0 3px 14px 2px rgba(0, 0, 0, 0.12); + + i { + font-size: 26px; + line-height: inherit; + cursor: pointer; + transform: rotate(360deg); + transition: transform 1s; + } +} diff --git a/src/assets/css/app/_content.scss b/src/assets/css/app/_content.scss new file mode 100644 index 0000000..71fbe52 --- /dev/null +++ b/src/assets/css/app/_content.scss @@ -0,0 +1,34 @@ +.layout-content { + padding: 2rem; +} + +.badge-new { + border-radius: 4px; + padding: 0.25rem 0.5rem; + background-color: var(--green-500); + color: white; + margin-left: 1rem; + font-weight: 700; + font-size: 0.875rem; +} + +@media screen and (min-width: 1921px) { + .layout-content { + .block-category-title, + .block-category, + block-viewer, + .documentation, + .pricing-inner { + display: block; + width: 1478px; + margin-left: auto; + margin-right: auto; + } + } +} + +@media screen and (max-width: 992px) { + .layout-content { + padding: 2rem 1rem; + } +} diff --git a/src/assets/css/app/_content_block.scss b/src/assets/css/app/_content_block.scss new file mode 100644 index 0000000..35a25b4 --- /dev/null +++ b/src/assets/css/app/_content_block.scss @@ -0,0 +1,140 @@ +.block-section { + margin-bottom: 4rem; +} + +.block-header { + padding: 1rem 2rem; + background-color: var(--surface-section); + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border: 1px solid var(--surface-border); + display: flex; + align-items: center; + justify-content: space-between; + + .block-title { + font-weight: 700; + display: inline-flex; + align-items: center; + + .badge-free { + border-radius: 4px; + padding: 0.25rem 0.5rem; + background-color: var(--orange-500); + color: white; + margin-left: 1rem; + font-weight: 700; + font-size: 0.875rem; + } + } + + .block-actions { + display: flex; + align-items: center; + justify-content: space-between; + user-select: none; + margin-left: 1rem; + + a { + display: flex; + align-items: center; + margin-right: 0.75rem; + padding: 0.5rem 1rem; + border-radius: 4px; + border: 1px solid transparent; + transition: background-color 0.2s; + cursor: pointer; + + &:last-child { + margin-right: 0; + } + + &:not(.block-action-disabled):hover { + background-color: var(--surface-hover); + } + + &.block-action-active { + border-color: var(--primary-color); + color: var(--primary-color); + } + + &.block-action-copy { + i { + color: var(--primary-color); + font-size: 1.25rem; + } + } + + &.block-action-disabled { + opacity: 0.6; + cursor: auto !important; + } + + i { + margin-right: 0.5rem; + } + } + } +} + +.block-content { + padding: 0; + border: 1px solid var(--surface-border); + border-top: 0 none; +} + +pre[class*='language-'] { + margin: 0 !important; + + &:before, + &:after { + display: none !important; + } + + code { + border-left: 0 none !important; + box-shadow: none !important; + background: var(--surface-card) !important; + margin: 0; + color: var(--text-color); + font-size: 14px; + padding: 0 2rem !important; + + .token { + &.tag, + &.keyword { + color: #2196f3 !important; + } + + &.attr-name, + &.attr-string { + color: #2196f3 !important; + } + + &.attr-value { + color: #4caf50 !important; + } + + &.punctuation { + color: var(--text-color); + } + + &.operator, + &.string { + background: transparent; + } + } + } +} + +@media screen and (max-width: 575px) { + .block-header { + flex-direction: column; + align-items: start; + + .block-actions { + margin-top: 1rem; + margin-left: 0; + } + } +} diff --git a/src/assets/css/app/_content_group.scss b/src/assets/css/app/_content_group.scss new file mode 100644 index 0000000..29534cc --- /dev/null +++ b/src/assets/css/app/_content_group.scss @@ -0,0 +1,74 @@ +.block-category-title { + font-size: 1.5rem; + font-weight: 700; + margin-bottom: 1rem; + color: var(--surface-900); + display: flex; + align-items: center; +} + +.block-category { + margin-bottom: 4rem; +} + +.block-group { + border-bottom: 1px solid var(--surface-border); + margin-bottom: 2rem; + + &:last-child { + border-bottom: 0; + } +} + +.block-group-title { + font-weight: 700; + padding: 1rem 2rem; + display: block; + color: var(--surface-900); + background-color: var(--surface-card); + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border: 1px solid var(--surface-border); +} + +.block-group-content { + background-color: var(--surface-card); + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + border: 1px solid var(--surface-border); + border-top: 0 none; + padding: 2rem; + + .grid { + margin-right: -1rem; + margin-left: -1rem; + margin-top: -1rem; + } + + .col-12 { + padding: 1rem; + } + + .badge-new { + margin-left: 0; + font-weight: medium; + } +} + +.block-placeholder { + width: 100%; + display: block; + margin-bottom: 0.75rem; +} + +.block-name { + color: var(--surface-900); + display: block; + font-weight: 700; + margin-bottom: 0.5rem; +} + +.block-count { + display: block; + color: var(--text-color-secondary); +} diff --git a/src/assets/css/app/_home.scss b/src/assets/css/app/_home.scss new file mode 100644 index 0000000..e12b889 --- /dev/null +++ b/src/assets/css/app/_home.scss @@ -0,0 +1,122 @@ +.introduction { + background-image: url('../../images/bg-hero.jpg'); + background-repeat: no-repeat; + background-size: cover; + min-height: calc(100vh - 115px); + margin: -2rem -2rem 2rem -2rem; + display: flex; + align-items: center; + justify-content: center; + + .introduction-content { + padding: 4rem 12rem; + border-radius: 8px; + background-color: rgba(255, 255, 255, 0.5); + backdrop-filter: blur(24px); + text-align: center; + + .introduction-title { + color: var(--surface-900); + font-size: 3rem; + font-weight: 700; + line-height: 1; + margin-bottom: 0.5rem; + } + + .introduction-subtitle { + font-size: 3rem; + font-weight: 700; + color: var(--primary-color); + line-height: 1; + margin-bottom: 1.5rem; + } + + p { + max-width: 600px; + font-size: 1.5rem; + margin: 0 auto 1.5rem auto; + line-height: 1.5; + text-align: center; + color: var(--text-secondary-color); + } + + button { + border-radius: 35px; + } + + .bg-drop { + border-radius: 50%; + position: absolute; + left: 50%; + width: 1200px; + height: 1200px; + margin-left: -600px; + bottom: -950px; + } + + .introduction-gradient { + z-index: -1; + opacity: 0.75; + filter: blur(100px); + background: + repeating-linear-gradient(315deg, #00ffff2e 92%, #073aff00 100%), + repeating-radial-gradient( + 75% 75% at 238% 218%, + #00ffff12 30%, + #073aff14 39% + ), + radial-gradient(99% 99% at 109% 2%, #00c9ffff 0%, #073aff00 100%), + radial-gradient(99% 99% at 21% 78%, #7b00ffff 0%, #073aff00 100%), + radial-gradient(160% 154% at 711px -303px, #2000ffff 0%, #073affff 100%); + } + } +} + +.layout-wrapper-dark { + .introduction { + background-image: url('../../images/bg-hero-dark.jpg'); + + .introduction-content { + background-color: rgba(0, 0, 0, 0.75); + } + } +} + +@media screen and (max-width: 576px) { + .introduction { + .introduction-content { + padding-left: 2rem; + padding-right: 2rem; + + .introduction-title, + .introduction-subtitle { + font-size: 2rem; + } + + p { + font-size: 1rem; + } + } + } +} + +@media screen and (max-width: 960px) { + .layout-wrapper { + overflow-x: hidden; + } + + .video-container { + position: relative; + width: 100%; + height: 0; + padding-bottom: 56.25%; + + iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } + } +} diff --git a/src/assets/css/app/_main.scss b/src/assets/css/app/_main.scss new file mode 100644 index 0000000..bd8cfd8 --- /dev/null +++ b/src/assets/css/app/_main.scss @@ -0,0 +1,15 @@ +html { + font-size: 1rem; + height: 100%; +} + +body { + font-family: var(--font-family); + background-color: var(--surface-ground); + color: var(--text-color); + padding: 0; + margin: 0; + min-height: 100%; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/src/assets/css/app/_menu.scss b/src/assets/css/app/_menu.scss new file mode 100755 index 0000000..b59db47 --- /dev/null +++ b/src/assets/css/app/_menu.scss @@ -0,0 +1,44 @@ +@use 'mixins' as *; + +.layout-menu { + ul { + li { + a { + &.active-route { + font-weight: 600; + color: var(--p-primary-800); + border-color: var(--p-primary-800); + // color: color-mix(in srgb, var(--primary-color) calc(100%* 1), transparent); + } + + &:hover { + background-color: var(--surface-hover); + } + + &:focus { + @include focused-inset(); + } + } + } + } +} + +.layout-submenu-enter-from, +.layout-submenu-leave-to { + max-height: 0; +} + +.layout-submenu-enter-to, +.layout-submenu-leave-from { + max-height: 1000px; +} + +.layout-submenu-leave-active { + overflow: hidden; + transition: max-height 0.45s cubic-bezier(0, 1, 0, 1); +} + +.layout-submenu-enter-active { + overflow: hidden; + transition: max-height 1s ease-in-out; +} diff --git a/src/assets/css/app/_mixins.scss b/src/assets/css/app/_mixins.scss new file mode 100755 index 0000000..6256ad9 --- /dev/null +++ b/src/assets/css/app/_mixins.scss @@ -0,0 +1,15 @@ +@mixin focused() { + outline-width: var(--focus-ring-width); + outline-style: var(--focus-ring-style); + outline-color: var(--focus-ring-color); + outline-offset: var(--focus-ring-offset); + box-shadow: var(--focus-ring-shadow); + transition: + box-shadow var(--transition-duration), + outline-color var(--transition-duration); +} + +@mixin focused-inset() { + outline-offset: -1px; + box-shadow: inset var(--focus-ring-shadow); +} diff --git a/src/assets/css/app/_pricing.scss b/src/assets/css/app/_pricing.scss new file mode 100644 index 0000000..f7d3c3b --- /dev/null +++ b/src/assets/css/app/_pricing.scss @@ -0,0 +1,65 @@ +.pricing { + background-image: url('../../images/pricing/bg-pricing.jpg'); + background-repeat: no-repeat; + background-size: cover; + height: 450px; + margin: -2rem -2rem 4rem -2rem; + display: flex; + align-items: center; + justify-content: center; + + .pricing-content { + padding: 4rem; + border-radius: 8px; + background-color: rgba(255, 255, 255, 0.5); + backdrop-filter: blur(24px); + text-align: center; + + .pricing-title { + font-size: 3rem; + font-weight: 700; + line-height: 1; + margin-bottom: 0.5rem; + } + + .pricing-subtitle { + font-size: 3rem; + font-weight: 700; + color: var(--primary-color); + line-height: 1; + margin-bottom: 1.5rem; + } + + p { + max-width: 600px; + font-size: 1.5rem; + margin: 0 auto 1.5rem auto; + line-height: 1.5; + text-align: center; + color: var(--text-secondary-color); + } + } +} + +.layout-wrapper-dark { + .pricing { + background-image: url('../../images/pricing/bg-pricing-dark.jpg'); + + .pricing-content { + background-color: rgba(0, 0, 0, 0.5); + backdrop-filter: blur(24px); + } + } +} + +.pricing-users { + margin: 4rem -2rem 4rem -2rem; +} + +@media screen and (max-width: 960px) { + .pricing { + .pricing-content { + padding: 1.8rem 4rem; + } + } +} diff --git a/src/assets/css/app/_topbar.scss b/src/assets/css/app/_topbar.scss new file mode 100644 index 0000000..9de4fc8 --- /dev/null +++ b/src/assets/css/app/_topbar.scss @@ -0,0 +1,164 @@ +.layout-topbar { + height: 80px; + background-color: var(--surface-card); + padding: 0 2rem; + border-bottom: 1px solid var(--surface-border); + display: flex; + justify-content: space-between; + + .topbar-logo { + display: flex; + align-items: center; + + .logo { + height: 56px; + } + + .icon { + display: none; + } + } + + .topbar-actions { + display: flex; + + .topbar-menu-button { + cursor: pointer; + border-radius: 50%; + transition: background-color 0.2s; + height: 56px; + width: 56px; + display: none; + align-items: center; + justify-content: center; + + &:hover { + background-color: var(--surface-hover); + } + + i { + font-size: 28px; + } + } + + .topbar-menu { + list-style-type: none; + margin: 0; + padding: 0; + display: flex; + + li { + display: flex; + + a { + color: var(--text-color-secondary); + font-weight: 700; + display: flex; + align-items: center; + justify-content: center; + border-bottom: 2px solid transparent; + transition: + border-bottom-color 0.2s, + color 0.2s; + text-decoration: none; + min-width: 120px; + outline: 0 none; + padding: 0 1rem; + + &:hover, + &:focus { + border-bottom-color: var(--surface-border); + } + + &.router-link-active { + color: var(--text-color); + border-bottom-color: var(--primary-color); + } + } + } + } + + .config-btn-container { + display: flex; + align-items: center; + + .config-btn { + cursor: pointer; + display: flex; + align-items: center; + border: 1px solid var(--surface-border); + border-radius: 4px; + padding: 0.5rem 1rem; + font-weight: 700; + color: var(--text-color-secondary); + transition: background-color 0.2s; + outline: 0 none; + + i { + color: var(--primary-color); + margin-right: 0.5rem; + } + + &:hover { + background-color: var(--surface-hover); + } + } + } + } +} + +.topbar-mobile-menu { + list-style-type: none; + margin: 0; + padding: 0; + + li { + a { + color: var(--text-color-secondary); + font-weight: 700; + text-decoration: none; + display: block; + padding: 1rem; + font-size: 1.5rem; + + &.router-link-active { + color: var(--primary-color); + } + + &:not(.router-link-active):hover { + color: var(--text-color); + } + } + } +} + +@media screen and (max-width: 992px) { + .layout-topbar { + align-items: center; + padding: 0 1rem; + + .topbar-actions { + .topbar-menu { + display: none; + } + + .topbar-menu-button { + display: flex; + } + } + } +} + +@media screen and (max-width: 576px) { + .layout-topbar { + .topbar-logo { + .logo { + display: none; + } + + .icon { + display: block; + } + } + } +} diff --git a/src/assets/css/app/layout.scss b/src/assets/css/app/layout.scss new file mode 100644 index 0000000..172276c --- /dev/null +++ b/src/assets/css/app/layout.scss @@ -0,0 +1,10 @@ +@import './_main.scss'; +@import './_topbar.scss'; +@import './_menu.scss'; +@import './_breadcrumb.scss'; +@import './_home.scss'; +@import './_pricing.scss'; +@import './_config.scss'; +@import './_content.scss'; +@import './_content_group.scss'; +@import './_content_block.scss'; diff --git a/src/assets/css/demo/flags.css b/src/assets/css/demo/flags.css new file mode 100644 index 0000000..86c9fe9 --- /dev/null +++ b/src/assets/css/demo/flags.css @@ -0,0 +1,740 @@ +span.flag { + width: 44px; + height: 30px; + display: inline-block; +} +img.flag { + width: 30px; +} +.flag { + background: url('../../images/blocks/flag/flags_responsive.png') no-repeat; + background-size: 100%; + vertical-align: middle; +} +.flag-ad { + background-position: 0 0.413223%; +} +.flag-ae { + background-position: 0 0.826446%; +} +.flag-af { + background-position: 0 1.239669%; +} +.flag-ag { + background-position: 0 1.652893%; +} +.flag-ai { + background-position: 0 2.066116%; +} +.flag-al { + background-position: 0 2.479339%; +} +.flag-am { + background-position: 0 2.892562%; +} +.flag-an { + background-position: 0 3.305785%; +} +.flag-ao { + background-position: 0 3.719008%; +} +.flag-aq { + background-position: 0 4.132231%; +} +.flag-ar { + background-position: 0 4.545455%; +} +.flag-as { + background-position: 0 4.958678%; +} +.flag-at { + background-position: 0 5.371901%; +} +.flag-au { + background-position: 0 5.785124%; +} +.flag-aw { + background-position: 0 6.198347%; +} +.flag-az { + background-position: 0 6.61157%; +} +.flag-ba { + background-position: 0 7.024793%; +} +.flag-bb { + background-position: 0 7.438017%; +} +.flag-bd { + background-position: 0 7.85124%; +} +.flag-be { + background-position: 0 8.264463%; +} +.flag-bf { + background-position: 0 8.677686%; +} +.flag-bg { + background-position: 0 9.090909%; +} +.flag-bh { + background-position: 0 9.504132%; +} +.flag-bi { + background-position: 0 9.917355%; +} +.flag-bj { + background-position: 0 10.330579%; +} +.flag-bm { + background-position: 0 10.743802%; +} +.flag-bn { + background-position: 0 11.157025%; +} +.flag-bo { + background-position: 0 11.570248%; +} +.flag-br { + background-position: 0 11.983471%; +} +.flag-bs { + background-position: 0 12.396694%; +} +.flag-bt { + background-position: 0 12.809917%; +} +.flag-bv { + background-position: 0 13.22314%; +} +.flag-bw { + background-position: 0 13.636364%; +} +.flag-by { + background-position: 0 14.049587%; +} +.flag-bz { + background-position: 0 14.46281%; +} +.flag-ca { + background-position: 0 14.876033%; +} +.flag-cc { + background-position: 0 15.289256%; +} +.flag-cd { + background-position: 0 15.702479%; +} +.flag-cf { + background-position: 0 16.115702%; +} +.flag-cg { + background-position: 0 16.528926%; +} +.flag-ch { + background-position: 0 16.942149%; +} +.flag-ci { + background-position: 0 17.355372%; +} +.flag-ck { + background-position: 0 17.768595%; +} +.flag-cl { + background-position: 0 18.181818%; +} +.flag-cm { + background-position: 0 18.595041%; +} +.flag-cn { + background-position: 0 19.008264%; +} +.flag-co { + background-position: 0 19.421488%; +} +.flag-cr { + background-position: 0 19.834711%; +} +.flag-cu { + background-position: 0 20.247934%; +} +.flag-cv { + background-position: 0 20.661157%; +} +.flag-cx { + background-position: 0 21.07438%; +} +.flag-cy { + background-position: 0 21.487603%; +} +.flag-cz { + background-position: 0 21.900826%; +} +.flag-de { + background-position: 0 22.31405%; +} +.flag-dj { + background-position: 0 22.727273%; +} +.flag-dk { + background-position: 0 23.140496%; +} +.flag-dm { + background-position: 0 23.553719%; +} +.flag-do { + background-position: 0 23.966942%; +} +.flag-dz { + background-position: 0 24.380165%; +} +.flag-ec { + background-position: 0 24.793388%; +} +.flag-ee { + background-position: 0 25.206612%; +} +.flag-eg { + background-position: 0 25.619835%; +} +.flag-eh { + background-position: 0 26.033058%; +} +.flag-er { + background-position: 0 26.446281%; +} +.flag-es { + background-position: 0 26.859504%; +} +.flag-et { + background-position: 0 27.272727%; +} +.flag-fi { + background-position: 0 27.68595%; +} +.flag-fj { + background-position: 0 28.099174%; +} +.flag-fk { + background-position: 0 28.512397%; +} +.flag-fm { + background-position: 0 28.92562%; +} +.flag-fo { + background-position: 0 29.338843%; +} +.flag-fr { + background-position: 0 29.752066%; +} +.flag-ga { + background-position: 0 30.165289%; +} +.flag-gd { + background-position: 0 30.578512%; +} +.flag-ge { + background-position: 0 30.991736%; +} +.flag-gf { + background-position: 0 31.404959%; +} +.flag-gh { + background-position: 0 31.818182%; +} +.flag-gi { + background-position: 0 32.231405%; +} +.flag-gl { + background-position: 0 32.644628%; +} +.flag-gm { + background-position: 0 33.057851%; +} +.flag-gn { + background-position: 0 33.471074%; +} +.flag-gp { + background-position: 0 33.884298%; +} +.flag-gq { + background-position: 0 34.297521%; +} +.flag-gr { + background-position: 0 34.710744%; +} +.flag-gs { + background-position: 0 35.123967%; +} +.flag-gt { + background-position: 0 35.53719%; +} +.flag-gu { + background-position: 0 35.950413%; +} +.flag-gw { + background-position: 0 36.363636%; +} +.flag-gy { + background-position: 0 36.77686%; +} +.flag-hk { + background-position: 0 37.190083%; +} +.flag-hm { + background-position: 0 37.603306%; +} +.flag-hn { + background-position: 0 38.016529%; +} +.flag-hr { + background-position: 0 38.429752%; +} +.flag-ht { + background-position: 0 38.842975%; +} +.flag-hu { + background-position: 0 39.256198%; +} +.flag-id { + background-position: 0 39.669421%; +} +.flag-ie { + background-position: 0 40.082645%; +} +.flag-il { + background-position: 0 40.495868%; +} +.flag-in { + background-position: 0 40.909091%; +} +.flag-io { + background-position: 0 41.322314%; +} +.flag-iq { + background-position: 0 41.735537%; +} +.flag-ir { + background-position: 0 42.14876%; +} +.flag-is { + background-position: 0 42.561983%; +} +.flag-it { + background-position: 0 42.975207%; +} +.flag-jm { + background-position: 0 43.38843%; +} +.flag-jo { + background-position: 0 43.801653%; +} +.flag-jp { + background-position: 0 44.214876%; +} +.flag-ke { + background-position: 0 44.628099%; +} +.flag-kg { + background-position: 0 45.041322%; +} +.flag-kh { + background-position: 0 45.454545%; +} +.flag-ki { + background-position: 0 45.867769%; +} +.flag-km { + background-position: 0 46.280992%; +} +.flag-kn { + background-position: 0 46.694215%; +} +.flag-kp { + background-position: 0 47.107438%; +} +.flag-kr { + background-position: 0 47.520661%; +} +.flag-kw { + background-position: 0 47.933884%; +} +.flag-ky { + background-position: 0 48.347107%; +} +.flag-kz { + background-position: 0 48.760331%; +} +.flag-la { + background-position: 0 49.173554%; +} +.flag-lb { + background-position: 0 49.586777%; +} +.flag-lc { + background-position: 0 50%; +} +.flag-li { + background-position: 0 50.413223%; +} +.flag-lk { + background-position: 0 50.826446%; +} +.flag-lr { + background-position: 0 51.239669%; +} +.flag-ls { + background-position: 0 51.652893%; +} +.flag-lt { + background-position: 0 52.066116%; +} +.flag-lu { + background-position: 0 52.479339%; +} +.flag-lv { + background-position: 0 52.892562%; +} +.flag-ly { + background-position: 0 53.305785%; +} +.flag-ma { + background-position: 0 53.719008%; +} +.flag-mc { + background-position: 0 54.132231%; +} +.flag-md { + background-position: 0 54.545455%; +} +.flag-me { + background-position: 0 54.958678%; +} +.flag-mg { + background-position: 0 55.371901%; +} +.flag-mh { + background-position: 0 55.785124%; +} +.flag-mk { + background-position: 0 56.198347%; +} +.flag-ml { + background-position: 0 56.61157%; +} +.flag-mm { + background-position: 0 57.024793%; +} +.flag-mn { + background-position: 0 57.438017%; +} +.flag-mo { + background-position: 0 57.85124%; +} +.flag-mp { + background-position: 0 58.264463%; +} +.flag-mq { + background-position: 0 58.677686%; +} +.flag-mr { + background-position: 0 59.090909%; +} +.flag-ms { + background-position: 0 59.504132%; +} +.flag-mt { + background-position: 0 59.917355%; +} +.flag-mu { + background-position: 0 60.330579%; +} +.flag-mv { + background-position: 0 60.743802%; +} +.flag-mw { + background-position: 0 61.157025%; +} +.flag-mx { + background-position: 0 61.570248%; +} +.flag-my { + background-position: 0 61.983471%; +} +.flag-mz { + background-position: 0 62.396694%; +} +.flag-na { + background-position: 0 62.809917%; +} +.flag-nc { + background-position: 0 63.22314%; +} +.flag-ne { + background-position: 0 63.636364%; +} +.flag-nf { + background-position: 0 64.049587%; +} +.flag-ng { + background-position: 0 64.46281%; +} +.flag-ni { + background-position: 0 64.876033%; +} +.flag-nl { + background-position: 0 65.289256%; +} +.flag-no { + background-position: 0 65.702479%; +} +.flag-np { + background-position: 0 66.115702%; +} +.flag-nr { + background-position: 0 66.528926%; +} +.flag-nu { + background-position: 0 66.942149%; +} +.flag-nz { + background-position: 0 67.355372%; +} +.flag-om { + background-position: 0 67.768595%; +} +.flag-pa { + background-position: 0 68.181818%; +} +.flag-pe { + background-position: 0 68.595041%; +} +.flag-pf { + background-position: 0 69.008264%; +} +.flag-pg { + background-position: 0 69.421488%; +} +.flag-ph { + background-position: 0 69.834711%; +} +.flag-pk { + background-position: 0 70.247934%; +} +.flag-pl { + background-position: 0 70.661157%; +} +.flag-pm { + background-position: 0 71.07438%; +} +.flag-pn { + background-position: 0 71.487603%; +} +.flag-pr { + background-position: 0 71.900826%; +} +.flag-pt { + background-position: 0 72.31405%; +} +.flag-pw { + background-position: 0 72.727273%; +} +.flag-py { + background-position: 0 73.140496%; +} +.flag-qa { + background-position: 0 73.553719%; +} +.flag-re { + background-position: 0 73.966942%; +} +.flag-ro { + background-position: 0 74.380165%; +} +.flag-rs { + background-position: 0 74.793388%; +} +.flag-ru { + background-position: 0 75.206612%; +} +.flag-rw { + background-position: 0 75.619835%; +} +.flag-sa { + background-position: 0 76.033058%; +} +.flag-sb { + background-position: 0 76.446281%; +} +.flag-sc { + background-position: 0 76.859504%; +} +.flag-sd { + background-position: 0 77.272727%; +} +.flag-se { + background-position: 0 77.68595%; +} +.flag-sg { + background-position: 0 78.099174%; +} +.flag-sh { + background-position: 0 78.512397%; +} +.flag-si { + background-position: 0 78.92562%; +} +.flag-sj { + background-position: 0 79.338843%; +} +.flag-sk { + background-position: 0 79.752066%; +} +.flag-sl { + background-position: 0 80.165289%; +} +.flag-sm { + background-position: 0 80.578512%; +} +.flag-sn { + background-position: 0 80.991736%; +} +.flag-so { + background-position: 0 81.404959%; +} +.flag-sr { + background-position: 0 81.818182%; +} +.flag-ss { + background-position: 0 82.231405%; +} +.flag-st { + background-position: 0 82.644628%; +} +.flag-sv { + background-position: 0 83.057851%; +} +.flag-sy { + background-position: 0 83.471074%; +} +.flag-sz { + background-position: 0 83.884298%; +} +.flag-tc { + background-position: 0 84.297521%; +} +.flag-td { + background-position: 0 84.710744%; +} +.flag-tf { + background-position: 0 85.123967%; +} +.flag-tg { + background-position: 0 85.53719%; +} +.flag-th { + background-position: 0 85.950413%; +} +.flag-tj { + background-position: 0 86.363636%; +} +.flag-tk { + background-position: 0 86.77686%; +} +.flag-tl { + background-position: 0 87.190083%; +} +.flag-tm { + background-position: 0 87.603306%; +} +.flag-tn { + background-position: 0 88.016529%; +} +.flag-to { + background-position: 0 88.429752%; +} +.flag-tp { + background-position: 0 88.842975%; +} +.flag-tr { + background-position: 0 89.256198%; +} +.flag-tt { + background-position: 0 89.669421%; +} +.flag-tv { + background-position: 0 90.082645%; +} +.flag-tw { + background-position: 0 90.495868%; +} +.flag-ty { + background-position: 0 90.909091%; +} +.flag-tz { + background-position: 0 91.322314%; +} +.flag-ua { + background-position: 0 91.735537%; +} +.flag-ug { + background-position: 0 92.14876%; +} +.flag-gb, +.flag-uk { + background-position: 0 92.561983%; +} +.flag-um { + background-position: 0 92.975207%; +} +.flag-us { + background-position: 0 93.38843%; +} +.flag-uy { + background-position: 0 93.801653%; +} +.flag-uz { + background-position: 0 94.214876%; +} +.flag-va { + background-position: 0 94.628099%; +} +.flag-vc { + background-position: 0 95.041322%; +} +.flag-ve { + background-position: 0 95.454545%; +} +.flag-vg { + background-position: 0 95.867769%; +} +.flag-vi { + background-position: 0 96.280992%; +} +.flag-vn { + background-position: 0 96.694215%; +} +.flag-vu { + background-position: 0 97.107438%; +} +.flag-wf { + background-position: 0 97.520661%; +} +.flag-ws { + background-position: 0 97.933884%; +} +.flag-ye { + background-position: 0 98.347107%; +} +.flag-za { + background-position: 0 98.760331%; +} +.flag-zm { + background-position: 0 99.173554%; +} +.flag-zr { + background-position: 0 99.586777%; +} +.flag-zw { + background-position: 0 100%; +} diff --git a/src/assets/images/AMB_EBITEMP/logo.png b/src/assets/images/AMB_EBITEMP/logo.png new file mode 100644 index 0000000..c97a0cc Binary files /dev/null and b/src/assets/images/AMB_EBITEMP/logo.png differ diff --git a/src/assets/images/AMB_EBITEMP/logo_header.png b/src/assets/images/AMB_EBITEMP/logo_header.png new file mode 100644 index 0000000..c97a0cc Binary files /dev/null and b/src/assets/images/AMB_EBITEMP/logo_header.png differ diff --git a/src/assets/images/CAMPA/logo.png b/src/assets/images/CAMPA/logo.png new file mode 100644 index 0000000..a07c70d Binary files /dev/null and b/src/assets/images/CAMPA/logo.png differ diff --git a/src/assets/images/CAMPA/logo_header.png b/src/assets/images/CAMPA/logo_header.png new file mode 100644 index 0000000..0cb0761 Binary files /dev/null and b/src/assets/images/CAMPA/logo_header.png differ diff --git a/src/assets/images/CMI/logo.png b/src/assets/images/CMI/logo.png new file mode 100644 index 0000000..7ec076f Binary files /dev/null and b/src/assets/images/CMI/logo.png differ diff --git a/src/assets/images/CMI/logo_header.png b/src/assets/images/CMI/logo_header.png new file mode 100644 index 0000000..7ec076f Binary files /dev/null and b/src/assets/images/CMI/logo_header.png differ diff --git a/src/assets/images/EBITEMP/logo.png b/src/assets/images/EBITEMP/logo.png new file mode 100644 index 0000000..c97a0cc Binary files /dev/null and b/src/assets/images/EBITEMP/logo.png differ diff --git a/src/assets/images/EBITEMP/logo_header.png b/src/assets/images/EBITEMP/logo_header.png new file mode 100644 index 0000000..c97a0cc Binary files /dev/null and b/src/assets/images/EBITEMP/logo_header.png differ diff --git a/src/assets/images/EP/logo.png b/src/assets/images/EP/logo.png new file mode 100755 index 0000000..61e08f9 Binary files /dev/null and b/src/assets/images/EP/logo.png differ diff --git a/src/assets/images/FAS/logo.png b/src/assets/images/FAS/logo.png new file mode 100644 index 0000000..5a90cd2 Binary files /dev/null and b/src/assets/images/FAS/logo.png differ diff --git a/src/assets/images/FAS/logo_header.png b/src/assets/images/FAS/logo_header.png new file mode 100644 index 0000000..2a3416a Binary files /dev/null and b/src/assets/images/FAS/logo_header.png differ diff --git a/src/assets/images/FIAR/fiar.bmp b/src/assets/images/FIAR/fiar.bmp new file mode 100644 index 0000000..3ce7dc6 Binary files /dev/null and b/src/assets/images/FIAR/fiar.bmp differ diff --git a/src/assets/images/FIAR/logo.png b/src/assets/images/FIAR/logo.png new file mode 100644 index 0000000..88f0ecc Binary files /dev/null and b/src/assets/images/FIAR/logo.png differ diff --git a/src/assets/images/FIAR/logo_header.png b/src/assets/images/FIAR/logo_header.png new file mode 100644 index 0000000..16ffb75 Binary files /dev/null and b/src/assets/images/FIAR/logo_header.png differ diff --git a/src/assets/images/FIAR/logo_old.png b/src/assets/images/FIAR/logo_old.png new file mode 100644 index 0000000..21fe240 Binary files /dev/null and b/src/assets/images/FIAR/logo_old.png differ diff --git a/src/assets/images/FSI/logo.png b/src/assets/images/FSI/logo.png new file mode 100644 index 0000000..aa3522d Binary files /dev/null and b/src/assets/images/FSI/logo.png differ diff --git a/src/assets/images/FSI/logo_header.png b/src/assets/images/FSI/logo_header.png new file mode 100644 index 0000000..194867b Binary files /dev/null and b/src/assets/images/FSI/logo_header.png differ diff --git a/src/assets/images/IS/logo.png b/src/assets/images/IS/logo.png new file mode 100644 index 0000000..61e08f9 Binary files /dev/null and b/src/assets/images/IS/logo.png differ diff --git a/src/assets/images/IS/logo_header.png b/src/assets/images/IS/logo_header.png new file mode 100644 index 0000000..f469af1 Binary files /dev/null and b/src/assets/images/IS/logo_header.png differ diff --git a/src/assets/images/ISL/logo.png b/src/assets/images/ISL/logo.png new file mode 100644 index 0000000..d18fc67 Binary files /dev/null and b/src/assets/images/ISL/logo.png differ diff --git a/src/assets/images/ISLAZIO/logo.png b/src/assets/images/ISLAZIO/logo.png new file mode 100644 index 0000000..d18fc67 Binary files /dev/null and b/src/assets/images/ISLAZIO/logo.png differ diff --git a/src/assets/images/MUSA/logo.png b/src/assets/images/MUSA/logo.png new file mode 100644 index 0000000..a2f2ca0 Binary files /dev/null and b/src/assets/images/MUSA/logo.png differ diff --git a/src/assets/images/WELFARE-AZIENDALE/logo.png b/src/assets/images/WELFARE-AZIENDALE/logo.png new file mode 100644 index 0000000..5a90cd2 Binary files /dev/null and b/src/assets/images/WELFARE-AZIENDALE/logo.png differ diff --git a/src/assets/images/WELFARE/logo.png b/src/assets/images/WELFARE/logo.png new file mode 100644 index 0000000..6ba5a7f Binary files /dev/null and b/src/assets/images/WELFARE/logo.png differ diff --git a/src/assets/images/WELFARE/logo_header.png b/src/assets/images/WELFARE/logo_header.png new file mode 100644 index 0000000..aff1f41 Binary files /dev/null and b/src/assets/images/WELFARE/logo_header.png differ diff --git a/src/assets/images/WELFARE4YOU/logo.png b/src/assets/images/WELFARE4YOU/logo.png new file mode 100644 index 0000000..a982e22 Binary files /dev/null and b/src/assets/images/WELFARE4YOU/logo.png differ diff --git a/src/assets/images/WELFARE4YOU/logo_header.png b/src/assets/images/WELFARE4YOU/logo_header.png new file mode 100644 index 0000000..11de344 Binary files /dev/null and b/src/assets/images/WELFARE4YOU/logo_header.png differ diff --git a/src/assets/images/bg-hero-dark.jpg b/src/assets/images/bg-hero-dark.jpg new file mode 100644 index 0000000..119b48e Binary files /dev/null and b/src/assets/images/bg-hero-dark.jpg differ diff --git a/src/assets/images/bg-hero.jpg b/src/assets/images/bg-hero.jpg new file mode 100644 index 0000000..150a9c6 Binary files /dev/null and b/src/assets/images/bg-hero.jpg differ diff --git a/src/assets/images/blocks/animals/a1.jpg b/src/assets/images/blocks/animals/a1.jpg new file mode 100644 index 0000000..789b472 Binary files /dev/null and b/src/assets/images/blocks/animals/a1.jpg differ diff --git a/src/assets/images/blocks/animals/a2.jpg b/src/assets/images/blocks/animals/a2.jpg new file mode 100644 index 0000000..0ae7e87 Binary files /dev/null and b/src/assets/images/blocks/animals/a2.jpg differ diff --git a/src/assets/images/blocks/animals/a3.jpg b/src/assets/images/blocks/animals/a3.jpg new file mode 100644 index 0000000..460fe8a Binary files /dev/null and b/src/assets/images/blocks/animals/a3.jpg differ diff --git a/src/assets/images/blocks/avatars/circle-big/avatar-f-1.png b/src/assets/images/blocks/avatars/circle-big/avatar-f-1.png new file mode 100644 index 0000000..424ce8e Binary files /dev/null and b/src/assets/images/blocks/avatars/circle-big/avatar-f-1.png differ diff --git a/src/assets/images/blocks/avatars/circle-big/avatar-f-1@2x.png b/src/assets/images/blocks/avatars/circle-big/avatar-f-1@2x.png new file mode 100644 index 0000000..f39af00 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle-big/avatar-f-1@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle-big/avatar-f-2.png b/src/assets/images/blocks/avatars/circle-big/avatar-f-2.png new file mode 100644 index 0000000..ffb8b7a Binary files /dev/null and b/src/assets/images/blocks/avatars/circle-big/avatar-f-2.png differ diff --git a/src/assets/images/blocks/avatars/circle-big/avatar-f-2@2x.png b/src/assets/images/blocks/avatars/circle-big/avatar-f-2@2x.png new file mode 100644 index 0000000..d19a0eb Binary files /dev/null and b/src/assets/images/blocks/avatars/circle-big/avatar-f-2@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle-big/avatar-f-3.png b/src/assets/images/blocks/avatars/circle-big/avatar-f-3.png new file mode 100644 index 0000000..7238151 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle-big/avatar-f-3.png differ diff --git a/src/assets/images/blocks/avatars/circle-big/avatar-f-3@2x.png b/src/assets/images/blocks/avatars/circle-big/avatar-f-3@2x.png new file mode 100644 index 0000000..65ec503 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle-big/avatar-f-3@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle-big/avatar-f-4@2x.png b/src/assets/images/blocks/avatars/circle-big/avatar-f-4@2x.png new file mode 100644 index 0000000..5e6a04a Binary files /dev/null and b/src/assets/images/blocks/avatars/circle-big/avatar-f-4@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle-big/avatar-m-1.png b/src/assets/images/blocks/avatars/circle-big/avatar-m-1.png new file mode 100644 index 0000000..b7a94b6 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle-big/avatar-m-1.png differ diff --git a/src/assets/images/blocks/avatars/circle-big/avatar-m-1@2x.png b/src/assets/images/blocks/avatars/circle-big/avatar-m-1@2x.png new file mode 100644 index 0000000..f3d680b Binary files /dev/null and b/src/assets/images/blocks/avatars/circle-big/avatar-m-1@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle-big/avatar-m-2.png b/src/assets/images/blocks/avatars/circle-big/avatar-m-2.png new file mode 100644 index 0000000..332e54a Binary files /dev/null and b/src/assets/images/blocks/avatars/circle-big/avatar-m-2.png differ diff --git a/src/assets/images/blocks/avatars/circle-big/avatar-m-2@2x.png b/src/assets/images/blocks/avatars/circle-big/avatar-m-2@2x.png new file mode 100644 index 0000000..32f18cc Binary files /dev/null and b/src/assets/images/blocks/avatars/circle-big/avatar-m-2@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle-big/avatar-m-3.png b/src/assets/images/blocks/avatars/circle-big/avatar-m-3.png new file mode 100644 index 0000000..97ed6c4 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle-big/avatar-m-3.png differ diff --git a/src/assets/images/blocks/avatars/circle-big/avatar-m-3@2x.png b/src/assets/images/blocks/avatars/circle-big/avatar-m-3@2x.png new file mode 100644 index 0000000..def9728 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle-big/avatar-m-3@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-1.png b/src/assets/images/blocks/avatars/circle/avatar-f-1.png new file mode 100644 index 0000000..6ea7b05 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-1.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-10.png b/src/assets/images/blocks/avatars/circle/avatar-f-10.png new file mode 100644 index 0000000..146a149 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-10.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-10@2x.png b/src/assets/images/blocks/avatars/circle/avatar-f-10@2x.png new file mode 100644 index 0000000..9b86ded Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-10@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-11.png b/src/assets/images/blocks/avatars/circle/avatar-f-11.png new file mode 100644 index 0000000..751fe48 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-11.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-11@2x.png b/src/assets/images/blocks/avatars/circle/avatar-f-11@2x.png new file mode 100644 index 0000000..be68ba4 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-11@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-12.png b/src/assets/images/blocks/avatars/circle/avatar-f-12.png new file mode 100644 index 0000000..051390c Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-12.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-12@2x.png b/src/assets/images/blocks/avatars/circle/avatar-f-12@2x.png new file mode 100644 index 0000000..341d8a0 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-12@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-13.png b/src/assets/images/blocks/avatars/circle/avatar-f-13.png new file mode 100644 index 0000000..623697c Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-13.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-14.png b/src/assets/images/blocks/avatars/circle/avatar-f-14.png new file mode 100644 index 0000000..8e79b68 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-14.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-15.png b/src/assets/images/blocks/avatars/circle/avatar-f-15.png new file mode 100644 index 0000000..1b71124 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-15.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-16.png b/src/assets/images/blocks/avatars/circle/avatar-f-16.png new file mode 100644 index 0000000..376dd68 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-16.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-17.png b/src/assets/images/blocks/avatars/circle/avatar-f-17.png new file mode 100644 index 0000000..66fe308 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-17.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-1@2x.png b/src/assets/images/blocks/avatars/circle/avatar-f-1@2x.png new file mode 100644 index 0000000..f5700bb Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-1@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-2.png b/src/assets/images/blocks/avatars/circle/avatar-f-2.png new file mode 100644 index 0000000..8bc131b Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-2.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-2@2x.png b/src/assets/images/blocks/avatars/circle/avatar-f-2@2x.png new file mode 100644 index 0000000..3ea6759 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-2@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-3.png b/src/assets/images/blocks/avatars/circle/avatar-f-3.png new file mode 100644 index 0000000..7c3d3a9 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-3.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-3@2x.png b/src/assets/images/blocks/avatars/circle/avatar-f-3@2x.png new file mode 100644 index 0000000..200d767 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-3@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-4.png b/src/assets/images/blocks/avatars/circle/avatar-f-4.png new file mode 100644 index 0000000..ffa82a4 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-4.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-4@2x.png b/src/assets/images/blocks/avatars/circle/avatar-f-4@2x.png new file mode 100644 index 0000000..090373d Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-4@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-5.png b/src/assets/images/blocks/avatars/circle/avatar-f-5.png new file mode 100644 index 0000000..278e94a Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-5.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-5@2x.png b/src/assets/images/blocks/avatars/circle/avatar-f-5@2x.png new file mode 100644 index 0000000..c204e32 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-5@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-6.png b/src/assets/images/blocks/avatars/circle/avatar-f-6.png new file mode 100644 index 0000000..58013a7 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-6.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-6@2x.png b/src/assets/images/blocks/avatars/circle/avatar-f-6@2x.png new file mode 100644 index 0000000..d129541 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-6@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-7.png b/src/assets/images/blocks/avatars/circle/avatar-f-7.png new file mode 100644 index 0000000..3dfa96f Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-7.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-7@2x.png b/src/assets/images/blocks/avatars/circle/avatar-f-7@2x.png new file mode 100644 index 0000000..45e2380 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-7@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-8.png b/src/assets/images/blocks/avatars/circle/avatar-f-8.png new file mode 100644 index 0000000..a8a2135 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-8.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-8@2x.png b/src/assets/images/blocks/avatars/circle/avatar-f-8@2x.png new file mode 100644 index 0000000..059c7b0 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-8@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-9.png b/src/assets/images/blocks/avatars/circle/avatar-f-9.png new file mode 100644 index 0000000..4a0bbdf Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-9.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-f-9@2x.png b/src/assets/images/blocks/avatars/circle/avatar-f-9@2x.png new file mode 100644 index 0000000..f0e56f2 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-f-9@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-1.png b/src/assets/images/blocks/avatars/circle/avatar-m-1.png new file mode 100644 index 0000000..05d0ada Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-1.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-10.png b/src/assets/images/blocks/avatars/circle/avatar-m-10.png new file mode 100644 index 0000000..08f950b Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-10.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-10@2x.png b/src/assets/images/blocks/avatars/circle/avatar-m-10@2x.png new file mode 100644 index 0000000..5b39e60 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-10@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-11.png b/src/assets/images/blocks/avatars/circle/avatar-m-11.png new file mode 100644 index 0000000..746ad48 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-11.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-11@2x.png b/src/assets/images/blocks/avatars/circle/avatar-m-11@2x.png new file mode 100644 index 0000000..cc91558 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-11@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-12.png b/src/assets/images/blocks/avatars/circle/avatar-m-12.png new file mode 100644 index 0000000..188adc9 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-12.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-12@2x.png b/src/assets/images/blocks/avatars/circle/avatar-m-12@2x.png new file mode 100644 index 0000000..7f81819 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-12@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-13.png b/src/assets/images/blocks/avatars/circle/avatar-m-13.png new file mode 100644 index 0000000..f241c7f Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-13.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-14.png b/src/assets/images/blocks/avatars/circle/avatar-m-14.png new file mode 100644 index 0000000..39f8269 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-14.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-1@2x.png b/src/assets/images/blocks/avatars/circle/avatar-m-1@2x.png new file mode 100644 index 0000000..3e25edb Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-1@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-2.png b/src/assets/images/blocks/avatars/circle/avatar-m-2.png new file mode 100644 index 0000000..c74d2d6 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-2.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-2@2x.png b/src/assets/images/blocks/avatars/circle/avatar-m-2@2x.png new file mode 100644 index 0000000..b47e9bc Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-2@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-3.png b/src/assets/images/blocks/avatars/circle/avatar-m-3.png new file mode 100644 index 0000000..6385a24 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-3.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-3@2x.png b/src/assets/images/blocks/avatars/circle/avatar-m-3@2x.png new file mode 100644 index 0000000..8801340 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-3@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-4.png b/src/assets/images/blocks/avatars/circle/avatar-m-4.png new file mode 100644 index 0000000..b528184 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-4.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-4@2x.png b/src/assets/images/blocks/avatars/circle/avatar-m-4@2x.png new file mode 100644 index 0000000..bac71f8 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-4@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-5.png b/src/assets/images/blocks/avatars/circle/avatar-m-5.png new file mode 100644 index 0000000..bb13b40 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-5.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-5@2x.png b/src/assets/images/blocks/avatars/circle/avatar-m-5@2x.png new file mode 100644 index 0000000..974d51f Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-5@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-6.png b/src/assets/images/blocks/avatars/circle/avatar-m-6.png new file mode 100644 index 0000000..99d5fa8 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-6.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-6@2x.png b/src/assets/images/blocks/avatars/circle/avatar-m-6@2x.png new file mode 100644 index 0000000..fc369a2 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-6@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-7-1.png b/src/assets/images/blocks/avatars/circle/avatar-m-7-1.png new file mode 100644 index 0000000..5b823a8 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-7-1.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-7.png b/src/assets/images/blocks/avatars/circle/avatar-m-7.png new file mode 100644 index 0000000..539dbb2 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-7.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-7@2x-1.png b/src/assets/images/blocks/avatars/circle/avatar-m-7@2x-1.png new file mode 100644 index 0000000..9344413 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-7@2x-1.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-7@2x.png b/src/assets/images/blocks/avatars/circle/avatar-m-7@2x.png new file mode 100644 index 0000000..e8cf54f Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-7@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-8.png b/src/assets/images/blocks/avatars/circle/avatar-m-8.png new file mode 100644 index 0000000..9877e50 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-8.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-8@2x.png b/src/assets/images/blocks/avatars/circle/avatar-m-8@2x.png new file mode 100644 index 0000000..0ca7401 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-8@2x.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-9.png b/src/assets/images/blocks/avatars/circle/avatar-m-9.png new file mode 100644 index 0000000..13463ac Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-9.png differ diff --git a/src/assets/images/blocks/avatars/circle/avatar-m-9@2x.png b/src/assets/images/blocks/avatars/circle/avatar-m-9@2x.png new file mode 100644 index 0000000..4870d75 Binary files /dev/null and b/src/assets/images/blocks/avatars/circle/avatar-m-9@2x.png differ diff --git a/src/assets/images/blocks/avatars/square/avatar-f-1.jpg b/src/assets/images/blocks/avatars/square/avatar-f-1.jpg new file mode 100644 index 0000000..43b6fdc Binary files /dev/null and b/src/assets/images/blocks/avatars/square/avatar-f-1.jpg differ diff --git a/src/assets/images/blocks/avatars/square/avatar-f-1@2x.jpg b/src/assets/images/blocks/avatars/square/avatar-f-1@2x.jpg new file mode 100644 index 0000000..f0787b1 Binary files /dev/null and b/src/assets/images/blocks/avatars/square/avatar-f-1@2x.jpg differ diff --git a/src/assets/images/blocks/avatars/square/avatar-f-2.jpg b/src/assets/images/blocks/avatars/square/avatar-f-2.jpg new file mode 100644 index 0000000..8182b49 Binary files /dev/null and b/src/assets/images/blocks/avatars/square/avatar-f-2.jpg differ diff --git a/src/assets/images/blocks/avatars/square/avatar-f-2@2x.jpg b/src/assets/images/blocks/avatars/square/avatar-f-2@2x.jpg new file mode 100644 index 0000000..e75f044 Binary files /dev/null and b/src/assets/images/blocks/avatars/square/avatar-f-2@2x.jpg differ diff --git a/src/assets/images/blocks/avatars/square/avatar-m-1.jpg b/src/assets/images/blocks/avatars/square/avatar-m-1.jpg new file mode 100644 index 0000000..9ea6466 Binary files /dev/null and b/src/assets/images/blocks/avatars/square/avatar-m-1.jpg differ diff --git a/src/assets/images/blocks/avatars/square/avatar-m-1@2x.jpg b/src/assets/images/blocks/avatars/square/avatar-m-1@2x.jpg new file mode 100644 index 0000000..c617b0d Binary files /dev/null and b/src/assets/images/blocks/avatars/square/avatar-m-1@2x.jpg differ diff --git a/src/assets/images/blocks/blog/blog-1.jpg b/src/assets/images/blocks/blog/blog-1.jpg new file mode 100644 index 0000000..09549bd Binary files /dev/null and b/src/assets/images/blocks/blog/blog-1.jpg differ diff --git a/src/assets/images/blocks/blog/blog-10.png b/src/assets/images/blocks/blog/blog-10.png new file mode 100644 index 0000000..0c5dd6e Binary files /dev/null and b/src/assets/images/blocks/blog/blog-10.png differ diff --git a/src/assets/images/blocks/blog/blog-11.png b/src/assets/images/blocks/blog/blog-11.png new file mode 100644 index 0000000..bb9a89d Binary files /dev/null and b/src/assets/images/blocks/blog/blog-11.png differ diff --git a/src/assets/images/blocks/blog/blog-12.jpg b/src/assets/images/blocks/blog/blog-12.jpg new file mode 100644 index 0000000..6d16bd7 Binary files /dev/null and b/src/assets/images/blocks/blog/blog-12.jpg differ diff --git a/src/assets/images/blocks/blog/blog-13.jpg b/src/assets/images/blocks/blog/blog-13.jpg new file mode 100644 index 0000000..5645324 Binary files /dev/null and b/src/assets/images/blocks/blog/blog-13.jpg differ diff --git a/src/assets/images/blocks/blog/blog-2.jpg b/src/assets/images/blocks/blog/blog-2.jpg new file mode 100644 index 0000000..c4a193e Binary files /dev/null and b/src/assets/images/blocks/blog/blog-2.jpg differ diff --git a/src/assets/images/blocks/blog/blog-3.jpg b/src/assets/images/blocks/blog/blog-3.jpg new file mode 100644 index 0000000..5122bea Binary files /dev/null and b/src/assets/images/blocks/blog/blog-3.jpg differ diff --git a/src/assets/images/blocks/blog/blog-4.jpg b/src/assets/images/blocks/blog/blog-4.jpg new file mode 100644 index 0000000..fdda102 Binary files /dev/null and b/src/assets/images/blocks/blog/blog-4.jpg differ diff --git a/src/assets/images/blocks/blog/blog-5.jpg b/src/assets/images/blocks/blog/blog-5.jpg new file mode 100644 index 0000000..a2a313c Binary files /dev/null and b/src/assets/images/blocks/blog/blog-5.jpg differ diff --git a/src/assets/images/blocks/blog/blog-6.png b/src/assets/images/blocks/blog/blog-6.png new file mode 100644 index 0000000..d10d023 Binary files /dev/null and b/src/assets/images/blocks/blog/blog-6.png differ diff --git a/src/assets/images/blocks/blog/blog-7.png b/src/assets/images/blocks/blog/blog-7.png new file mode 100644 index 0000000..e89af6c Binary files /dev/null and b/src/assets/images/blocks/blog/blog-7.png differ diff --git a/src/assets/images/blocks/blog/blog-8.png b/src/assets/images/blocks/blog/blog-8.png new file mode 100644 index 0000000..8745f8d Binary files /dev/null and b/src/assets/images/blocks/blog/blog-8.png differ diff --git a/src/assets/images/blocks/blog/blog-9.png b/src/assets/images/blocks/blog/blog-9.png new file mode 100644 index 0000000..c3389f8 Binary files /dev/null and b/src/assets/images/blocks/blog/blog-9.png differ diff --git a/src/assets/images/blocks/burgers/1.png b/src/assets/images/blocks/burgers/1.png new file mode 100644 index 0000000..42b46e3 Binary files /dev/null and b/src/assets/images/blocks/burgers/1.png differ diff --git a/src/assets/images/blocks/burgers/2.png b/src/assets/images/blocks/burgers/2.png new file mode 100644 index 0000000..22885fa Binary files /dev/null and b/src/assets/images/blocks/burgers/2.png differ diff --git a/src/assets/images/blocks/burgers/3.png b/src/assets/images/blocks/burgers/3.png new file mode 100644 index 0000000..733937b Binary files /dev/null and b/src/assets/images/blocks/burgers/3.png differ diff --git a/src/assets/images/blocks/burgers/4.png b/src/assets/images/blocks/burgers/4.png new file mode 100644 index 0000000..9c137e0 Binary files /dev/null and b/src/assets/images/blocks/burgers/4.png differ diff --git a/src/assets/images/blocks/burgers/5.png b/src/assets/images/blocks/burgers/5.png new file mode 100644 index 0000000..286336a Binary files /dev/null and b/src/assets/images/blocks/burgers/5.png differ diff --git a/src/assets/images/blocks/burgers/6.png b/src/assets/images/blocks/burgers/6.png new file mode 100644 index 0000000..70a0c04 Binary files /dev/null and b/src/assets/images/blocks/burgers/6.png differ diff --git a/src/assets/images/blocks/burgers/7.png b/src/assets/images/blocks/burgers/7.png new file mode 100644 index 0000000..cd906f4 Binary files /dev/null and b/src/assets/images/blocks/burgers/7.png differ diff --git a/src/assets/images/blocks/burgers/8.png b/src/assets/images/blocks/burgers/8.png new file mode 100644 index 0000000..91d044a Binary files /dev/null and b/src/assets/images/blocks/burgers/8.png differ diff --git a/src/assets/images/blocks/chart/chart-bar.svg b/src/assets/images/blocks/chart/chart-bar.svg new file mode 100644 index 0000000..2e4f0d5 --- /dev/null +++ b/src/assets/images/blocks/chart/chart-bar.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/chart/chart-line.svg b/src/assets/images/blocks/chart/chart-line.svg new file mode 100644 index 0000000..b79240f --- /dev/null +++ b/src/assets/images/blocks/chart/chart-line.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/commandmenu/commandmenu-1.jpg b/src/assets/images/blocks/commandmenu/commandmenu-1.jpg new file mode 100644 index 0000000..1807331 Binary files /dev/null and b/src/assets/images/blocks/commandmenu/commandmenu-1.jpg differ diff --git a/src/assets/images/blocks/commandmenu/commandmenu-2.jpg b/src/assets/images/blocks/commandmenu/commandmenu-2.jpg new file mode 100644 index 0000000..17a29b1 Binary files /dev/null and b/src/assets/images/blocks/commandmenu/commandmenu-2.jpg differ diff --git a/src/assets/images/blocks/commandmenu/commandmenu-3.jpeg b/src/assets/images/blocks/commandmenu/commandmenu-3.jpeg new file mode 100644 index 0000000..44101b2 Binary files /dev/null and b/src/assets/images/blocks/commandmenu/commandmenu-3.jpeg differ diff --git a/src/assets/images/blocks/contact/contact-1.png b/src/assets/images/blocks/contact/contact-1.png new file mode 100644 index 0000000..7715a54 Binary files /dev/null and b/src/assets/images/blocks/contact/contact-1.png differ diff --git a/src/assets/images/blocks/contact/contact-2.jpg b/src/assets/images/blocks/contact/contact-2.jpg new file mode 100644 index 0000000..87606c8 Binary files /dev/null and b/src/assets/images/blocks/contact/contact-2.jpg differ diff --git a/src/assets/images/blocks/contact/map.png b/src/assets/images/blocks/contact/map.png new file mode 100644 index 0000000..73a0c85 Binary files /dev/null and b/src/assets/images/blocks/contact/map.png differ diff --git a/src/assets/images/blocks/content/content-1.jpg b/src/assets/images/blocks/content/content-1.jpg new file mode 100644 index 0000000..482af24 Binary files /dev/null and b/src/assets/images/blocks/content/content-1.jpg differ diff --git a/src/assets/images/blocks/content/content-10.png b/src/assets/images/blocks/content/content-10.png new file mode 100644 index 0000000..34ae8c9 Binary files /dev/null and b/src/assets/images/blocks/content/content-10.png differ diff --git a/src/assets/images/blocks/content/content-2.png b/src/assets/images/blocks/content/content-2.png new file mode 100644 index 0000000..014749f Binary files /dev/null and b/src/assets/images/blocks/content/content-2.png differ diff --git a/src/assets/images/blocks/content/content-3.svg b/src/assets/images/blocks/content/content-3.svg new file mode 100644 index 0000000..289393a --- /dev/null +++ b/src/assets/images/blocks/content/content-3.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/blocks/content/content-4.png b/src/assets/images/blocks/content/content-4.png new file mode 100644 index 0000000..db041c1 Binary files /dev/null and b/src/assets/images/blocks/content/content-4.png differ diff --git a/src/assets/images/blocks/content/content-5.png b/src/assets/images/blocks/content/content-5.png new file mode 100644 index 0000000..b9c86c3 Binary files /dev/null and b/src/assets/images/blocks/content/content-5.png differ diff --git a/src/assets/images/blocks/content/content-6.png b/src/assets/images/blocks/content/content-6.png new file mode 100644 index 0000000..6456731 Binary files /dev/null and b/src/assets/images/blocks/content/content-6.png differ diff --git a/src/assets/images/blocks/content/content-7.png b/src/assets/images/blocks/content/content-7.png new file mode 100644 index 0000000..9591fce Binary files /dev/null and b/src/assets/images/blocks/content/content-7.png differ diff --git a/src/assets/images/blocks/content/content-8.png b/src/assets/images/blocks/content/content-8.png new file mode 100644 index 0000000..a4f0437 Binary files /dev/null and b/src/assets/images/blocks/content/content-8.png differ diff --git a/src/assets/images/blocks/content/content-9.png b/src/assets/images/blocks/content/content-9.png new file mode 100644 index 0000000..8051b85 Binary files /dev/null and b/src/assets/images/blocks/content/content-9.png differ diff --git a/src/assets/images/blocks/crypto/btc.png b/src/assets/images/blocks/crypto/btc.png new file mode 100644 index 0000000..e1ab01f Binary files /dev/null and b/src/assets/images/blocks/crypto/btc.png differ diff --git a/src/assets/images/blocks/crypto/doge.png b/src/assets/images/blocks/crypto/doge.png new file mode 100644 index 0000000..f9f2e65 Binary files /dev/null and b/src/assets/images/blocks/crypto/doge.png differ diff --git a/src/assets/images/blocks/crypto/eth.png b/src/assets/images/blocks/crypto/eth.png new file mode 100644 index 0000000..c11b06f Binary files /dev/null and b/src/assets/images/blocks/crypto/eth.png differ diff --git a/src/assets/images/blocks/crypto/xlm.png b/src/assets/images/blocks/crypto/xlm.png new file mode 100644 index 0000000..e52b5b4 Binary files /dev/null and b/src/assets/images/blocks/crypto/xlm.png differ diff --git a/src/assets/images/blocks/cta/cta-1.png b/src/assets/images/blocks/cta/cta-1.png new file mode 100644 index 0000000..c63d2ec Binary files /dev/null and b/src/assets/images/blocks/cta/cta-1.png differ diff --git a/src/assets/images/blocks/cta/cta-2.png b/src/assets/images/blocks/cta/cta-2.png new file mode 100644 index 0000000..1ea9925 Binary files /dev/null and b/src/assets/images/blocks/cta/cta-2.png differ diff --git a/src/assets/images/blocks/cta/cta-3.jpg b/src/assets/images/blocks/cta/cta-3.jpg new file mode 100644 index 0000000..f3e00c2 Binary files /dev/null and b/src/assets/images/blocks/cta/cta-3.jpg differ diff --git a/src/assets/images/blocks/cta/cta-browser.png b/src/assets/images/blocks/cta/cta-browser.png new file mode 100644 index 0000000..8c90a2f Binary files /dev/null and b/src/assets/images/blocks/cta/cta-browser.png differ diff --git a/src/assets/images/blocks/cta/cta-building.png b/src/assets/images/blocks/cta/cta-building.png new file mode 100644 index 0000000..1e47636 Binary files /dev/null and b/src/assets/images/blocks/cta/cta-building.png differ diff --git a/src/assets/images/blocks/cta/row.jpg b/src/assets/images/blocks/cta/row.jpg new file mode 100644 index 0000000..f3d6a5c Binary files /dev/null and b/src/assets/images/blocks/cta/row.jpg differ diff --git a/src/assets/images/blocks/dialog/dialog-1.svg b/src/assets/images/blocks/dialog/dialog-1.svg new file mode 100644 index 0000000..c087c45 --- /dev/null +++ b/src/assets/images/blocks/dialog/dialog-1.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/dialog/dialog-2.svg b/src/assets/images/blocks/dialog/dialog-2.svg new file mode 100644 index 0000000..823ee3b --- /dev/null +++ b/src/assets/images/blocks/dialog/dialog-2.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/ecommerce/categorypage/categorypage-1-1.png b/src/assets/images/blocks/ecommerce/categorypage/categorypage-1-1.png new file mode 100644 index 0000000..ae6679e Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypage/categorypage-1-1.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-1.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-1.png new file mode 100644 index 0000000..101014b Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-1.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-10.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-10.png new file mode 100644 index 0000000..3bdbe98 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-10.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-11.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-11.png new file mode 100644 index 0000000..196d76a Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-11.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-12.jpg b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-12.jpg new file mode 100644 index 0000000..4b5f6a4 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-12.jpg differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-13.jpg b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-13.jpg new file mode 100644 index 0000000..595f315 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-13.jpg differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-14.jpg b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-14.jpg new file mode 100644 index 0000000..7ced22c Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-14.jpg differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-15.jpg b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-15.jpg new file mode 100644 index 0000000..80abcab Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-15.jpg differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-16.jpg b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-16.jpg new file mode 100644 index 0000000..1b2f111 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-16.jpg differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-17.jpg b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-17.jpg new file mode 100644 index 0000000..61551ea Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-17.jpg differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-18.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-18.png new file mode 100644 index 0000000..95431b6 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-18.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-19.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-19.png new file mode 100644 index 0000000..43178d1 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-19.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-2.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-2.png new file mode 100644 index 0000000..a28a088 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-2.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-20.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-20.png new file mode 100644 index 0000000..55c4991 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-20.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-21.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-21.png new file mode 100644 index 0000000..72582d8 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-21.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-22.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-22.png new file mode 100644 index 0000000..de41379 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-22.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-23.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-23.png new file mode 100644 index 0000000..aea8a7d Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-23.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-24.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-24.png new file mode 100644 index 0000000..c1b8943 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-24.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-25.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-25.png new file mode 100644 index 0000000..9ae43ee Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-25.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-26.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-26.png new file mode 100644 index 0000000..4c2a200 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-26.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-27.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-27.png new file mode 100644 index 0000000..28e2230 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-27.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-28.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-28.png new file mode 100644 index 0000000..46fb3ba Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-28.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-29.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-29.png new file mode 100644 index 0000000..ac87553 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-29.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-3.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-3.png new file mode 100644 index 0000000..130a1c2 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-3.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-30.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-30.png new file mode 100644 index 0000000..a495346 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-30.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-31.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-31.png new file mode 100644 index 0000000..187e5ac Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-31.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-4.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-4.png new file mode 100644 index 0000000..1b3422e Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-4.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-5.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-5.png new file mode 100644 index 0000000..0aa0e67 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-5.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-6.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-6.png new file mode 100644 index 0000000..931578c Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-6.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-7.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-7.png new file mode 100644 index 0000000..7590f95 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-7.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-8.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-8.png new file mode 100644 index 0000000..b55903a Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-8.png differ diff --git a/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-9.png b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-9.png new file mode 100644 index 0000000..51ab2c0 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/categorypreview/category-preview-1-9.png differ diff --git a/src/assets/images/blocks/ecommerce/checkoutform/checkoutform-1-1.png b/src/assets/images/blocks/ecommerce/checkoutform/checkoutform-1-1.png new file mode 100644 index 0000000..60be3bb Binary files /dev/null and b/src/assets/images/blocks/ecommerce/checkoutform/checkoutform-1-1.png differ diff --git a/src/assets/images/blocks/ecommerce/checkoutform/checkoutform-1-2.png b/src/assets/images/blocks/ecommerce/checkoutform/checkoutform-1-2.png new file mode 100644 index 0000000..14d211c Binary files /dev/null and b/src/assets/images/blocks/ecommerce/checkoutform/checkoutform-1-2.png differ diff --git a/src/assets/images/blocks/ecommerce/checkoutform/checkoutform-1-3.png b/src/assets/images/blocks/ecommerce/checkoutform/checkoutform-1-3.png new file mode 100644 index 0000000..2ef2aef Binary files /dev/null and b/src/assets/images/blocks/ecommerce/checkoutform/checkoutform-1-3.png differ diff --git a/src/assets/images/blocks/ecommerce/checkoutform/checkoutform-1-4.png b/src/assets/images/blocks/ecommerce/checkoutform/checkoutform-1-4.png new file mode 100644 index 0000000..353ad8b Binary files /dev/null and b/src/assets/images/blocks/ecommerce/checkoutform/checkoutform-1-4.png differ diff --git a/src/assets/images/blocks/ecommerce/checkoutform/checkoutform-1-5.png b/src/assets/images/blocks/ecommerce/checkoutform/checkoutform-1-5.png new file mode 100644 index 0000000..1d18d49 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/checkoutform/checkoutform-1-5.png differ diff --git a/src/assets/images/blocks/ecommerce/orderhistory/orderhistory-1-1.png b/src/assets/images/blocks/ecommerce/orderhistory/orderhistory-1-1.png new file mode 100644 index 0000000..9e21686 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/orderhistory/orderhistory-1-1.png differ diff --git a/src/assets/images/blocks/ecommerce/orderhistory/orderhistory-1-2.png b/src/assets/images/blocks/ecommerce/orderhistory/orderhistory-1-2.png new file mode 100644 index 0000000..967afee Binary files /dev/null and b/src/assets/images/blocks/ecommerce/orderhistory/orderhistory-1-2.png differ diff --git a/src/assets/images/blocks/ecommerce/orderhistory/orderhistory-1-3.png b/src/assets/images/blocks/ecommerce/orderhistory/orderhistory-1-3.png new file mode 100644 index 0000000..b0a0d0a Binary files /dev/null and b/src/assets/images/blocks/ecommerce/orderhistory/orderhistory-1-3.png differ diff --git a/src/assets/images/blocks/ecommerce/orderhistory/orderhistory-1-4.png b/src/assets/images/blocks/ecommerce/orderhistory/orderhistory-1-4.png new file mode 100644 index 0000000..8ea8895 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/orderhistory/orderhistory-1-4.png differ diff --git a/src/assets/images/blocks/ecommerce/orderhistory/orderhistory-1-5.png b/src/assets/images/blocks/ecommerce/orderhistory/orderhistory-1-5.png new file mode 100644 index 0000000..f9d40e0 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/orderhistory/orderhistory-1-5.png differ diff --git a/src/assets/images/blocks/ecommerce/orderhistory/orderhistory-1-6.png b/src/assets/images/blocks/ecommerce/orderhistory/orderhistory-1-6.png new file mode 100644 index 0000000..67dab21 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/orderhistory/orderhistory-1-6.png differ diff --git a/src/assets/images/blocks/ecommerce/ordersummary/order-summary-1-1.png b/src/assets/images/blocks/ecommerce/ordersummary/order-summary-1-1.png new file mode 100644 index 0000000..2ba5227 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/ordersummary/order-summary-1-1.png differ diff --git a/src/assets/images/blocks/ecommerce/ordersummary/order-summary-1-2.png b/src/assets/images/blocks/ecommerce/ordersummary/order-summary-1-2.png new file mode 100644 index 0000000..229d740 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/ordersummary/order-summary-1-2.png differ diff --git a/src/assets/images/blocks/ecommerce/ordersummary/order-summary-2-1.png b/src/assets/images/blocks/ecommerce/ordersummary/order-summary-2-1.png new file mode 100644 index 0000000..d772a2e Binary files /dev/null and b/src/assets/images/blocks/ecommerce/ordersummary/order-summary-2-1.png differ diff --git a/src/assets/images/blocks/ecommerce/ordersummary/order-summary-3-1.png b/src/assets/images/blocks/ecommerce/ordersummary/order-summary-3-1.png new file mode 100644 index 0000000..1a41a03 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/ordersummary/order-summary-3-1.png differ diff --git a/src/assets/images/blocks/ecommerce/ordersummary/order-summary-3-2.png b/src/assets/images/blocks/ecommerce/ordersummary/order-summary-3-2.png new file mode 100644 index 0000000..40d6a0a Binary files /dev/null and b/src/assets/images/blocks/ecommerce/ordersummary/order-summary-3-2.png differ diff --git a/src/assets/images/blocks/ecommerce/ordersummary/visa.png b/src/assets/images/blocks/ecommerce/ordersummary/visa.png new file mode 100644 index 0000000..37198c3 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/ordersummary/visa.png differ diff --git a/src/assets/images/blocks/ecommerce/productfeature/product-features-1-1.png b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-1.png new file mode 100644 index 0000000..8f4398d Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-1.png differ diff --git a/src/assets/images/blocks/ecommerce/productfeature/product-features-1-10.png b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-10.png new file mode 100644 index 0000000..8ba8b5a Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-10.png differ diff --git a/src/assets/images/blocks/ecommerce/productfeature/product-features-1-11.png b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-11.png new file mode 100644 index 0000000..96a64ef Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-11.png differ diff --git a/src/assets/images/blocks/ecommerce/productfeature/product-features-1-12.png b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-12.png new file mode 100644 index 0000000..d486f5c Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-12.png differ diff --git a/src/assets/images/blocks/ecommerce/productfeature/product-features-1-2.png b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-2.png new file mode 100644 index 0000000..86fcbd5 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-2.png differ diff --git a/src/assets/images/blocks/ecommerce/productfeature/product-features-1-3.png b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-3.png new file mode 100644 index 0000000..e3e7e23 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-3.png differ diff --git a/src/assets/images/blocks/ecommerce/productfeature/product-features-1-4.png b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-4.png new file mode 100644 index 0000000..1e76da0 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-4.png differ diff --git a/src/assets/images/blocks/ecommerce/productfeature/product-features-1-5.png b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-5.png new file mode 100644 index 0000000..02cae28 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-5.png differ diff --git a/src/assets/images/blocks/ecommerce/productfeature/product-features-1-6.png b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-6.png new file mode 100644 index 0000000..977d8a9 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-6.png differ diff --git a/src/assets/images/blocks/ecommerce/productfeature/product-features-1-7.png b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-7.png new file mode 100644 index 0000000..734d506 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-7.png differ diff --git a/src/assets/images/blocks/ecommerce/productfeature/product-features-1-8.jpg b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-8.jpg new file mode 100644 index 0000000..8edc1a1 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-8.jpg differ diff --git a/src/assets/images/blocks/ecommerce/productfeature/product-features-1-9.png b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-9.png new file mode 100644 index 0000000..5402661 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productfeature/product-features-1-9.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-1-1.png b/src/assets/images/blocks/ecommerce/productlist/product-list-1-1.png new file mode 100644 index 0000000..553f9f9 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-1-1.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-1-2.png b/src/assets/images/blocks/ecommerce/productlist/product-list-1-2.png new file mode 100644 index 0000000..66cccf3 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-1-2.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-1-3.png b/src/assets/images/blocks/ecommerce/productlist/product-list-1-3.png new file mode 100644 index 0000000..cfba708 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-1-3.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-1-4.png b/src/assets/images/blocks/ecommerce/productlist/product-list-1-4.png new file mode 100644 index 0000000..5c516e0 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-1-4.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-2-1.png b/src/assets/images/blocks/ecommerce/productlist/product-list-2-1.png new file mode 100644 index 0000000..010b567 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-2-1.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-2-2.png b/src/assets/images/blocks/ecommerce/productlist/product-list-2-2.png new file mode 100644 index 0000000..0a33f15 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-2-2.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-2-3.png b/src/assets/images/blocks/ecommerce/productlist/product-list-2-3.png new file mode 100644 index 0000000..6a36a6d Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-2-3.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-2-4.png b/src/assets/images/blocks/ecommerce/productlist/product-list-2-4.png new file mode 100644 index 0000000..d67ce13 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-2-4.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-3-1.png b/src/assets/images/blocks/ecommerce/productlist/product-list-3-1.png new file mode 100644 index 0000000..d7b3840 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-3-1.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-3-2.png b/src/assets/images/blocks/ecommerce/productlist/product-list-3-2.png new file mode 100644 index 0000000..6169b35 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-3-2.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-3-3.png b/src/assets/images/blocks/ecommerce/productlist/product-list-3-3.png new file mode 100644 index 0000000..2f0cced Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-3-3.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-3-4.png b/src/assets/images/blocks/ecommerce/productlist/product-list-3-4.png new file mode 100644 index 0000000..c552617 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-3-4.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-3-5.png b/src/assets/images/blocks/ecommerce/productlist/product-list-3-5.png new file mode 100644 index 0000000..b506563 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-3-5.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-3-6.png b/src/assets/images/blocks/ecommerce/productlist/product-list-3-6.png new file mode 100644 index 0000000..c91c21f Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-3-6.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-4-1.png b/src/assets/images/blocks/ecommerce/productlist/product-list-4-1.png new file mode 100644 index 0000000..2e4aa2c Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-4-1.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-4-2.png b/src/assets/images/blocks/ecommerce/productlist/product-list-4-2.png new file mode 100644 index 0000000..8a64c9a Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-4-2.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-4-3.png b/src/assets/images/blocks/ecommerce/productlist/product-list-4-3.png new file mode 100644 index 0000000..608d05a Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-4-3.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-4-4.png b/src/assets/images/blocks/ecommerce/productlist/product-list-4-4.png new file mode 100644 index 0000000..185de67 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-4-4.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-4-5.png b/src/assets/images/blocks/ecommerce/productlist/product-list-4-5.png new file mode 100644 index 0000000..08d0e2d Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-4-5.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-4-6.png b/src/assets/images/blocks/ecommerce/productlist/product-list-4-6.png new file mode 100644 index 0000000..729029e Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-4-6.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-5-1.png b/src/assets/images/blocks/ecommerce/productlist/product-list-5-1.png new file mode 100644 index 0000000..818e4a1 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-5-1.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-5-2.png b/src/assets/images/blocks/ecommerce/productlist/product-list-5-2.png new file mode 100644 index 0000000..66cccf3 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-5-2.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-5-3.png b/src/assets/images/blocks/ecommerce/productlist/product-list-5-3.png new file mode 100644 index 0000000..5438ec9 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-5-3.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-5-4.png b/src/assets/images/blocks/ecommerce/productlist/product-list-5-4.png new file mode 100644 index 0000000..dd5ab9d Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-5-4.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-6-1.png b/src/assets/images/blocks/ecommerce/productlist/product-list-6-1.png new file mode 100644 index 0000000..7bca698 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-6-1.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-6-2.png b/src/assets/images/blocks/ecommerce/productlist/product-list-6-2.png new file mode 100644 index 0000000..b0346de Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-6-2.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-6-3.png b/src/assets/images/blocks/ecommerce/productlist/product-list-6-3.png new file mode 100644 index 0000000..913f78a Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-6-3.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-6-4.png b/src/assets/images/blocks/ecommerce/productlist/product-list-6-4.png new file mode 100644 index 0000000..b0998af Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-6-4.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-6-5.png b/src/assets/images/blocks/ecommerce/productlist/product-list-6-5.png new file mode 100644 index 0000000..d46f0d1 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-6-5.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-6-6.png b/src/assets/images/blocks/ecommerce/productlist/product-list-6-6.png new file mode 100644 index 0000000..a3e13ce Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-6-6.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-7-1.png b/src/assets/images/blocks/ecommerce/productlist/product-list-7-1.png new file mode 100644 index 0000000..3b79fe1 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-7-1.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-7-2.png b/src/assets/images/blocks/ecommerce/productlist/product-list-7-2.png new file mode 100644 index 0000000..5af3aca Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-7-2.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-7-3.png b/src/assets/images/blocks/ecommerce/productlist/product-list-7-3.png new file mode 100644 index 0000000..76f84e3 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-7-3.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-7-4.png b/src/assets/images/blocks/ecommerce/productlist/product-list-7-4.png new file mode 100644 index 0000000..6a9c089 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-7-4.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-8-1.png b/src/assets/images/blocks/ecommerce/productlist/product-list-8-1.png new file mode 100644 index 0000000..39fec3e Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-8-1.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-8-2.png b/src/assets/images/blocks/ecommerce/productlist/product-list-8-2.png new file mode 100644 index 0000000..5afe8f5 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-8-2.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-8-3.png b/src/assets/images/blocks/ecommerce/productlist/product-list-8-3.png new file mode 100644 index 0000000..eae44da Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-8-3.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-8-4.png b/src/assets/images/blocks/ecommerce/productlist/product-list-8-4.png new file mode 100644 index 0000000..aa6c9e2 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-8-4.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-9-1.png b/src/assets/images/blocks/ecommerce/productlist/product-list-9-1.png new file mode 100644 index 0000000..ff66990 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-9-1.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-9-2.png b/src/assets/images/blocks/ecommerce/productlist/product-list-9-2.png new file mode 100644 index 0000000..27978e9 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-9-2.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-9-3.png b/src/assets/images/blocks/ecommerce/productlist/product-list-9-3.png new file mode 100644 index 0000000..41de3ba Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-9-3.png differ diff --git a/src/assets/images/blocks/ecommerce/productlist/product-list-9-4.png b/src/assets/images/blocks/ecommerce/productlist/product-list-9-4.png new file mode 100644 index 0000000..383624e Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productlist/product-list-9-4.png differ diff --git a/src/assets/images/blocks/ecommerce/productoverview/product-overview-1-1.png b/src/assets/images/blocks/ecommerce/productoverview/product-overview-1-1.png new file mode 100644 index 0000000..7ddad83 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productoverview/product-overview-1-1.png differ diff --git a/src/assets/images/blocks/ecommerce/productoverview/product-overview-1-2.png b/src/assets/images/blocks/ecommerce/productoverview/product-overview-1-2.png new file mode 100644 index 0000000..319bc77 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productoverview/product-overview-1-2.png differ diff --git a/src/assets/images/blocks/ecommerce/productoverview/product-overview-1-3.png b/src/assets/images/blocks/ecommerce/productoverview/product-overview-1-3.png new file mode 100644 index 0000000..057fd56 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productoverview/product-overview-1-3.png differ diff --git a/src/assets/images/blocks/ecommerce/productoverview/product-overview-2-1.png b/src/assets/images/blocks/ecommerce/productoverview/product-overview-2-1.png new file mode 100644 index 0000000..65f84c3 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productoverview/product-overview-2-1.png differ diff --git a/src/assets/images/blocks/ecommerce/productoverview/product-overview-2-2.png b/src/assets/images/blocks/ecommerce/productoverview/product-overview-2-2.png new file mode 100644 index 0000000..16b4768 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productoverview/product-overview-2-2.png differ diff --git a/src/assets/images/blocks/ecommerce/productoverview/product-overview-2-3.png b/src/assets/images/blocks/ecommerce/productoverview/product-overview-2-3.png new file mode 100644 index 0000000..ff1706c Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productoverview/product-overview-2-3.png differ diff --git a/src/assets/images/blocks/ecommerce/productoverview/product-overview-2-4.png b/src/assets/images/blocks/ecommerce/productoverview/product-overview-2-4.png new file mode 100644 index 0000000..e743346 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productoverview/product-overview-2-4.png differ diff --git a/src/assets/images/blocks/ecommerce/productoverview/product-overview-3-1.png b/src/assets/images/blocks/ecommerce/productoverview/product-overview-3-1.png new file mode 100644 index 0000000..187d72b Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productoverview/product-overview-3-1.png differ diff --git a/src/assets/images/blocks/ecommerce/productoverview/product-overview-3-2.png b/src/assets/images/blocks/ecommerce/productoverview/product-overview-3-2.png new file mode 100644 index 0000000..561d1c8 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productoverview/product-overview-3-2.png differ diff --git a/src/assets/images/blocks/ecommerce/productoverview/product-overview-3-3.png b/src/assets/images/blocks/ecommerce/productoverview/product-overview-3-3.png new file mode 100644 index 0000000..bbcc30f Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productoverview/product-overview-3-3.png differ diff --git a/src/assets/images/blocks/ecommerce/productoverview/product-overview-3-4.png b/src/assets/images/blocks/ecommerce/productoverview/product-overview-3-4.png new file mode 100644 index 0000000..d8c920d Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productoverview/product-overview-3-4.png differ diff --git a/src/assets/images/blocks/ecommerce/productoverview/product-overview-4-1.png b/src/assets/images/blocks/ecommerce/productoverview/product-overview-4-1.png new file mode 100644 index 0000000..3f0eeb7 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productoverview/product-overview-4-1.png differ diff --git a/src/assets/images/blocks/ecommerce/productoverview/product-overview-4-2.png b/src/assets/images/blocks/ecommerce/productoverview/product-overview-4-2.png new file mode 100644 index 0000000..86e9425 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productoverview/product-overview-4-2.png differ diff --git a/src/assets/images/blocks/ecommerce/productoverview/product-overview-4-3.png b/src/assets/images/blocks/ecommerce/productoverview/product-overview-4-3.png new file mode 100644 index 0000000..d5dbd9e Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productoverview/product-overview-4-3.png differ diff --git a/src/assets/images/blocks/ecommerce/productoverview/product-suggestion.png b/src/assets/images/blocks/ecommerce/productoverview/product-suggestion.png new file mode 100644 index 0000000..baa3be4 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productoverview/product-suggestion.png differ diff --git a/src/assets/images/blocks/ecommerce/productpage/productpage-1-1.png b/src/assets/images/blocks/ecommerce/productpage/productpage-1-1.png new file mode 100644 index 0000000..e7a14c1 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productpage/productpage-1-1.png differ diff --git a/src/assets/images/blocks/ecommerce/productpage/productpage-1-2.png b/src/assets/images/blocks/ecommerce/productpage/productpage-1-2.png new file mode 100644 index 0000000..3c2fc51 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productpage/productpage-1-2.png differ diff --git a/src/assets/images/blocks/ecommerce/productpage/productpage-1-3.png b/src/assets/images/blocks/ecommerce/productpage/productpage-1-3.png new file mode 100644 index 0000000..f01dd0c Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productpage/productpage-1-3.png differ diff --git a/src/assets/images/blocks/ecommerce/productpage/productpage-1-4.png b/src/assets/images/blocks/ecommerce/productpage/productpage-1-4.png new file mode 100644 index 0000000..3f76c5f Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productpage/productpage-1-4.png differ diff --git a/src/assets/images/blocks/ecommerce/productquickview/product-quickview-1-1.png b/src/assets/images/blocks/ecommerce/productquickview/product-quickview-1-1.png new file mode 100644 index 0000000..45ae36a Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productquickview/product-quickview-1-1.png differ diff --git a/src/assets/images/blocks/ecommerce/productquickview/product-quickview-2-1.png b/src/assets/images/blocks/ecommerce/productquickview/product-quickview-2-1.png new file mode 100644 index 0000000..3ac7be6 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productquickview/product-quickview-2-1.png differ diff --git a/src/assets/images/blocks/ecommerce/productquickview/product-quickview-2-2.png b/src/assets/images/blocks/ecommerce/productquickview/product-quickview-2-2.png new file mode 100644 index 0000000..d468f03 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productquickview/product-quickview-2-2.png differ diff --git a/src/assets/images/blocks/ecommerce/productquickview/product-quickview-2-3.png b/src/assets/images/blocks/ecommerce/productquickview/product-quickview-2-3.png new file mode 100644 index 0000000..b0c6d2b Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productquickview/product-quickview-2-3.png differ diff --git a/src/assets/images/blocks/ecommerce/productquickview/product-quickview-2-4.png b/src/assets/images/blocks/ecommerce/productquickview/product-quickview-2-4.png new file mode 100644 index 0000000..a013087 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productquickview/product-quickview-2-4.png differ diff --git a/src/assets/images/blocks/ecommerce/productquickview/product-quickview-2-5.png b/src/assets/images/blocks/ecommerce/productquickview/product-quickview-2-5.png new file mode 100644 index 0000000..30d31e0 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productquickview/product-quickview-2-5.png differ diff --git a/src/assets/images/blocks/ecommerce/productquickview/product-quickview-2-6.png b/src/assets/images/blocks/ecommerce/productquickview/product-quickview-2-6.png new file mode 100644 index 0000000..9f137cd Binary files /dev/null and b/src/assets/images/blocks/ecommerce/productquickview/product-quickview-2-6.png differ diff --git a/src/assets/images/blocks/ecommerce/promosection/promo-section-1-1.jpg b/src/assets/images/blocks/ecommerce/promosection/promo-section-1-1.jpg new file mode 100644 index 0000000..c5d6b38 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/promosection/promo-section-1-1.jpg differ diff --git a/src/assets/images/blocks/ecommerce/promosection/promo-section-2-1.jpg b/src/assets/images/blocks/ecommerce/promosection/promo-section-2-1.jpg new file mode 100644 index 0000000..2c0d820 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/promosection/promo-section-2-1.jpg differ diff --git a/src/assets/images/blocks/ecommerce/promosection/promo-section-3-1.jpg b/src/assets/images/blocks/ecommerce/promosection/promo-section-3-1.jpg new file mode 100644 index 0000000..88c5840 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/promosection/promo-section-3-1.jpg differ diff --git a/src/assets/images/blocks/ecommerce/promosection/promo-section-4-1.jpg b/src/assets/images/blocks/ecommerce/promosection/promo-section-4-1.jpg new file mode 100644 index 0000000..1fd22b6 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/promosection/promo-section-4-1.jpg differ diff --git a/src/assets/images/blocks/ecommerce/promosection/promo-section-4-2.jpg b/src/assets/images/blocks/ecommerce/promosection/promo-section-4-2.jpg new file mode 100644 index 0000000..5e27dc1 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/promosection/promo-section-4-2.jpg differ diff --git a/src/assets/images/blocks/ecommerce/promosection/promo-section-4-3.jpg b/src/assets/images/blocks/ecommerce/promosection/promo-section-4-3.jpg new file mode 100644 index 0000000..258daa9 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/promosection/promo-section-4-3.jpg differ diff --git a/src/assets/images/blocks/ecommerce/promosection/promo-section-4-4.jpg b/src/assets/images/blocks/ecommerce/promosection/promo-section-4-4.jpg new file mode 100644 index 0000000..c7c93a4 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/promosection/promo-section-4-4.jpg differ diff --git a/src/assets/images/blocks/ecommerce/promosection/promo-section-4-5.jpg b/src/assets/images/blocks/ecommerce/promosection/promo-section-4-5.jpg new file mode 100644 index 0000000..89adbd3 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/promosection/promo-section-4-5.jpg differ diff --git a/src/assets/images/blocks/ecommerce/promosection/promo-section-5-1-x.jpg b/src/assets/images/blocks/ecommerce/promosection/promo-section-5-1-x.jpg new file mode 100644 index 0000000..1302a22 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/promosection/promo-section-5-1-x.jpg differ diff --git a/src/assets/images/blocks/ecommerce/promosection/promo-section-5-1.jpg b/src/assets/images/blocks/ecommerce/promosection/promo-section-5-1.jpg new file mode 100644 index 0000000..4635aa1 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/promosection/promo-section-5-1.jpg differ diff --git a/src/assets/images/blocks/ecommerce/promosection/promo-section-5-2-x.jpg b/src/assets/images/blocks/ecommerce/promosection/promo-section-5-2-x.jpg new file mode 100644 index 0000000..3e164f1 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/promosection/promo-section-5-2-x.jpg differ diff --git a/src/assets/images/blocks/ecommerce/promosection/promo-section-5-2.jpg b/src/assets/images/blocks/ecommerce/promosection/promo-section-5-2.jpg new file mode 100644 index 0000000..b632690 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/promosection/promo-section-5-2.jpg differ diff --git a/src/assets/images/blocks/ecommerce/promosection/promo-section-6-1.jpg b/src/assets/images/blocks/ecommerce/promosection/promo-section-6-1.jpg new file mode 100644 index 0000000..31db84e Binary files /dev/null and b/src/assets/images/blocks/ecommerce/promosection/promo-section-6-1.jpg differ diff --git a/src/assets/images/blocks/ecommerce/review/review-1-1.png b/src/assets/images/blocks/ecommerce/review/review-1-1.png new file mode 100644 index 0000000..f20b343 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/review/review-1-1.png differ diff --git a/src/assets/images/blocks/ecommerce/review/review-1-2.png b/src/assets/images/blocks/ecommerce/review/review-1-2.png new file mode 100644 index 0000000..6f125c0 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/review/review-1-2.png differ diff --git a/src/assets/images/blocks/ecommerce/review/review-1-3.png b/src/assets/images/blocks/ecommerce/review/review-1-3.png new file mode 100644 index 0000000..1b9c97c Binary files /dev/null and b/src/assets/images/blocks/ecommerce/review/review-1-3.png differ diff --git a/src/assets/images/blocks/ecommerce/review/review-1-4.png b/src/assets/images/blocks/ecommerce/review/review-1-4.png new file mode 100644 index 0000000..7a2db31 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/review/review-1-4.png differ diff --git a/src/assets/images/blocks/ecommerce/review/review-1-5.png b/src/assets/images/blocks/ecommerce/review/review-1-5.png new file mode 100644 index 0000000..1c6e8d2 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/review/review-1-5.png differ diff --git a/src/assets/images/blocks/ecommerce/review/review-1-6.png b/src/assets/images/blocks/ecommerce/review/review-1-6.png new file mode 100644 index 0000000..0bc1c5e Binary files /dev/null and b/src/assets/images/blocks/ecommerce/review/review-1-6.png differ diff --git a/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-1-1.png b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-1-1.png new file mode 100644 index 0000000..46312e3 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-1-1.png differ diff --git a/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-1-2.png b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-1-2.png new file mode 100644 index 0000000..3a3606d Binary files /dev/null and b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-1-2.png differ diff --git a/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-1-3.png b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-1-3.png new file mode 100644 index 0000000..66edc7b Binary files /dev/null and b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-1-3.png differ diff --git a/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-2-1.png b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-2-1.png new file mode 100644 index 0000000..a6a16e4 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-2-1.png differ diff --git a/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-2-2.png b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-2-2.png new file mode 100644 index 0000000..d5ff0b7 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-2-2.png differ diff --git a/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-3-1.png b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-3-1.png new file mode 100644 index 0000000..1396435 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-3-1.png differ diff --git a/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-3-2.png b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-3-2.png new file mode 100644 index 0000000..00bcc10 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-3-2.png differ diff --git a/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-4-1.png b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-4-1.png new file mode 100644 index 0000000..4614cda Binary files /dev/null and b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-4-1.png differ diff --git a/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-4-2.png b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-4-2.png new file mode 100644 index 0000000..85cf9f4 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-4-2.png differ diff --git a/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-5-1.png b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-5-1.png new file mode 100644 index 0000000..57a43fb Binary files /dev/null and b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-5-1.png differ diff --git a/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-5-2.png b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-5-2.png new file mode 100644 index 0000000..b2b3a54 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-5-2.png differ diff --git a/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-5-3.png b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-5-3.png new file mode 100644 index 0000000..9933983 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-5-3.png differ diff --git a/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-5-4.png b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-5-4.png new file mode 100644 index 0000000..a0547fc Binary files /dev/null and b/src/assets/images/blocks/ecommerce/shoppingcart/shopping-cart-5-4.png differ diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-1.png b/src/assets/images/blocks/ecommerce/storefront/storefront-1-1.png new file mode 100644 index 0000000..a3e13ce Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storefront/storefront-1-1.png differ diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-10.png b/src/assets/images/blocks/ecommerce/storefront/storefront-1-10.png new file mode 100644 index 0000000..ca45730 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storefront/storefront-1-10.png differ diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-11.png b/src/assets/images/blocks/ecommerce/storefront/storefront-1-11.png new file mode 100644 index 0000000..e79d7fa Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storefront/storefront-1-11.png differ diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-12.png b/src/assets/images/blocks/ecommerce/storefront/storefront-1-12.png new file mode 100644 index 0000000..d143e97 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storefront/storefront-1-12.png differ diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-13.png b/src/assets/images/blocks/ecommerce/storefront/storefront-1-13.png new file mode 100644 index 0000000..25ad5f5 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storefront/storefront-1-13.png differ diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-17.png b/src/assets/images/blocks/ecommerce/storefront/storefront-1-17.png new file mode 100644 index 0000000..54b5ef3 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storefront/storefront-1-17.png differ diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-18.png b/src/assets/images/blocks/ecommerce/storefront/storefront-1-18.png new file mode 100644 index 0000000..a52f292 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storefront/storefront-1-18.png differ diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-19.png b/src/assets/images/blocks/ecommerce/storefront/storefront-1-19.png new file mode 100644 index 0000000..919dde5 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storefront/storefront-1-19.png differ diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-2.png b/src/assets/images/blocks/ecommerce/storefront/storefront-1-2.png new file mode 100644 index 0000000..cc917a2 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storefront/storefront-1-2.png differ diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-20.svg b/src/assets/images/blocks/ecommerce/storefront/storefront-1-20.svg new file mode 100644 index 0000000..2ca7c87 --- /dev/null +++ b/src/assets/images/blocks/ecommerce/storefront/storefront-1-20.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-21.svg b/src/assets/images/blocks/ecommerce/storefront/storefront-1-21.svg new file mode 100644 index 0000000..21aca0a --- /dev/null +++ b/src/assets/images/blocks/ecommerce/storefront/storefront-1-21.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-22.svg b/src/assets/images/blocks/ecommerce/storefront/storefront-1-22.svg new file mode 100644 index 0000000..f51f9c8 --- /dev/null +++ b/src/assets/images/blocks/ecommerce/storefront/storefront-1-22.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-23.svg b/src/assets/images/blocks/ecommerce/storefront/storefront-1-23.svg new file mode 100644 index 0000000..3f05005 --- /dev/null +++ b/src/assets/images/blocks/ecommerce/storefront/storefront-1-23.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-24.svg b/src/assets/images/blocks/ecommerce/storefront/storefront-1-24.svg new file mode 100644 index 0000000..789f3f7 --- /dev/null +++ b/src/assets/images/blocks/ecommerce/storefront/storefront-1-24.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-25.svg b/src/assets/images/blocks/ecommerce/storefront/storefront-1-25.svg new file mode 100644 index 0000000..83da53b --- /dev/null +++ b/src/assets/images/blocks/ecommerce/storefront/storefront-1-25.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-26.png b/src/assets/images/blocks/ecommerce/storefront/storefront-1-26.png new file mode 100644 index 0000000..a9d2812 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storefront/storefront-1-26.png differ diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-27.png b/src/assets/images/blocks/ecommerce/storefront/storefront-1-27.png new file mode 100644 index 0000000..a94d55d Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storefront/storefront-1-27.png differ diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-28.png b/src/assets/images/blocks/ecommerce/storefront/storefront-1-28.png new file mode 100644 index 0000000..4ba77a4 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storefront/storefront-1-28.png differ diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-3.png b/src/assets/images/blocks/ecommerce/storefront/storefront-1-3.png new file mode 100644 index 0000000..b0998af Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storefront/storefront-1-3.png differ diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-4.png b/src/assets/images/blocks/ecommerce/storefront/storefront-1-4.png new file mode 100644 index 0000000..fd5e5f4 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storefront/storefront-1-4.png differ diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-5.png b/src/assets/images/blocks/ecommerce/storefront/storefront-1-5.png new file mode 100644 index 0000000..06faa3e Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storefront/storefront-1-5.png differ diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-6.png b/src/assets/images/blocks/ecommerce/storefront/storefront-1-6.png new file mode 100644 index 0000000..f42a3bd Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storefront/storefront-1-6.png differ diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-7.png b/src/assets/images/blocks/ecommerce/storefront/storefront-1-7.png new file mode 100644 index 0000000..0eb99b1 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storefront/storefront-1-7.png differ diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-8.png b/src/assets/images/blocks/ecommerce/storefront/storefront-1-8.png new file mode 100644 index 0000000..580fe55 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storefront/storefront-1-8.png differ diff --git a/src/assets/images/blocks/ecommerce/storefront/storefront-1-9.png b/src/assets/images/blocks/ecommerce/storefront/storefront-1-9.png new file mode 100644 index 0000000..c194692 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storefront/storefront-1-9.png differ diff --git a/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-1-1.png b/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-1-1.png new file mode 100644 index 0000000..1b26b5e Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-1-1.png differ diff --git a/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-1-2.png b/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-1-2.png new file mode 100644 index 0000000..f6b871b Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-1-2.png differ diff --git a/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-2-1.png b/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-2-1.png new file mode 100644 index 0000000..5d34091 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-2-1.png differ diff --git a/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-2-2.png b/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-2-2.png new file mode 100644 index 0000000..e0b9438 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-2-2.png differ diff --git a/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-2-3.png b/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-2-3.png new file mode 100644 index 0000000..40f80b1 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-2-3.png differ diff --git a/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-2-4.png b/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-2-4.png new file mode 100644 index 0000000..0175c2b Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-2-4.png differ diff --git a/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-3-1.png b/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-3-1.png new file mode 100644 index 0000000..8780be2 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-3-1.png differ diff --git a/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-3-2.png b/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-3-2.png new file mode 100644 index 0000000..d1cab72 Binary files /dev/null and b/src/assets/images/blocks/ecommerce/storenavigation/storenavigation-3-2.png differ diff --git a/src/assets/images/blocks/feature/feature-1.png b/src/assets/images/blocks/feature/feature-1.png new file mode 100644 index 0000000..bb78312 Binary files /dev/null and b/src/assets/images/blocks/feature/feature-1.png differ diff --git a/src/assets/images/blocks/feature/feature-2.png b/src/assets/images/blocks/feature/feature-2.png new file mode 100644 index 0000000..5406a6d Binary files /dev/null and b/src/assets/images/blocks/feature/feature-2.png differ diff --git a/src/assets/images/blocks/feature/feature-3.png b/src/assets/images/blocks/feature/feature-3.png new file mode 100644 index 0000000..0d78446 Binary files /dev/null and b/src/assets/images/blocks/feature/feature-3.png differ diff --git a/src/assets/images/blocks/feature/feature-4.png b/src/assets/images/blocks/feature/feature-4.png new file mode 100644 index 0000000..aed1809 Binary files /dev/null and b/src/assets/images/blocks/feature/feature-4.png differ diff --git a/src/assets/images/blocks/feature/feature-card.png b/src/assets/images/blocks/feature/feature-card.png new file mode 100644 index 0000000..2d07834 Binary files /dev/null and b/src/assets/images/blocks/feature/feature-card.png differ diff --git a/src/assets/images/blocks/feature/feature-chips.png b/src/assets/images/blocks/feature/feature-chips.png new file mode 100644 index 0000000..96400c2 Binary files /dev/null and b/src/assets/images/blocks/feature/feature-chips.png differ diff --git a/src/assets/images/blocks/feature/feature-illustration-1.svg b/src/assets/images/blocks/feature/feature-illustration-1.svg new file mode 100644 index 0000000..885ecfd --- /dev/null +++ b/src/assets/images/blocks/feature/feature-illustration-1.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/feature/feature-illustration-2.svg b/src/assets/images/blocks/feature/feature-illustration-2.svg new file mode 100644 index 0000000..bf30c3c --- /dev/null +++ b/src/assets/images/blocks/feature/feature-illustration-2.svg @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/feature/feature-illustration-3.svg b/src/assets/images/blocks/feature/feature-illustration-3.svg new file mode 100644 index 0000000..790348a --- /dev/null +++ b/src/assets/images/blocks/feature/feature-illustration-3.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/feature/feature-illustration-4.svg b/src/assets/images/blocks/feature/feature-illustration-4.svg new file mode 100644 index 0000000..b22517f --- /dev/null +++ b/src/assets/images/blocks/feature/feature-illustration-4.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/feature/feature-sliding-1.jpg b/src/assets/images/blocks/feature/feature-sliding-1.jpg new file mode 100644 index 0000000..02d6aaf Binary files /dev/null and b/src/assets/images/blocks/feature/feature-sliding-1.jpg differ diff --git a/src/assets/images/blocks/feature/feature-sliding-2.jpg b/src/assets/images/blocks/feature/feature-sliding-2.jpg new file mode 100644 index 0000000..ad93de0 Binary files /dev/null and b/src/assets/images/blocks/feature/feature-sliding-2.jpg differ diff --git a/src/assets/images/blocks/feature/feature-sliding-3.jpg b/src/assets/images/blocks/feature/feature-sliding-3.jpg new file mode 100644 index 0000000..87f1717 Binary files /dev/null and b/src/assets/images/blocks/feature/feature-sliding-3.jpg differ diff --git a/src/assets/images/blocks/feature/feature-timeline-1.png b/src/assets/images/blocks/feature/feature-timeline-1.png new file mode 100644 index 0000000..b5722f1 Binary files /dev/null and b/src/assets/images/blocks/feature/feature-timeline-1.png differ diff --git a/src/assets/images/blocks/feature/feature-timeline-2.png b/src/assets/images/blocks/feature/feature-timeline-2.png new file mode 100644 index 0000000..f2ea03c Binary files /dev/null and b/src/assets/images/blocks/feature/feature-timeline-2.png differ diff --git a/src/assets/images/blocks/feature/feature-timeline-3.png b/src/assets/images/blocks/feature/feature-timeline-3.png new file mode 100644 index 0000000..a69d28c Binary files /dev/null and b/src/assets/images/blocks/feature/feature-timeline-3.png differ diff --git a/src/assets/images/blocks/feature/overlapping-cards.jpg b/src/assets/images/blocks/feature/overlapping-cards.jpg new file mode 100644 index 0000000..db401f3 Binary files /dev/null and b/src/assets/images/blocks/feature/overlapping-cards.jpg differ diff --git a/src/assets/images/blocks/feature/screens.png b/src/assets/images/blocks/feature/screens.png new file mode 100644 index 0000000..1954b6d Binary files /dev/null and b/src/assets/images/blocks/feature/screens.png differ diff --git a/src/assets/images/blocks/feedback/404-rocket.png b/src/assets/images/blocks/feedback/404-rocket.png new file mode 100644 index 0000000..fc73607 Binary files /dev/null and b/src/assets/images/blocks/feedback/404-rocket.png differ diff --git a/src/assets/images/blocks/feedback/404.png b/src/assets/images/blocks/feedback/404.png new file mode 100644 index 0000000..3d537bd Binary files /dev/null and b/src/assets/images/blocks/feedback/404.png differ diff --git a/src/assets/images/blocks/file/ai.svg b/src/assets/images/blocks/file/ai.svg new file mode 100644 index 0000000..11ad48e --- /dev/null +++ b/src/assets/images/blocks/file/ai.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/blocks/file/atom.svg b/src/assets/images/blocks/file/atom.svg new file mode 100644 index 0000000..a93d49a --- /dev/null +++ b/src/assets/images/blocks/file/atom.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/file/code.svg b/src/assets/images/blocks/file/code.svg new file mode 100644 index 0000000..66fd721 --- /dev/null +++ b/src/assets/images/blocks/file/code.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/file/excel.svg b/src/assets/images/blocks/file/excel.svg new file mode 100644 index 0000000..fbf8fe4 --- /dev/null +++ b/src/assets/images/blocks/file/excel.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/file/one.svg b/src/assets/images/blocks/file/one.svg new file mode 100644 index 0000000..d831778 --- /dev/null +++ b/src/assets/images/blocks/file/one.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/file/ps.svg b/src/assets/images/blocks/file/ps.svg new file mode 100644 index 0000000..7982e97 --- /dev/null +++ b/src/assets/images/blocks/file/ps.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/blocks/file/word.svg b/src/assets/images/blocks/file/word.svg new file mode 100644 index 0000000..27bcaed --- /dev/null +++ b/src/assets/images/blocks/file/word.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/flag/flag_placeholder.png b/src/assets/images/blocks/flag/flag_placeholder.png new file mode 100644 index 0000000..febd524 Binary files /dev/null and b/src/assets/images/blocks/flag/flag_placeholder.png differ diff --git a/src/assets/images/blocks/flag/flags_responsive.png b/src/assets/images/blocks/flag/flags_responsive.png new file mode 100644 index 0000000..805d062 Binary files /dev/null and b/src/assets/images/blocks/flag/flags_responsive.png differ diff --git a/src/assets/images/blocks/flag/germany.png b/src/assets/images/blocks/flag/germany.png new file mode 100644 index 0000000..08d67be Binary files /dev/null and b/src/assets/images/blocks/flag/germany.png differ diff --git a/src/assets/images/blocks/flag/japan.png b/src/assets/images/blocks/flag/japan.png new file mode 100644 index 0000000..e48a952 Binary files /dev/null and b/src/assets/images/blocks/flag/japan.png differ diff --git a/src/assets/images/blocks/flag/usa.png b/src/assets/images/blocks/flag/usa.png new file mode 100644 index 0000000..8fe9bf2 Binary files /dev/null and b/src/assets/images/blocks/flag/usa.png differ diff --git a/src/assets/images/blocks/footer/footer-1.png b/src/assets/images/blocks/footer/footer-1.png new file mode 100644 index 0000000..3d3a386 Binary files /dev/null and b/src/assets/images/blocks/footer/footer-1.png differ diff --git a/src/assets/images/blocks/footer/footer-2.png b/src/assets/images/blocks/footer/footer-2.png new file mode 100644 index 0000000..3500349 Binary files /dev/null and b/src/assets/images/blocks/footer/footer-2.png differ diff --git a/src/assets/images/blocks/graphs/graph-1.svg b/src/assets/images/blocks/graphs/graph-1.svg new file mode 100644 index 0000000..c20e242 --- /dev/null +++ b/src/assets/images/blocks/graphs/graph-1.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/graphs/graph-2.svg b/src/assets/images/blocks/graphs/graph-2.svg new file mode 100644 index 0000000..516b48c --- /dev/null +++ b/src/assets/images/blocks/graphs/graph-2.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/graphs/graph-3.svg b/src/assets/images/blocks/graphs/graph-3.svg new file mode 100644 index 0000000..4f210da --- /dev/null +++ b/src/assets/images/blocks/graphs/graph-3.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/graphs/graph-4.svg b/src/assets/images/blocks/graphs/graph-4.svg new file mode 100644 index 0000000..aabd75a --- /dev/null +++ b/src/assets/images/blocks/graphs/graph-4.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/hero/hero-1.png b/src/assets/images/blocks/hero/hero-1.png new file mode 100644 index 0000000..da43759 Binary files /dev/null and b/src/assets/images/blocks/hero/hero-1.png differ diff --git a/src/assets/images/blocks/hero/hero-10.png b/src/assets/images/blocks/hero/hero-10.png new file mode 100644 index 0000000..6e89e7e Binary files /dev/null and b/src/assets/images/blocks/hero/hero-10.png differ diff --git a/src/assets/images/blocks/hero/hero-10.svg b/src/assets/images/blocks/hero/hero-10.svg new file mode 100644 index 0000000..9b38d0c --- /dev/null +++ b/src/assets/images/blocks/hero/hero-10.svg @@ -0,0 +1,2318 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/hero/hero-11.png b/src/assets/images/blocks/hero/hero-11.png new file mode 100644 index 0000000..158e068 Binary files /dev/null and b/src/assets/images/blocks/hero/hero-11.png differ diff --git a/src/assets/images/blocks/hero/hero-12.png b/src/assets/images/blocks/hero/hero-12.png new file mode 100644 index 0000000..16e6012 Binary files /dev/null and b/src/assets/images/blocks/hero/hero-12.png differ diff --git a/src/assets/images/blocks/hero/hero-13.png b/src/assets/images/blocks/hero/hero-13.png new file mode 100644 index 0000000..14cd2f3 Binary files /dev/null and b/src/assets/images/blocks/hero/hero-13.png differ diff --git a/src/assets/images/blocks/hero/hero-14.png b/src/assets/images/blocks/hero/hero-14.png new file mode 100644 index 0000000..7511349 Binary files /dev/null and b/src/assets/images/blocks/hero/hero-14.png differ diff --git a/src/assets/images/blocks/hero/hero-15.png b/src/assets/images/blocks/hero/hero-15.png new file mode 100644 index 0000000..3e877fe Binary files /dev/null and b/src/assets/images/blocks/hero/hero-15.png differ diff --git a/src/assets/images/blocks/hero/hero-16.png b/src/assets/images/blocks/hero/hero-16.png new file mode 100644 index 0000000..9931dd9 Binary files /dev/null and b/src/assets/images/blocks/hero/hero-16.png differ diff --git a/src/assets/images/blocks/hero/hero-2.jpg b/src/assets/images/blocks/hero/hero-2.jpg new file mode 100644 index 0000000..6956398 Binary files /dev/null and b/src/assets/images/blocks/hero/hero-2.jpg differ diff --git a/src/assets/images/blocks/hero/hero-3.jpg b/src/assets/images/blocks/hero/hero-3.jpg new file mode 100644 index 0000000..79e432f Binary files /dev/null and b/src/assets/images/blocks/hero/hero-3.jpg differ diff --git a/src/assets/images/blocks/hero/hero-4.svg b/src/assets/images/blocks/hero/hero-4.svg new file mode 100644 index 0000000..f5e859a --- /dev/null +++ b/src/assets/images/blocks/hero/hero-4.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/blocks/hero/hero-5.png b/src/assets/images/blocks/hero/hero-5.png new file mode 100644 index 0000000..341306b Binary files /dev/null and b/src/assets/images/blocks/hero/hero-5.png differ diff --git a/src/assets/images/blocks/hero/hero-6.png b/src/assets/images/blocks/hero/hero-6.png new file mode 100644 index 0000000..7fd17b6 Binary files /dev/null and b/src/assets/images/blocks/hero/hero-6.png differ diff --git a/src/assets/images/blocks/hero/hero-7.png b/src/assets/images/blocks/hero/hero-7.png new file mode 100644 index 0000000..29ed5a3 Binary files /dev/null and b/src/assets/images/blocks/hero/hero-7.png differ diff --git a/src/assets/images/blocks/hero/hero-8.png b/src/assets/images/blocks/hero/hero-8.png new file mode 100644 index 0000000..53d7837 Binary files /dev/null and b/src/assets/images/blocks/hero/hero-8.png differ diff --git a/src/assets/images/blocks/hero/hero-9.png b/src/assets/images/blocks/hero/hero-9.png new file mode 100644 index 0000000..0d020dd Binary files /dev/null and b/src/assets/images/blocks/hero/hero-9.png differ diff --git a/src/assets/images/blocks/hero/hero-illustration.svg b/src/assets/images/blocks/hero/hero-illustration.svg new file mode 100644 index 0000000..92961e8 --- /dev/null +++ b/src/assets/images/blocks/hero/hero-illustration.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/hero/ultima.png b/src/assets/images/blocks/hero/ultima.png new file mode 100644 index 0000000..cb9f5d2 Binary files /dev/null and b/src/assets/images/blocks/hero/ultima.png differ diff --git a/src/assets/images/blocks/hotels/h1.jpg b/src/assets/images/blocks/hotels/h1.jpg new file mode 100644 index 0000000..0f7b4a3 Binary files /dev/null and b/src/assets/images/blocks/hotels/h1.jpg differ diff --git a/src/assets/images/blocks/hotels/h2.jpg b/src/assets/images/blocks/hotels/h2.jpg new file mode 100644 index 0000000..f186572 Binary files /dev/null and b/src/assets/images/blocks/hotels/h2.jpg differ diff --git a/src/assets/images/blocks/hotels/h3.jpg b/src/assets/images/blocks/hotels/h3.jpg new file mode 100644 index 0000000..404cb6a Binary files /dev/null and b/src/assets/images/blocks/hotels/h3.jpg differ diff --git a/src/assets/images/blocks/hotels/h4.jpeg b/src/assets/images/blocks/hotels/h4.jpeg new file mode 100644 index 0000000..65e6118 Binary files /dev/null and b/src/assets/images/blocks/hotels/h4.jpeg differ diff --git a/src/assets/images/blocks/hotels/h5.jpeg b/src/assets/images/blocks/hotels/h5.jpeg new file mode 100644 index 0000000..2bfe62b Binary files /dev/null and b/src/assets/images/blocks/hotels/h5.jpeg differ diff --git a/src/assets/images/blocks/hotels/h6.jpeg b/src/assets/images/blocks/hotels/h6.jpeg new file mode 100644 index 0000000..6bd17db Binary files /dev/null and b/src/assets/images/blocks/hotels/h6.jpeg differ diff --git a/src/assets/images/blocks/hotels/h7.jpeg b/src/assets/images/blocks/hotels/h7.jpeg new file mode 100644 index 0000000..cbb296a Binary files /dev/null and b/src/assets/images/blocks/hotels/h7.jpeg differ diff --git a/src/assets/images/blocks/illustration/live-collaboration.svg b/src/assets/images/blocks/illustration/live-collaboration.svg new file mode 100644 index 0000000..075bb69 --- /dev/null +++ b/src/assets/images/blocks/illustration/live-collaboration.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/illustration/notification-1.jpg b/src/assets/images/blocks/illustration/notification-1.jpg new file mode 100644 index 0000000..997ee69 Binary files /dev/null and b/src/assets/images/blocks/illustration/notification-1.jpg differ diff --git a/src/assets/images/blocks/illustration/notification-2.jpg b/src/assets/images/blocks/illustration/notification-2.jpg new file mode 100644 index 0000000..85c8fbd Binary files /dev/null and b/src/assets/images/blocks/illustration/notification-2.jpg differ diff --git a/src/assets/images/blocks/illustration/real-time-collaboration.svg b/src/assets/images/blocks/illustration/real-time-collaboration.svg new file mode 100644 index 0000000..a90430c --- /dev/null +++ b/src/assets/images/blocks/illustration/real-time-collaboration.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/illustration/security.svg b/src/assets/images/blocks/illustration/security.svg new file mode 100644 index 0000000..86cb698 --- /dev/null +++ b/src/assets/images/blocks/illustration/security.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/illustration/stats-illustration-1.svg b/src/assets/images/blocks/illustration/stats-illustration-1.svg new file mode 100644 index 0000000..47f837e --- /dev/null +++ b/src/assets/images/blocks/illustration/stats-illustration-1.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/blocks/illustration/stats-illustration-2.svg b/src/assets/images/blocks/illustration/stats-illustration-2.svg new file mode 100644 index 0000000..824deff --- /dev/null +++ b/src/assets/images/blocks/illustration/stats-illustration-2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/blocks/illustration/stats-illustration-3.svg b/src/assets/images/blocks/illustration/stats-illustration-3.svg new file mode 100644 index 0000000..c2c9ef3 --- /dev/null +++ b/src/assets/images/blocks/illustration/stats-illustration-3.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/blocks/illustration/stats-illustration-4.svg b/src/assets/images/blocks/illustration/stats-illustration-4.svg new file mode 100644 index 0000000..e655f6e --- /dev/null +++ b/src/assets/images/blocks/illustration/stats-illustration-4.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/illustration/stats-illustration-5.svg b/src/assets/images/blocks/illustration/stats-illustration-5.svg new file mode 100644 index 0000000..aeeb3cc --- /dev/null +++ b/src/assets/images/blocks/illustration/stats-illustration-5.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/illustration/stats-illustration-6.svg b/src/assets/images/blocks/illustration/stats-illustration-6.svg new file mode 100644 index 0000000..6179972 --- /dev/null +++ b/src/assets/images/blocks/illustration/stats-illustration-6.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/illustration/subscribe.svg b/src/assets/images/blocks/illustration/subscribe.svg new file mode 100644 index 0000000..8c3c6fc --- /dev/null +++ b/src/assets/images/blocks/illustration/subscribe.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/illustration/windows.svg b/src/assets/images/blocks/illustration/windows.svg new file mode 100644 index 0000000..5b9c4b5 --- /dev/null +++ b/src/assets/images/blocks/illustration/windows.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/logos/alfred-300.svg b/src/assets/images/blocks/logos/alfred-300.svg new file mode 100644 index 0000000..ec13da3 --- /dev/null +++ b/src/assets/images/blocks/logos/alfred-300.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/blocks/logos/alfred-500.svg b/src/assets/images/blocks/logos/alfred-500.svg new file mode 100644 index 0000000..435849d --- /dev/null +++ b/src/assets/images/blocks/logos/alfred-500.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/blocks/logos/alfred-700.svg b/src/assets/images/blocks/logos/alfred-700.svg new file mode 100644 index 0000000..73e96b8 --- /dev/null +++ b/src/assets/images/blocks/logos/alfred-700.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/blocks/logos/bastion-300.svg b/src/assets/images/blocks/logos/bastion-300.svg new file mode 100644 index 0000000..d9601a8 --- /dev/null +++ b/src/assets/images/blocks/logos/bastion-300.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/images/blocks/logos/bastion-500.svg b/src/assets/images/blocks/logos/bastion-500.svg new file mode 100644 index 0000000..a573a83 --- /dev/null +++ b/src/assets/images/blocks/logos/bastion-500.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/images/blocks/logos/bastion-700.svg b/src/assets/images/blocks/logos/bastion-700.svg new file mode 100644 index 0000000..36b0fca --- /dev/null +++ b/src/assets/images/blocks/logos/bastion-700.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/images/blocks/logos/bastion-purple.svg b/src/assets/images/blocks/logos/bastion-purple.svg new file mode 100644 index 0000000..2383286 --- /dev/null +++ b/src/assets/images/blocks/logos/bastion-purple.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/images/blocks/logos/bastion.svg b/src/assets/images/blocks/logos/bastion.svg new file mode 100644 index 0000000..7d75637 --- /dev/null +++ b/src/assets/images/blocks/logos/bastion.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/images/blocks/logos/bitcoin.svg b/src/assets/images/blocks/logos/bitcoin.svg new file mode 100644 index 0000000..d8d18cd --- /dev/null +++ b/src/assets/images/blocks/logos/bitcoin.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/images/blocks/logos/charot-300.svg b/src/assets/images/blocks/logos/charot-300.svg new file mode 100644 index 0000000..00f7589 --- /dev/null +++ b/src/assets/images/blocks/logos/charot-300.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/blocks/logos/charot-500.svg b/src/assets/images/blocks/logos/charot-500.svg new file mode 100644 index 0000000..3e1956f --- /dev/null +++ b/src/assets/images/blocks/logos/charot-500.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/blocks/logos/charot-700.svg b/src/assets/images/blocks/logos/charot-700.svg new file mode 100644 index 0000000..b92bd35 --- /dev/null +++ b/src/assets/images/blocks/logos/charot-700.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/blocks/logos/charot-purple.png b/src/assets/images/blocks/logos/charot-purple.png new file mode 100644 index 0000000..7ca014e Binary files /dev/null and b/src/assets/images/blocks/logos/charot-purple.png differ diff --git a/src/assets/images/blocks/logos/charot.svg b/src/assets/images/blocks/logos/charot.svg new file mode 100644 index 0000000..ae64e3b --- /dev/null +++ b/src/assets/images/blocks/logos/charot.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/blocks/logos/chrome.svg b/src/assets/images/blocks/logos/chrome.svg new file mode 100644 index 0000000..0fe6179 --- /dev/null +++ b/src/assets/images/blocks/logos/chrome.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/logos/edge.svg b/src/assets/images/blocks/logos/edge.svg new file mode 100644 index 0000000..130905a --- /dev/null +++ b/src/assets/images/blocks/logos/edge.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/images/blocks/logos/firefox.svg b/src/assets/images/blocks/logos/firefox.svg new file mode 100644 index 0000000..fdee3cd --- /dev/null +++ b/src/assets/images/blocks/logos/firefox.svg @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/logos/franki-300.svg b/src/assets/images/blocks/logos/franki-300.svg new file mode 100644 index 0000000..91c19b6 --- /dev/null +++ b/src/assets/images/blocks/logos/franki-300.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/blocks/logos/franki-500.svg b/src/assets/images/blocks/logos/franki-500.svg new file mode 100644 index 0000000..2eda914 --- /dev/null +++ b/src/assets/images/blocks/logos/franki-500.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/blocks/logos/franki-700.svg b/src/assets/images/blocks/logos/franki-700.svg new file mode 100644 index 0000000..b44615c --- /dev/null +++ b/src/assets/images/blocks/logos/franki-700.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/blocks/logos/franki-green.png b/src/assets/images/blocks/logos/franki-green.png new file mode 100644 index 0000000..22903b8 Binary files /dev/null and b/src/assets/images/blocks/logos/franki-green.png differ diff --git a/src/assets/images/blocks/logos/franki.svg b/src/assets/images/blocks/logos/franki.svg new file mode 100644 index 0000000..cc74dd3 --- /dev/null +++ b/src/assets/images/blocks/logos/franki.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/blocks/logos/hodly-300.svg b/src/assets/images/blocks/logos/hodly-300.svg new file mode 100644 index 0000000..eee377c --- /dev/null +++ b/src/assets/images/blocks/logos/hodly-300.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/blocks/logos/hodly-500.svg b/src/assets/images/blocks/logos/hodly-500.svg new file mode 100644 index 0000000..c67ff32 --- /dev/null +++ b/src/assets/images/blocks/logos/hodly-500.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/blocks/logos/hodly-700.svg b/src/assets/images/blocks/logos/hodly-700.svg new file mode 100644 index 0000000..0dcb4f9 --- /dev/null +++ b/src/assets/images/blocks/logos/hodly-700.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/blocks/logos/hodly-indigo-500.svg b/src/assets/images/blocks/logos/hodly-indigo-500.svg new file mode 100644 index 0000000..fe65e0f --- /dev/null +++ b/src/assets/images/blocks/logos/hodly-indigo-500.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/blocks/logos/hodly-orange.png b/src/assets/images/blocks/logos/hodly-orange.png new file mode 100644 index 0000000..c3bc692 Binary files /dev/null and b/src/assets/images/blocks/logos/hodly-orange.png differ diff --git a/src/assets/images/blocks/logos/hodly.svg b/src/assets/images/blocks/logos/hodly.svg new file mode 100644 index 0000000..6f0d111 --- /dev/null +++ b/src/assets/images/blocks/logos/hodly.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/blocks/logos/hyper-1.svg b/src/assets/images/blocks/logos/hyper-1.svg new file mode 100644 index 0000000..d374719 --- /dev/null +++ b/src/assets/images/blocks/logos/hyper-1.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/blocks/logos/hyper-300.svg b/src/assets/images/blocks/logos/hyper-300.svg new file mode 100644 index 0000000..04aea1b --- /dev/null +++ b/src/assets/images/blocks/logos/hyper-300.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/blocks/logos/hyper-500.svg b/src/assets/images/blocks/logos/hyper-500.svg new file mode 100644 index 0000000..fd155c3 --- /dev/null +++ b/src/assets/images/blocks/logos/hyper-500.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/blocks/logos/hyper-700.svg b/src/assets/images/blocks/logos/hyper-700.svg new file mode 100644 index 0000000..3e87cfa --- /dev/null +++ b/src/assets/images/blocks/logos/hyper-700.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/blocks/logos/hyper-900.svg b/src/assets/images/blocks/logos/hyper-900.svg new file mode 100644 index 0000000..969ffea --- /dev/null +++ b/src/assets/images/blocks/logos/hyper-900.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/blocks/logos/hyper-cyan.png b/src/assets/images/blocks/logos/hyper-cyan.png new file mode 100644 index 0000000..c9e5ef2 Binary files /dev/null and b/src/assets/images/blocks/logos/hyper-cyan.png differ diff --git a/src/assets/images/blocks/logos/hyper-cyan.svg b/src/assets/images/blocks/logos/hyper-cyan.svg new file mode 100644 index 0000000..a644469 --- /dev/null +++ b/src/assets/images/blocks/logos/hyper-cyan.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/assets/images/blocks/logos/hyper-light.svg b/src/assets/images/blocks/logos/hyper-light.svg new file mode 100644 index 0000000..23cdda8 --- /dev/null +++ b/src/assets/images/blocks/logos/hyper-light.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/assets/images/blocks/logos/hyper-text-indigo.svg b/src/assets/images/blocks/logos/hyper-text-indigo.svg new file mode 100644 index 0000000..22ec3d2 --- /dev/null +++ b/src/assets/images/blocks/logos/hyper-text-indigo.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/blocks/logos/hyper.svg b/src/assets/images/blocks/logos/hyper.svg new file mode 100644 index 0000000..815786d --- /dev/null +++ b/src/assets/images/blocks/logos/hyper.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/images/blocks/logos/logo-dropbox.png b/src/assets/images/blocks/logos/logo-dropbox.png new file mode 100644 index 0000000..1f801fd Binary files /dev/null and b/src/assets/images/blocks/logos/logo-dropbox.png differ diff --git a/src/assets/images/blocks/logos/logo-evernote.png b/src/assets/images/blocks/logos/logo-evernote.png new file mode 100644 index 0000000..569ca23 Binary files /dev/null and b/src/assets/images/blocks/logos/logo-evernote.png differ diff --git a/src/assets/images/blocks/logos/logo-pwd.png b/src/assets/images/blocks/logos/logo-pwd.png new file mode 100644 index 0000000..2225dce Binary files /dev/null and b/src/assets/images/blocks/logos/logo-pwd.png differ diff --git a/src/assets/images/blocks/logos/logo-slack.png b/src/assets/images/blocks/logos/logo-slack.png new file mode 100644 index 0000000..3aa8092 Binary files /dev/null and b/src/assets/images/blocks/logos/logo-slack.png differ diff --git a/src/assets/images/blocks/logos/logo-spotify.png b/src/assets/images/blocks/logos/logo-spotify.png new file mode 100644 index 0000000..2b7164c Binary files /dev/null and b/src/assets/images/blocks/logos/logo-spotify.png differ diff --git a/src/assets/images/blocks/logos/opera.svg b/src/assets/images/blocks/logos/opera.svg new file mode 100644 index 0000000..155f56c --- /dev/null +++ b/src/assets/images/blocks/logos/opera.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/logos/paypal.svg b/src/assets/images/blocks/logos/paypal.svg new file mode 100644 index 0000000..a1196db --- /dev/null +++ b/src/assets/images/blocks/logos/paypal.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/logos/peak-300.svg b/src/assets/images/blocks/logos/peak-300.svg new file mode 100644 index 0000000..70c08cc --- /dev/null +++ b/src/assets/images/blocks/logos/peak-300.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/blocks/logos/peak-500.svg b/src/assets/images/blocks/logos/peak-500.svg new file mode 100644 index 0000000..36149dd --- /dev/null +++ b/src/assets/images/blocks/logos/peak-500.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/blocks/logos/peak-700.svg b/src/assets/images/blocks/logos/peak-700.svg new file mode 100644 index 0000000..22d7877 --- /dev/null +++ b/src/assets/images/blocks/logos/peak-700.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/images/blocks/logos/peak-indigo.png b/src/assets/images/blocks/logos/peak-indigo.png new file mode 100644 index 0000000..8bab6ed Binary files /dev/null and b/src/assets/images/blocks/logos/peak-indigo.png differ diff --git a/src/assets/images/blocks/logos/peak.svg b/src/assets/images/blocks/logos/peak.svg new file mode 100644 index 0000000..83e77d9 --- /dev/null +++ b/src/assets/images/blocks/logos/peak.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/blocks/logos/safari.svg b/src/assets/images/blocks/logos/safari.svg new file mode 100644 index 0000000..36525af --- /dev/null +++ b/src/assets/images/blocks/logos/safari.svg @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/blocks/logos/shodan-300.svg b/src/assets/images/blocks/logos/shodan-300.svg new file mode 100644 index 0000000..edbd478 --- /dev/null +++ b/src/assets/images/blocks/logos/shodan-300.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/blocks/logos/shodan-500.svg b/src/assets/images/blocks/logos/shodan-500.svg new file mode 100644 index 0000000..dff3a14 --- /dev/null +++ b/src/assets/images/blocks/logos/shodan-500.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/blocks/logos/shodan-700.svg b/src/assets/images/blocks/logos/shodan-700.svg new file mode 100644 index 0000000..50fc1b9 --- /dev/null +++ b/src/assets/images/blocks/logos/shodan-700.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/blocks/maps/map-1.png b/src/assets/images/blocks/maps/map-1.png new file mode 100644 index 0000000..eb2f96b Binary files /dev/null and b/src/assets/images/blocks/maps/map-1.png differ diff --git a/src/assets/images/blocks/nature/nature-1.png b/src/assets/images/blocks/nature/nature-1.png new file mode 100644 index 0000000..1035bfd Binary files /dev/null and b/src/assets/images/blocks/nature/nature-1.png differ diff --git a/src/assets/images/blocks/nature/nature-2.png b/src/assets/images/blocks/nature/nature-2.png new file mode 100644 index 0000000..d59441c Binary files /dev/null and b/src/assets/images/blocks/nature/nature-2.png differ diff --git a/src/assets/images/blocks/nature/nature-3.png b/src/assets/images/blocks/nature/nature-3.png new file mode 100644 index 0000000..bd82591 Binary files /dev/null and b/src/assets/images/blocks/nature/nature-3.png differ diff --git a/src/assets/images/blocks/nature/nature-4.png b/src/assets/images/blocks/nature/nature-4.png new file mode 100644 index 0000000..41c1587 Binary files /dev/null and b/src/assets/images/blocks/nature/nature-4.png differ diff --git a/src/assets/images/blocks/nature/nature-5.png b/src/assets/images/blocks/nature/nature-5.png new file mode 100644 index 0000000..7ae3ae3 Binary files /dev/null and b/src/assets/images/blocks/nature/nature-5.png differ diff --git a/src/assets/images/blocks/nature/nature-6.png b/src/assets/images/blocks/nature/nature-6.png new file mode 100644 index 0000000..05f9685 Binary files /dev/null and b/src/assets/images/blocks/nature/nature-6.png differ diff --git a/src/assets/images/blocks/nature/nature-7.png b/src/assets/images/blocks/nature/nature-7.png new file mode 100644 index 0000000..81fabad Binary files /dev/null and b/src/assets/images/blocks/nature/nature-7.png differ diff --git a/src/assets/images/blocks/nature/nature-8.png b/src/assets/images/blocks/nature/nature-8.png new file mode 100644 index 0000000..a806815 Binary files /dev/null and b/src/assets/images/blocks/nature/nature-8.png differ diff --git a/src/assets/images/blocks/navbar/navbar-1.jpeg b/src/assets/images/blocks/navbar/navbar-1.jpeg new file mode 100644 index 0000000..48229f1 Binary files /dev/null and b/src/assets/images/blocks/navbar/navbar-1.jpeg differ diff --git a/src/assets/images/blocks/navbar/navbar-2.jpeg b/src/assets/images/blocks/navbar/navbar-2.jpeg new file mode 100644 index 0000000..96c6cd6 Binary files /dev/null and b/src/assets/images/blocks/navbar/navbar-2.jpeg differ diff --git a/src/assets/images/blocks/navbar/navbar-3.jpg b/src/assets/images/blocks/navbar/navbar-3.jpg new file mode 100644 index 0000000..df3434a Binary files /dev/null and b/src/assets/images/blocks/navbar/navbar-3.jpg differ diff --git a/src/assets/images/blocks/newsletter/newsletter-1.png b/src/assets/images/blocks/newsletter/newsletter-1.png new file mode 100644 index 0000000..6432475 Binary files /dev/null and b/src/assets/images/blocks/newsletter/newsletter-1.png differ diff --git a/src/assets/images/blocks/newsletter/with-image.png b/src/assets/images/blocks/newsletter/with-image.png new file mode 100644 index 0000000..c366392 Binary files /dev/null and b/src/assets/images/blocks/newsletter/with-image.png differ diff --git a/src/assets/images/blocks/pageheading/cover-2.jpg b/src/assets/images/blocks/pageheading/cover-2.jpg new file mode 100644 index 0000000..94446a5 Binary files /dev/null and b/src/assets/images/blocks/pageheading/cover-2.jpg differ diff --git a/src/assets/images/blocks/pageheading/cover.png b/src/assets/images/blocks/pageheading/cover.png new file mode 100644 index 0000000..2228645 Binary files /dev/null and b/src/assets/images/blocks/pageheading/cover.png differ diff --git a/src/assets/images/blocks/pageheading/stat-1.svg b/src/assets/images/blocks/pageheading/stat-1.svg new file mode 100644 index 0000000..98caa85 --- /dev/null +++ b/src/assets/images/blocks/pageheading/stat-1.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/blocks/pageheading/stat-2.svg b/src/assets/images/blocks/pageheading/stat-2.svg new file mode 100644 index 0000000..4eb015e --- /dev/null +++ b/src/assets/images/blocks/pageheading/stat-2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/blocks/pageheading/stat-3.svg b/src/assets/images/blocks/pageheading/stat-3.svg new file mode 100644 index 0000000..097eaf3 --- /dev/null +++ b/src/assets/images/blocks/pageheading/stat-3.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/blocks/pricing/pricing-4.svg b/src/assets/images/blocks/pricing/pricing-4.svg new file mode 100644 index 0000000..de994ae --- /dev/null +++ b/src/assets/images/blocks/pricing/pricing-4.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/blocks/products/bamboo-watch.jpg b/src/assets/images/blocks/products/bamboo-watch.jpg new file mode 100644 index 0000000..ea298a3 Binary files /dev/null and b/src/assets/images/blocks/products/bamboo-watch.jpg differ diff --git a/src/assets/images/blocks/products/black-watch.jpg b/src/assets/images/blocks/products/black-watch.jpg new file mode 100644 index 0000000..63b310c Binary files /dev/null and b/src/assets/images/blocks/products/black-watch.jpg differ diff --git a/src/assets/images/blocks/products/blue-band.jpg b/src/assets/images/blocks/products/blue-band.jpg new file mode 100644 index 0000000..f50cf08 Binary files /dev/null and b/src/assets/images/blocks/products/blue-band.jpg differ diff --git a/src/assets/images/blocks/products/blue-t-shirt.jpg b/src/assets/images/blocks/products/blue-t-shirt.jpg new file mode 100644 index 0000000..1b4d513 Binary files /dev/null and b/src/assets/images/blocks/products/blue-t-shirt.jpg differ diff --git a/src/assets/images/blocks/products/bracelet.jpg b/src/assets/images/blocks/products/bracelet.jpg new file mode 100644 index 0000000..aa8c2a1 Binary files /dev/null and b/src/assets/images/blocks/products/bracelet.jpg differ diff --git a/src/assets/images/blocks/products/brown-purse.jpg b/src/assets/images/blocks/products/brown-purse.jpg new file mode 100644 index 0000000..4d01a33 Binary files /dev/null and b/src/assets/images/blocks/products/brown-purse.jpg differ diff --git a/src/assets/images/blocks/products/chakra-bracelet.jpg b/src/assets/images/blocks/products/chakra-bracelet.jpg new file mode 100644 index 0000000..36aa908 Binary files /dev/null and b/src/assets/images/blocks/products/chakra-bracelet.jpg differ diff --git a/src/assets/images/blocks/products/cupcake.png b/src/assets/images/blocks/products/cupcake.png new file mode 100644 index 0000000..26a5905 Binary files /dev/null and b/src/assets/images/blocks/products/cupcake.png differ diff --git a/src/assets/images/blocks/products/dslr-camera.png b/src/assets/images/blocks/products/dslr-camera.png new file mode 100644 index 0000000..7368f08 Binary files /dev/null and b/src/assets/images/blocks/products/dslr-camera.png differ diff --git a/src/assets/images/blocks/products/galaxy-earrings.jpg b/src/assets/images/blocks/products/galaxy-earrings.jpg new file mode 100644 index 0000000..7cc60c3 Binary files /dev/null and b/src/assets/images/blocks/products/galaxy-earrings.jpg differ diff --git a/src/assets/images/blocks/products/game-controller.jpg b/src/assets/images/blocks/products/game-controller.jpg new file mode 100644 index 0000000..1a3bdfc Binary files /dev/null and b/src/assets/images/blocks/products/game-controller.jpg differ diff --git a/src/assets/images/blocks/products/gaming-set.jpg b/src/assets/images/blocks/products/gaming-set.jpg new file mode 100644 index 0000000..a767df7 Binary files /dev/null and b/src/assets/images/blocks/products/gaming-set.jpg differ diff --git a/src/assets/images/blocks/products/gaming.png b/src/assets/images/blocks/products/gaming.png new file mode 100644 index 0000000..f50969a Binary files /dev/null and b/src/assets/images/blocks/products/gaming.png differ diff --git a/src/assets/images/blocks/products/gold-phone-case.jpg b/src/assets/images/blocks/products/gold-phone-case.jpg new file mode 100644 index 0000000..63b128b Binary files /dev/null and b/src/assets/images/blocks/products/gold-phone-case.jpg differ diff --git a/src/assets/images/blocks/products/green-earbuds.jpg b/src/assets/images/blocks/products/green-earbuds.jpg new file mode 100644 index 0000000..41ccf84 Binary files /dev/null and b/src/assets/images/blocks/products/green-earbuds.jpg differ diff --git a/src/assets/images/blocks/products/green-t-shirt.jpg b/src/assets/images/blocks/products/green-t-shirt.jpg new file mode 100644 index 0000000..1386a6f Binary files /dev/null and b/src/assets/images/blocks/products/green-t-shirt.jpg differ diff --git a/src/assets/images/blocks/products/grey-t-shirt.jpg b/src/assets/images/blocks/products/grey-t-shirt.jpg new file mode 100644 index 0000000..f3d7d1b Binary files /dev/null and b/src/assets/images/blocks/products/grey-t-shirt.jpg differ diff --git a/src/assets/images/blocks/products/headphones.jpg b/src/assets/images/blocks/products/headphones.jpg new file mode 100644 index 0000000..7105bb3 Binary files /dev/null and b/src/assets/images/blocks/products/headphones.jpg differ diff --git a/src/assets/images/blocks/products/instant-camera.png b/src/assets/images/blocks/products/instant-camera.png new file mode 100644 index 0000000..824da70 Binary files /dev/null and b/src/assets/images/blocks/products/instant-camera.png differ diff --git a/src/assets/images/blocks/products/juice.png b/src/assets/images/blocks/products/juice.png new file mode 100644 index 0000000..7834987 Binary files /dev/null and b/src/assets/images/blocks/products/juice.png differ diff --git a/src/assets/images/blocks/products/light-green-t-shirt.jpg b/src/assets/images/blocks/products/light-green-t-shirt.jpg new file mode 100644 index 0000000..45ec0d5 Binary files /dev/null and b/src/assets/images/blocks/products/light-green-t-shirt.jpg differ diff --git a/src/assets/images/blocks/products/lime-band.jpg b/src/assets/images/blocks/products/lime-band.jpg new file mode 100644 index 0000000..696f7fd Binary files /dev/null and b/src/assets/images/blocks/products/lime-band.jpg differ diff --git a/src/assets/images/blocks/products/mini-speakers.jpg b/src/assets/images/blocks/products/mini-speakers.jpg new file mode 100644 index 0000000..40e035a Binary files /dev/null and b/src/assets/images/blocks/products/mini-speakers.jpg differ diff --git a/src/assets/images/blocks/products/model-car.png b/src/assets/images/blocks/products/model-car.png new file mode 100644 index 0000000..f961447 Binary files /dev/null and b/src/assets/images/blocks/products/model-car.png differ diff --git a/src/assets/images/blocks/products/painted-phone-case.jpg b/src/assets/images/blocks/products/painted-phone-case.jpg new file mode 100644 index 0000000..7c07f95 Binary files /dev/null and b/src/assets/images/blocks/products/painted-phone-case.jpg differ diff --git a/src/assets/images/blocks/products/perfume.png b/src/assets/images/blocks/products/perfume.png new file mode 100644 index 0000000..7fe84e6 Binary files /dev/null and b/src/assets/images/blocks/products/perfume.png differ diff --git a/src/assets/images/blocks/products/pink-band.jpg b/src/assets/images/blocks/products/pink-band.jpg new file mode 100644 index 0000000..d91ace6 Binary files /dev/null and b/src/assets/images/blocks/products/pink-band.jpg differ diff --git a/src/assets/images/blocks/products/pink-purse.jpg b/src/assets/images/blocks/products/pink-purse.jpg new file mode 100644 index 0000000..262aa34 Binary files /dev/null and b/src/assets/images/blocks/products/pink-purse.jpg differ diff --git a/src/assets/images/blocks/products/product-placeholder.svg b/src/assets/images/blocks/products/product-placeholder.svg new file mode 100644 index 0000000..714f105 --- /dev/null +++ b/src/assets/images/blocks/products/product-placeholder.svg @@ -0,0 +1,10 @@ + + + Artboard + + + + + + + \ No newline at end of file diff --git a/src/assets/images/blocks/products/purple-band.jpg b/src/assets/images/blocks/products/purple-band.jpg new file mode 100644 index 0000000..895a9fc Binary files /dev/null and b/src/assets/images/blocks/products/purple-band.jpg differ diff --git a/src/assets/images/blocks/products/purple-gemstone-necklace.jpg b/src/assets/images/blocks/products/purple-gemstone-necklace.jpg new file mode 100644 index 0000000..1e72c1e Binary files /dev/null and b/src/assets/images/blocks/products/purple-gemstone-necklace.jpg differ diff --git a/src/assets/images/blocks/products/purple-t-shirt.jpg b/src/assets/images/blocks/products/purple-t-shirt.jpg new file mode 100644 index 0000000..e3162f3 Binary files /dev/null and b/src/assets/images/blocks/products/purple-t-shirt.jpg differ diff --git a/src/assets/images/blocks/products/running-shoe.png b/src/assets/images/blocks/products/running-shoe.png new file mode 100644 index 0000000..b02c107 Binary files /dev/null and b/src/assets/images/blocks/products/running-shoe.png differ diff --git a/src/assets/images/blocks/products/shoes.jpg b/src/assets/images/blocks/products/shoes.jpg new file mode 100644 index 0000000..6ba2a41 Binary files /dev/null and b/src/assets/images/blocks/products/shoes.jpg differ diff --git a/src/assets/images/blocks/products/skateboard.png b/src/assets/images/blocks/products/skateboard.png new file mode 100644 index 0000000..9983f54 Binary files /dev/null and b/src/assets/images/blocks/products/skateboard.png differ diff --git a/src/assets/images/blocks/products/sneakers.jpg b/src/assets/images/blocks/products/sneakers.jpg new file mode 100644 index 0000000..405371b Binary files /dev/null and b/src/assets/images/blocks/products/sneakers.jpg differ diff --git a/src/assets/images/blocks/products/speaker.png b/src/assets/images/blocks/products/speaker.png new file mode 100644 index 0000000..cb16e1f Binary files /dev/null and b/src/assets/images/blocks/products/speaker.png differ diff --git a/src/assets/images/blocks/products/spoons.png b/src/assets/images/blocks/products/spoons.png new file mode 100644 index 0000000..5b933a2 Binary files /dev/null and b/src/assets/images/blocks/products/spoons.png differ diff --git a/src/assets/images/blocks/products/sport-shoe.png b/src/assets/images/blocks/products/sport-shoe.png new file mode 100644 index 0000000..6655667 Binary files /dev/null and b/src/assets/images/blocks/products/sport-shoe.png differ diff --git a/src/assets/images/blocks/products/sunglasses.png b/src/assets/images/blocks/products/sunglasses.png new file mode 100644 index 0000000..af6f052 Binary files /dev/null and b/src/assets/images/blocks/products/sunglasses.png differ diff --git a/src/assets/images/blocks/products/teal-t-shirt.jpg b/src/assets/images/blocks/products/teal-t-shirt.jpg new file mode 100644 index 0000000..c3c9b8f Binary files /dev/null and b/src/assets/images/blocks/products/teal-t-shirt.jpg differ diff --git a/src/assets/images/blocks/products/wax.png b/src/assets/images/blocks/products/wax.png new file mode 100644 index 0000000..4839eb2 Binary files /dev/null and b/src/assets/images/blocks/products/wax.png differ diff --git a/src/assets/images/blocks/products/wireless-headphone.png b/src/assets/images/blocks/products/wireless-headphone.png new file mode 100644 index 0000000..0476540 Binary files /dev/null and b/src/assets/images/blocks/products/wireless-headphone.png differ diff --git a/src/assets/images/blocks/products/yellow-earbuds.jpg b/src/assets/images/blocks/products/yellow-earbuds.jpg new file mode 100644 index 0000000..eb391eb Binary files /dev/null and b/src/assets/images/blocks/products/yellow-earbuds.jpg differ diff --git a/src/assets/images/blocks/products/yoga-mat.jpg b/src/assets/images/blocks/products/yoga-mat.jpg new file mode 100644 index 0000000..c6c35aa Binary files /dev/null and b/src/assets/images/blocks/products/yoga-mat.jpg differ diff --git a/src/assets/images/blocks/products/yoga-set.jpg b/src/assets/images/blocks/products/yoga-set.jpg new file mode 100644 index 0000000..6838cdd Binary files /dev/null and b/src/assets/images/blocks/products/yoga-set.jpg differ diff --git a/src/assets/images/blocks/signin/signin-2.jpg b/src/assets/images/blocks/signin/signin-2.jpg new file mode 100644 index 0000000..450b570 Binary files /dev/null and b/src/assets/images/blocks/signin/signin-2.jpg differ diff --git a/src/assets/images/blocks/signin/signin.jpg b/src/assets/images/blocks/signin/signin.jpg new file mode 100644 index 0000000..b424cba Binary files /dev/null and b/src/assets/images/blocks/signin/signin.jpg differ diff --git a/src/assets/images/blocks/stats/hats.png b/src/assets/images/blocks/stats/hats.png new file mode 100644 index 0000000..d4081d3 Binary files /dev/null and b/src/assets/images/blocks/stats/hats.png differ diff --git a/src/assets/images/blocks/stats/shoes.png b/src/assets/images/blocks/stats/shoes.png new file mode 100644 index 0000000..ccf27e0 Binary files /dev/null and b/src/assets/images/blocks/stats/shoes.png differ diff --git a/src/assets/images/blocks/stats/stats-1.png b/src/assets/images/blocks/stats/stats-1.png new file mode 100644 index 0000000..2ffe824 Binary files /dev/null and b/src/assets/images/blocks/stats/stats-1.png differ diff --git a/src/assets/images/blocks/team/team-1.png b/src/assets/images/blocks/team/team-1.png new file mode 100644 index 0000000..2f2c41b Binary files /dev/null and b/src/assets/images/blocks/team/team-1.png differ diff --git a/src/assets/images/blocks/team/team-10.png b/src/assets/images/blocks/team/team-10.png new file mode 100644 index 0000000..e11216b Binary files /dev/null and b/src/assets/images/blocks/team/team-10.png differ diff --git a/src/assets/images/blocks/team/team-11.png b/src/assets/images/blocks/team/team-11.png new file mode 100644 index 0000000..e64cbd9 Binary files /dev/null and b/src/assets/images/blocks/team/team-11.png differ diff --git a/src/assets/images/blocks/team/team-12.png b/src/assets/images/blocks/team/team-12.png new file mode 100644 index 0000000..d4a2a18 Binary files /dev/null and b/src/assets/images/blocks/team/team-12.png differ diff --git a/src/assets/images/blocks/team/team-13.png b/src/assets/images/blocks/team/team-13.png new file mode 100644 index 0000000..44f36e2 Binary files /dev/null and b/src/assets/images/blocks/team/team-13.png differ diff --git a/src/assets/images/blocks/team/team-14.png b/src/assets/images/blocks/team/team-14.png new file mode 100644 index 0000000..6b7234f Binary files /dev/null and b/src/assets/images/blocks/team/team-14.png differ diff --git a/src/assets/images/blocks/team/team-15.png b/src/assets/images/blocks/team/team-15.png new file mode 100644 index 0000000..788323e Binary files /dev/null and b/src/assets/images/blocks/team/team-15.png differ diff --git a/src/assets/images/blocks/team/team-16.png b/src/assets/images/blocks/team/team-16.png new file mode 100644 index 0000000..f8804b7 Binary files /dev/null and b/src/assets/images/blocks/team/team-16.png differ diff --git a/src/assets/images/blocks/team/team-2.png b/src/assets/images/blocks/team/team-2.png new file mode 100644 index 0000000..6a54991 Binary files /dev/null and b/src/assets/images/blocks/team/team-2.png differ diff --git a/src/assets/images/blocks/team/team-3.png b/src/assets/images/blocks/team/team-3.png new file mode 100644 index 0000000..b2f5b11 Binary files /dev/null and b/src/assets/images/blocks/team/team-3.png differ diff --git a/src/assets/images/blocks/team/team-4.png b/src/assets/images/blocks/team/team-4.png new file mode 100644 index 0000000..8a7fb28 Binary files /dev/null and b/src/assets/images/blocks/team/team-4.png differ diff --git a/src/assets/images/blocks/team/team-5.png b/src/assets/images/blocks/team/team-5.png new file mode 100644 index 0000000..168900c Binary files /dev/null and b/src/assets/images/blocks/team/team-5.png differ diff --git a/src/assets/images/blocks/team/team-6.png b/src/assets/images/blocks/team/team-6.png new file mode 100644 index 0000000..2667184 Binary files /dev/null and b/src/assets/images/blocks/team/team-6.png differ diff --git a/src/assets/images/blocks/team/team-7.png b/src/assets/images/blocks/team/team-7.png new file mode 100644 index 0000000..0d569db Binary files /dev/null and b/src/assets/images/blocks/team/team-7.png differ diff --git a/src/assets/images/blocks/team/team-8.png b/src/assets/images/blocks/team/team-8.png new file mode 100644 index 0000000..24523c6 Binary files /dev/null and b/src/assets/images/blocks/team/team-8.png differ diff --git a/src/assets/images/blocks/team/team-9.png b/src/assets/images/blocks/team/team-9.png new file mode 100644 index 0000000..5c5ec25 Binary files /dev/null and b/src/assets/images/blocks/team/team-9.png differ diff --git a/src/assets/images/blocks/testimonial/testimonials-1.png b/src/assets/images/blocks/testimonial/testimonials-1.png new file mode 100644 index 0000000..8947058 Binary files /dev/null and b/src/assets/images/blocks/testimonial/testimonials-1.png differ diff --git a/src/assets/images/blocks/testimonial/testimonials-2.png b/src/assets/images/blocks/testimonial/testimonials-2.png new file mode 100644 index 0000000..0b14384 Binary files /dev/null and b/src/assets/images/blocks/testimonial/testimonials-2.png differ diff --git a/src/assets/images/blocks/testimonial/testimonials-3.png b/src/assets/images/blocks/testimonial/testimonials-3.png new file mode 100644 index 0000000..9384932 Binary files /dev/null and b/src/assets/images/blocks/testimonial/testimonials-3.png differ diff --git a/src/assets/images/blocks/testimonial/testimonials-4.png b/src/assets/images/blocks/testimonial/testimonials-4.png new file mode 100644 index 0000000..7c0c23a Binary files /dev/null and b/src/assets/images/blocks/testimonial/testimonials-4.png differ diff --git a/src/assets/images/blocks/testimonial/testimonials-5.jpg b/src/assets/images/blocks/testimonial/testimonials-5.jpg new file mode 100644 index 0000000..1f9647c Binary files /dev/null and b/src/assets/images/blocks/testimonial/testimonials-5.jpg differ diff --git a/src/assets/images/blocks/testimonial/testimonials-6.png b/src/assets/images/blocks/testimonial/testimonials-6.png new file mode 100644 index 0000000..5b06e5d Binary files /dev/null and b/src/assets/images/blocks/testimonial/testimonials-6.png differ diff --git a/src/assets/images/blocks/testimonial/testimonials-7.jpeg b/src/assets/images/blocks/testimonial/testimonials-7.jpeg new file mode 100644 index 0000000..b50dfeb Binary files /dev/null and b/src/assets/images/blocks/testimonial/testimonials-7.jpeg differ diff --git a/src/assets/images/blocks/testimonial/testimonials-8.jpg b/src/assets/images/blocks/testimonial/testimonials-8.jpg new file mode 100644 index 0000000..d11ae73 Binary files /dev/null and b/src/assets/images/blocks/testimonial/testimonials-8.jpg differ diff --git a/src/assets/images/error-404.png b/src/assets/images/error-404.png new file mode 100644 index 0000000..a147b04 Binary files /dev/null and b/src/assets/images/error-404.png differ diff --git a/src/assets/images/google/powered_by_google_on_white.png b/src/assets/images/google/powered_by_google_on_white.png new file mode 100644 index 0000000..4d2c669 Binary files /dev/null and b/src/assets/images/google/powered_by_google_on_white.png differ diff --git a/src/assets/images/icon-primeblocks.svg b/src/assets/images/icon-primeblocks.svg new file mode 100644 index 0000000..d8f3859 --- /dev/null +++ b/src/assets/images/icon-primeblocks.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/logo-primeblocks-dark.svg b/src/assets/images/logo-primeblocks-dark.svg new file mode 100644 index 0000000..5960ca0 --- /dev/null +++ b/src/assets/images/logo-primeblocks-dark.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/logo-primeblocks.svg b/src/assets/images/logo-primeblocks.svg new file mode 100644 index 0000000..3e2a516 --- /dev/null +++ b/src/assets/images/logo-primeblocks.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/medimutua/logo.png b/src/assets/images/medimutua/logo.png new file mode 100644 index 0000000..bc2f6e0 Binary files /dev/null and b/src/assets/images/medimutua/logo.png differ diff --git a/src/assets/images/mutualigure/logo.png b/src/assets/images/mutualigure/logo.png new file mode 100644 index 0000000..08d107d Binary files /dev/null and b/src/assets/images/mutualigure/logo.png differ diff --git a/src/assets/images/placeholders/placeholder-actionpanels-dark.svg b/src/assets/images/placeholders/placeholder-actionpanels-dark.svg new file mode 100644 index 0000000..915c161 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-actionpanels-dark.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-actionpanels.svg b/src/assets/images/placeholders/placeholder-actionpanels.svg new file mode 100644 index 0000000..e44419b --- /dev/null +++ b/src/assets/images/placeholders/placeholder-actionpanels.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-alert-dark.svg b/src/assets/images/placeholders/placeholder-alert-dark.svg new file mode 100644 index 0000000..f95ce8d --- /dev/null +++ b/src/assets/images/placeholders/placeholder-alert-dark.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-alert.svg b/src/assets/images/placeholders/placeholder-alert.svg new file mode 100644 index 0000000..9294a6a --- /dev/null +++ b/src/assets/images/placeholders/placeholder-alert.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-app-navbar-dark.svg b/src/assets/images/placeholders/placeholder-app-navbar-dark.svg new file mode 100644 index 0000000..7c9d4d8 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-app-navbar-dark.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-app-navbar.svg b/src/assets/images/placeholders/placeholder-app-navbar.svg new file mode 100644 index 0000000..7b9f4b4 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-app-navbar.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-banner-dark.svg b/src/assets/images/placeholders/placeholder-banner-dark.svg new file mode 100644 index 0000000..c3e8691 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-banner-dark.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-banner.svg b/src/assets/images/placeholders/placeholder-banner.svg new file mode 100644 index 0000000..5560d06 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-banner.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-blogsections-dark.svg b/src/assets/images/placeholders/placeholder-blogsections-dark.svg new file mode 100644 index 0000000..c6eacdd --- /dev/null +++ b/src/assets/images/placeholders/placeholder-blogsections-dark.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-blogsections.svg b/src/assets/images/placeholders/placeholder-blogsections.svg new file mode 100644 index 0000000..1909566 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-blogsections.svg @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-breadcrumb-dark.svg b/src/assets/images/placeholders/placeholder-breadcrumb-dark.svg new file mode 100644 index 0000000..abe62db --- /dev/null +++ b/src/assets/images/placeholders/placeholder-breadcrumb-dark.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-breadcrumb.svg b/src/assets/images/placeholders/placeholder-breadcrumb.svg new file mode 100644 index 0000000..a141c34 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-breadcrumb.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-cardheadings-dark.svg b/src/assets/images/placeholders/placeholder-cardheadings-dark.svg new file mode 100644 index 0000000..2cc8dac --- /dev/null +++ b/src/assets/images/placeholders/placeholder-cardheadings-dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-cardheadings.svg b/src/assets/images/placeholders/placeholder-cardheadings.svg new file mode 100644 index 0000000..1283f1f --- /dev/null +++ b/src/assets/images/placeholders/placeholder-cardheadings.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-categoryfilters-dark.svg b/src/assets/images/placeholders/placeholder-categoryfilters-dark.svg new file mode 100644 index 0000000..5e3e94b --- /dev/null +++ b/src/assets/images/placeholders/placeholder-categoryfilters-dark.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-categoryfilters.svg b/src/assets/images/placeholders/placeholder-categoryfilters.svg new file mode 100644 index 0000000..6c4cd71 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-categoryfilters.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-categorypages-dark.svg b/src/assets/images/placeholders/placeholder-categorypages-dark.svg new file mode 100644 index 0000000..118b666 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-categorypages-dark.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-categorypages.svg b/src/assets/images/placeholders/placeholder-categorypages.svg new file mode 100644 index 0000000..382a092 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-categorypages.svg @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-categorypreviews-dark.svg b/src/assets/images/placeholders/placeholder-categorypreviews-dark.svg new file mode 100644 index 0000000..d8d6d6b --- /dev/null +++ b/src/assets/images/placeholders/placeholder-categorypreviews-dark.svg @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-categorypreviews.svg b/src/assets/images/placeholders/placeholder-categorypreviews.svg new file mode 100644 index 0000000..29747c8 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-categorypreviews.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-checkoutforms-dark.svg b/src/assets/images/placeholders/placeholder-checkoutforms-dark.svg new file mode 100644 index 0000000..bd8656b --- /dev/null +++ b/src/assets/images/placeholders/placeholder-checkoutforms-dark.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-checkoutforms.svg b/src/assets/images/placeholders/placeholder-checkoutforms.svg new file mode 100644 index 0000000..a3cce7e --- /dev/null +++ b/src/assets/images/placeholders/placeholder-checkoutforms.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-checkoutpages-dark.svg b/src/assets/images/placeholders/placeholder-checkoutpages-dark.svg new file mode 100644 index 0000000..0d987b9 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-checkoutpages-dark.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-checkoutpages.svg b/src/assets/images/placeholders/placeholder-checkoutpages.svg new file mode 100644 index 0000000..466e6f1 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-checkoutpages.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-commandmenu-dark.svg b/src/assets/images/placeholders/placeholder-commandmenu-dark.svg new file mode 100644 index 0000000..4ac2043 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-commandmenu-dark.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-commandmenu.svg b/src/assets/images/placeholders/placeholder-commandmenu.svg new file mode 100644 index 0000000..306bad3 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-commandmenu.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-contactsections-dark.svg b/src/assets/images/placeholders/placeholder-contactsections-dark.svg new file mode 100644 index 0000000..9092cb9 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-contactsections-dark.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-contactsections.svg b/src/assets/images/placeholders/placeholder-contactsections.svg new file mode 100644 index 0000000..f565b2f --- /dev/null +++ b/src/assets/images/placeholders/placeholder-contactsections.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-containers-dark.svg b/src/assets/images/placeholders/placeholder-containers-dark.svg new file mode 100644 index 0000000..7239e1e --- /dev/null +++ b/src/assets/images/placeholders/placeholder-containers-dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/placeholders/placeholder-containers.svg b/src/assets/images/placeholders/placeholder-containers.svg new file mode 100644 index 0000000..8948dc5 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-containers.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/placeholders/placeholder-contentsections-dark.svg b/src/assets/images/placeholders/placeholder-contentsections-dark.svg new file mode 100644 index 0000000..21b9a81 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-contentsections-dark.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-contentsections.svg b/src/assets/images/placeholders/placeholder-contentsections.svg new file mode 100644 index 0000000..3418bb7 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-contentsections.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-cta-dark.svg b/src/assets/images/placeholders/placeholder-cta-dark.svg new file mode 100644 index 0000000..109dcfe --- /dev/null +++ b/src/assets/images/placeholders/placeholder-cta-dark.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-cta.svg b/src/assets/images/placeholders/placeholder-cta.svg new file mode 100644 index 0000000..85c446f --- /dev/null +++ b/src/assets/images/placeholders/placeholder-cta.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-dashboard-dark.svg b/src/assets/images/placeholders/placeholder-dashboard-dark.svg new file mode 100644 index 0000000..bc4a2ec --- /dev/null +++ b/src/assets/images/placeholders/placeholder-dashboard-dark.svg @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-dashboard.svg b/src/assets/images/placeholders/placeholder-dashboard.svg new file mode 100644 index 0000000..c537c2c --- /dev/null +++ b/src/assets/images/placeholders/placeholder-dashboard.svg @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-descriptionlist-dark.svg b/src/assets/images/placeholders/placeholder-descriptionlist-dark.svg new file mode 100644 index 0000000..fcf5ca6 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-descriptionlist-dark.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-descriptionlist.svg b/src/assets/images/placeholders/placeholder-descriptionlist.svg new file mode 100644 index 0000000..70654af --- /dev/null +++ b/src/assets/images/placeholders/placeholder-descriptionlist.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-detailscreens-dark.svg b/src/assets/images/placeholders/placeholder-detailscreens-dark.svg new file mode 100644 index 0000000..18c237b --- /dev/null +++ b/src/assets/images/placeholders/placeholder-detailscreens-dark.svg @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-detailscreens.svg b/src/assets/images/placeholders/placeholder-detailscreens.svg new file mode 100644 index 0000000..275553c --- /dev/null +++ b/src/assets/images/placeholders/placeholder-detailscreens.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-dialog-dark.svg b/src/assets/images/placeholders/placeholder-dialog-dark.svg new file mode 100644 index 0000000..930e94d --- /dev/null +++ b/src/assets/images/placeholders/placeholder-dialog-dark.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-dialog.svg b/src/assets/images/placeholders/placeholder-dialog.svg new file mode 100644 index 0000000..310cc0c --- /dev/null +++ b/src/assets/images/placeholders/placeholder-dialog.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-dividers-dark.svg b/src/assets/images/placeholders/placeholder-dividers-dark.svg new file mode 100644 index 0000000..a16e79c --- /dev/null +++ b/src/assets/images/placeholders/placeholder-dividers-dark.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-dividers.svg b/src/assets/images/placeholders/placeholder-dividers.svg new file mode 100644 index 0000000..8f219ba --- /dev/null +++ b/src/assets/images/placeholders/placeholder-dividers.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-faq-dark.svg b/src/assets/images/placeholders/placeholder-faq-dark.svg new file mode 100644 index 0000000..5d1284e --- /dev/null +++ b/src/assets/images/placeholders/placeholder-faq-dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-faq.svg b/src/assets/images/placeholders/placeholder-faq.svg new file mode 100644 index 0000000..fa18b93 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-faq.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-feature-dark.svg b/src/assets/images/placeholders/placeholder-feature-dark.svg new file mode 100644 index 0000000..c561565 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-feature-dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-feature.svg b/src/assets/images/placeholders/placeholder-feature.svg new file mode 100644 index 0000000..88eea0d --- /dev/null +++ b/src/assets/images/placeholders/placeholder-feature.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-feeds-dark.svg b/src/assets/images/placeholders/placeholder-feeds-dark.svg new file mode 100644 index 0000000..eba39d3 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-feeds-dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-feeds.svg b/src/assets/images/placeholders/placeholder-feeds.svg new file mode 100644 index 0000000..de240d6 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-feeds.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-footer-dark.svg b/src/assets/images/placeholders/placeholder-footer-dark.svg new file mode 100644 index 0000000..03ea7da --- /dev/null +++ b/src/assets/images/placeholders/placeholder-footer-dark.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-footer.svg b/src/assets/images/placeholders/placeholder-footer.svg new file mode 100644 index 0000000..9d7cbe0 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-footer.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-footers-appui-dark.svg b/src/assets/images/placeholders/placeholder-footers-appui-dark.svg new file mode 100644 index 0000000..9edb63c --- /dev/null +++ b/src/assets/images/placeholders/placeholder-footers-appui-dark.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-footers-appui.svg b/src/assets/images/placeholders/placeholder-footers-appui.svg new file mode 100644 index 0000000..9686b76 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-footers-appui.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-formlayouts-dark.svg b/src/assets/images/placeholders/placeholder-formlayouts-dark.svg new file mode 100644 index 0000000..b2afc0e --- /dev/null +++ b/src/assets/images/placeholders/placeholder-formlayouts-dark.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-formlayouts.svg b/src/assets/images/placeholders/placeholder-formlayouts.svg new file mode 100644 index 0000000..5fec561 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-formlayouts.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-gridlists-dark.svg b/src/assets/images/placeholders/placeholder-gridlists-dark.svg new file mode 100644 index 0000000..3c68913 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-gridlists-dark.svg @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-gridlists.svg b/src/assets/images/placeholders/placeholder-gridlists.svg new file mode 100644 index 0000000..b334411 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-gridlists.svg @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-hero-dark.svg b/src/assets/images/placeholders/placeholder-hero-dark.svg new file mode 100644 index 0000000..333ba91 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-hero-dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-hero.svg b/src/assets/images/placeholders/placeholder-hero.svg new file mode 100644 index 0000000..6032098 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-hero.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-incentives-dark.svg b/src/assets/images/placeholders/placeholder-incentives-dark.svg new file mode 100644 index 0000000..c46b799 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-incentives-dark.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-incentives.svg b/src/assets/images/placeholders/placeholder-incentives.svg new file mode 100644 index 0000000..7ddc658 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-incentives.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-landingscreens-dark.svg b/src/assets/images/placeholders/placeholder-landingscreens-dark.svg new file mode 100644 index 0000000..9214717 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-landingscreens-dark.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-landingscreens.svg b/src/assets/images/placeholders/placeholder-landingscreens.svg new file mode 100644 index 0000000..e1e3927 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-landingscreens.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-listcontainers-dark.svg b/src/assets/images/placeholders/placeholder-listcontainers-dark.svg new file mode 100644 index 0000000..4cba352 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-listcontainers-dark.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-listcontainers.svg b/src/assets/images/placeholders/placeholder-listcontainers.svg new file mode 100644 index 0000000..d0e84a9 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-listcontainers.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-logocloud-dark.svg b/src/assets/images/placeholders/placeholder-logocloud-dark.svg new file mode 100644 index 0000000..5f7da8b --- /dev/null +++ b/src/assets/images/placeholders/placeholder-logocloud-dark.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-logocloud.svg b/src/assets/images/placeholders/placeholder-logocloud.svg new file mode 100644 index 0000000..429103e --- /dev/null +++ b/src/assets/images/placeholders/placeholder-logocloud.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-marketing-navbar-dark.svg b/src/assets/images/placeholders/placeholder-marketing-navbar-dark.svg new file mode 100644 index 0000000..3b677ab --- /dev/null +++ b/src/assets/images/placeholders/placeholder-marketing-navbar-dark.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-marketing-navbar.svg b/src/assets/images/placeholders/placeholder-marketing-navbar.svg new file mode 100644 index 0000000..b50b508 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-marketing-navbar.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-multicolumnlayouts-dark.svg b/src/assets/images/placeholders/placeholder-multicolumnlayouts-dark.svg new file mode 100644 index 0000000..53df7d2 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-multicolumnlayouts-dark.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-multicolumnlayouts.svg b/src/assets/images/placeholders/placeholder-multicolumnlayouts.svg new file mode 100644 index 0000000..bc925d2 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-multicolumnlayouts.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-newsletter-dark.svg b/src/assets/images/placeholders/placeholder-newsletter-dark.svg new file mode 100644 index 0000000..215ba49 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-newsletter-dark.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-newsletter.svg b/src/assets/images/placeholders/placeholder-newsletter.svg new file mode 100644 index 0000000..c53b38c --- /dev/null +++ b/src/assets/images/placeholders/placeholder-newsletter.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-notification-dark.svg b/src/assets/images/placeholders/placeholder-notification-dark.svg new file mode 100644 index 0000000..65f6502 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-notification-dark.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-notification.svg b/src/assets/images/placeholders/placeholder-notification.svg new file mode 100644 index 0000000..44a5ee8 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-notification.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-orderdetailpages-dark.svg b/src/assets/images/placeholders/placeholder-orderdetailpages-dark.svg new file mode 100644 index 0000000..029d277 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-orderdetailpages-dark.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-orderdetailpages.svg b/src/assets/images/placeholders/placeholder-orderdetailpages.svg new file mode 100644 index 0000000..9ca2e07 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-orderdetailpages.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-orderhistory-dark.svg b/src/assets/images/placeholders/placeholder-orderhistory-dark.svg new file mode 100644 index 0000000..d34b22b --- /dev/null +++ b/src/assets/images/placeholders/placeholder-orderhistory-dark.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-orderhistory.svg b/src/assets/images/placeholders/placeholder-orderhistory.svg new file mode 100644 index 0000000..717be5a --- /dev/null +++ b/src/assets/images/placeholders/placeholder-orderhistory.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-orderhistorypages-dark.svg b/src/assets/images/placeholders/placeholder-orderhistorypages-dark.svg new file mode 100644 index 0000000..1f8c710 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-orderhistorypages-dark.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-orderhistorypages.svg b/src/assets/images/placeholders/placeholder-orderhistorypages.svg new file mode 100644 index 0000000..f7252a7 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-orderhistorypages.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-ordersummaries-dark.svg b/src/assets/images/placeholders/placeholder-ordersummaries-dark.svg new file mode 100644 index 0000000..ad51d21 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-ordersummaries-dark.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-ordersummaries.svg b/src/assets/images/placeholders/placeholder-ordersummaries.svg new file mode 100644 index 0000000..503ac57 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-ordersummaries.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-pageheadings-dark.svg b/src/assets/images/placeholders/placeholder-pageheadings-dark.svg new file mode 100644 index 0000000..4f994c2 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-pageheadings-dark.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-pageheadings.svg b/src/assets/images/placeholders/placeholder-pageheadings.svg new file mode 100644 index 0000000..0f28c7f --- /dev/null +++ b/src/assets/images/placeholders/placeholder-pageheadings.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-pagenotfound-dark.svg b/src/assets/images/placeholders/placeholder-pagenotfound-dark.svg new file mode 100644 index 0000000..f94232d --- /dev/null +++ b/src/assets/images/placeholders/placeholder-pagenotfound-dark.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-pagenotfound.svg b/src/assets/images/placeholders/placeholder-pagenotfound.svg new file mode 100644 index 0000000..adf6e7b --- /dev/null +++ b/src/assets/images/placeholders/placeholder-pagenotfound.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-panels-dark.svg b/src/assets/images/placeholders/placeholder-panels-dark.svg new file mode 100644 index 0000000..3603250 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-panels-dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-panels.svg b/src/assets/images/placeholders/placeholder-panels.svg new file mode 100644 index 0000000..c3833db --- /dev/null +++ b/src/assets/images/placeholders/placeholder-panels.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-pricing-dark.svg b/src/assets/images/placeholders/placeholder-pricing-dark.svg new file mode 100644 index 0000000..998d7d0 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-pricing-dark.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-pricing.svg b/src/assets/images/placeholders/placeholder-pricing.svg new file mode 100644 index 0000000..b798e9f --- /dev/null +++ b/src/assets/images/placeholders/placeholder-pricing.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-productfeatures-dark.svg b/src/assets/images/placeholders/placeholder-productfeatures-dark.svg new file mode 100644 index 0000000..5e7da31 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-productfeatures-dark.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-productfeatures.svg b/src/assets/images/placeholders/placeholder-productfeatures.svg new file mode 100644 index 0000000..cd40a94 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-productfeatures.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-productlists-dark.svg b/src/assets/images/placeholders/placeholder-productlists-dark.svg new file mode 100644 index 0000000..9c33910 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-productlists-dark.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-productlists.svg b/src/assets/images/placeholders/placeholder-productlists.svg new file mode 100644 index 0000000..d624724 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-productlists.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-productoverviews-dark.svg b/src/assets/images/placeholders/placeholder-productoverviews-dark.svg new file mode 100644 index 0000000..6be81a0 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-productoverviews-dark.svg @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-productoverviews.svg b/src/assets/images/placeholders/placeholder-productoverviews.svg new file mode 100644 index 0000000..5c267fa --- /dev/null +++ b/src/assets/images/placeholders/placeholder-productoverviews.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-productpages-dark.svg b/src/assets/images/placeholders/placeholder-productpages-dark.svg new file mode 100644 index 0000000..9b65271 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-productpages-dark.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-productpages.svg b/src/assets/images/placeholders/placeholder-productpages.svg new file mode 100644 index 0000000..24ecb76 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-productpages.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-productquickviews-dark.svg b/src/assets/images/placeholders/placeholder-productquickviews-dark.svg new file mode 100644 index 0000000..9e1a1ef --- /dev/null +++ b/src/assets/images/placeholders/placeholder-productquickviews-dark.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-productquickviews.svg b/src/assets/images/placeholders/placeholder-productquickviews.svg new file mode 100644 index 0000000..476a461 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-productquickviews.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-promosections-dark.svg b/src/assets/images/placeholders/placeholder-promosections-dark.svg new file mode 100644 index 0000000..cf75bc1 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-promosections-dark.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-promosections.svg b/src/assets/images/placeholders/placeholder-promosections.svg new file mode 100644 index 0000000..c8b28c9 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-promosections.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-radiogroups-dark.svg b/src/assets/images/placeholders/placeholder-radiogroups-dark.svg new file mode 100644 index 0000000..9e7be46 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-radiogroups-dark.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-radiogroups.svg b/src/assets/images/placeholders/placeholder-radiogroups.svg new file mode 100644 index 0000000..ebf5507 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-radiogroups.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-reviews-dark.svg b/src/assets/images/placeholders/placeholder-reviews-dark.svg new file mode 100644 index 0000000..b327162 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-reviews-dark.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-reviews.svg b/src/assets/images/placeholders/placeholder-reviews.svg new file mode 100644 index 0000000..ad75b8b --- /dev/null +++ b/src/assets/images/placeholders/placeholder-reviews.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-sectionheadings-dark.svg b/src/assets/images/placeholders/placeholder-sectionheadings-dark.svg new file mode 100644 index 0000000..a5b7168 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-sectionheadings-dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/images/placeholders/placeholder-sectionheadings.svg b/src/assets/images/placeholders/placeholder-sectionheadings.svg new file mode 100644 index 0000000..7334674 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-sectionheadings.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/images/placeholders/placeholder-settingscreens-dark.svg b/src/assets/images/placeholders/placeholder-settingscreens-dark.svg new file mode 100644 index 0000000..82a0e76 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-settingscreens-dark.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-settingscreens.svg b/src/assets/images/placeholders/placeholder-settingscreens.svg new file mode 100644 index 0000000..9851fb3 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-settingscreens.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-shoppingcartpages-dark.svg b/src/assets/images/placeholders/placeholder-shoppingcartpages-dark.svg new file mode 100644 index 0000000..13b7419 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-shoppingcartpages-dark.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-shoppingcartpages.svg b/src/assets/images/placeholders/placeholder-shoppingcartpages.svg new file mode 100644 index 0000000..a4bd08a --- /dev/null +++ b/src/assets/images/placeholders/placeholder-shoppingcartpages.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-shoppingcarts-dark.svg b/src/assets/images/placeholders/placeholder-shoppingcarts-dark.svg new file mode 100644 index 0000000..d5f6ca3 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-shoppingcarts-dark.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-shoppingcarts.svg b/src/assets/images/placeholders/placeholder-shoppingcarts.svg new file mode 100644 index 0000000..acd9dbe --- /dev/null +++ b/src/assets/images/placeholders/placeholder-shoppingcarts.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-sidebarlayouts-dark.svg b/src/assets/images/placeholders/placeholder-sidebarlayouts-dark.svg new file mode 100644 index 0000000..c412768 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-sidebarlayouts-dark.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-sidebarlayouts.svg b/src/assets/images/placeholders/placeholder-sidebarlayouts.svg new file mode 100644 index 0000000..53fb6cc --- /dev/null +++ b/src/assets/images/placeholders/placeholder-sidebarlayouts.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-sidebarnavigation-dark.svg b/src/assets/images/placeholders/placeholder-sidebarnavigation-dark.svg new file mode 100644 index 0000000..da7b74c --- /dev/null +++ b/src/assets/images/placeholders/placeholder-sidebarnavigation-dark.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-sidebarnavigation.svg b/src/assets/images/placeholders/placeholder-sidebarnavigation.svg new file mode 100644 index 0000000..9adc60b --- /dev/null +++ b/src/assets/images/placeholders/placeholder-sidebarnavigation.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-signin-dark.svg b/src/assets/images/placeholders/placeholder-signin-dark.svg new file mode 100644 index 0000000..26ec0bc --- /dev/null +++ b/src/assets/images/placeholders/placeholder-signin-dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-signin.svg b/src/assets/images/placeholders/placeholder-signin.svg new file mode 100644 index 0000000..bfffde9 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-signin.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-slideovers-dark.svg b/src/assets/images/placeholders/placeholder-slideovers-dark.svg new file mode 100644 index 0000000..f9fc3f9 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-slideovers-dark.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-slideovers.svg b/src/assets/images/placeholders/placeholder-slideovers.svg new file mode 100644 index 0000000..51bc425 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-slideovers.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-stackedlayout-dark.svg b/src/assets/images/placeholders/placeholder-stackedlayout-dark.svg new file mode 100644 index 0000000..c3258b2 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-stackedlayout-dark.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-stackedlayout.svg b/src/assets/images/placeholders/placeholder-stackedlayout.svg new file mode 100644 index 0000000..11e1528 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-stackedlayout.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-stackedlists-dark.svg b/src/assets/images/placeholders/placeholder-stackedlists-dark.svg new file mode 100644 index 0000000..187c34c --- /dev/null +++ b/src/assets/images/placeholders/placeholder-stackedlists-dark.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-stackedlists.svg b/src/assets/images/placeholders/placeholder-stackedlists.svg new file mode 100644 index 0000000..4bba460 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-stackedlists.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-stats-dark.svg b/src/assets/images/placeholders/placeholder-stats-dark.svg new file mode 100644 index 0000000..c6a5df2 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-stats-dark.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-stats-data-dark.svg b/src/assets/images/placeholders/placeholder-stats-data-dark.svg new file mode 100644 index 0000000..4f02503 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-stats-data-dark.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-stats-data.svg b/src/assets/images/placeholders/placeholder-stats-data.svg new file mode 100644 index 0000000..b3aeb98 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-stats-data.svg @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-stats.svg b/src/assets/images/placeholders/placeholder-stats.svg new file mode 100644 index 0000000..fd14fad --- /dev/null +++ b/src/assets/images/placeholders/placeholder-stats.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-steps-dark.svg b/src/assets/images/placeholders/placeholder-steps-dark.svg new file mode 100644 index 0000000..50f469b --- /dev/null +++ b/src/assets/images/placeholders/placeholder-steps-dark.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-steps.svg b/src/assets/images/placeholders/placeholder-steps.svg new file mode 100644 index 0000000..53b8c5a --- /dev/null +++ b/src/assets/images/placeholders/placeholder-steps.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-storefrontpages-dark.svg b/src/assets/images/placeholders/placeholder-storefrontpages-dark.svg new file mode 100644 index 0000000..2c978f2 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-storefrontpages-dark.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-storefrontpages.svg b/src/assets/images/placeholders/placeholder-storefrontpages.svg new file mode 100644 index 0000000..616622e --- /dev/null +++ b/src/assets/images/placeholders/placeholder-storefrontpages.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-storenavigation-dark.svg b/src/assets/images/placeholders/placeholder-storenavigation-dark.svg new file mode 100644 index 0000000..24a6bbb --- /dev/null +++ b/src/assets/images/placeholders/placeholder-storenavigation-dark.svg @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-storenavigation.svg b/src/assets/images/placeholders/placeholder-storenavigation.svg new file mode 100644 index 0000000..fb0927f --- /dev/null +++ b/src/assets/images/placeholders/placeholder-storenavigation.svg @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-tabs-dark.svg b/src/assets/images/placeholders/placeholder-tabs-dark.svg new file mode 100644 index 0000000..6c3bc45 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-tabs-dark.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-tabs.svg b/src/assets/images/placeholders/placeholder-tabs.svg new file mode 100644 index 0000000..6d0adf6 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-tabs.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-teamsections-dark.svg b/src/assets/images/placeholders/placeholder-teamsections-dark.svg new file mode 100644 index 0000000..29729a4 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-teamsections-dark.svg @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-teamsections.svg b/src/assets/images/placeholders/placeholder-teamsections.svg new file mode 100644 index 0000000..3d111d5 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-teamsections.svg @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-testimonials-dark.svg b/src/assets/images/placeholders/placeholder-testimonials-dark.svg new file mode 100644 index 0000000..a677484 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-testimonials-dark.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-testimonials.svg b/src/assets/images/placeholders/placeholder-testimonials.svg new file mode 100644 index 0000000..6aeb0e8 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-testimonials.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-verticalnavigation-dark.svg b/src/assets/images/placeholders/placeholder-verticalnavigation-dark.svg new file mode 100644 index 0000000..e5f5d35 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-verticalnavigation-dark.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/images/placeholders/placeholder-verticalnavigation.svg b/src/assets/images/placeholders/placeholder-verticalnavigation.svg new file mode 100644 index 0000000..65c7256 --- /dev/null +++ b/src/assets/images/placeholders/placeholder-verticalnavigation.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/images/pricing/airbus.svg b/src/assets/images/pricing/airbus.svg new file mode 100644 index 0000000..a491311 --- /dev/null +++ b/src/assets/images/pricing/airbus.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/pricing/amex.svg b/src/assets/images/pricing/amex.svg new file mode 100644 index 0000000..7755747 --- /dev/null +++ b/src/assets/images/pricing/amex.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/images/pricing/bg-pricing-dark.jpg b/src/assets/images/pricing/bg-pricing-dark.jpg new file mode 100644 index 0000000..0b420b1 Binary files /dev/null and b/src/assets/images/pricing/bg-pricing-dark.jpg differ diff --git a/src/assets/images/pricing/bg-pricing.jpg b/src/assets/images/pricing/bg-pricing.jpg new file mode 100644 index 0000000..8555e3e Binary files /dev/null and b/src/assets/images/pricing/bg-pricing.jpg differ diff --git a/src/assets/images/pricing/ebay.svg b/src/assets/images/pricing/ebay.svg new file mode 100644 index 0000000..2ce7392 --- /dev/null +++ b/src/assets/images/pricing/ebay.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/pricing/ford.svg b/src/assets/images/pricing/ford.svg new file mode 100644 index 0000000..fcdaec0 --- /dev/null +++ b/src/assets/images/pricing/ford.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/images/pricing/fox.svg b/src/assets/images/pricing/fox.svg new file mode 100644 index 0000000..09ba7eb --- /dev/null +++ b/src/assets/images/pricing/fox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/pricing/lufthansa.svg b/src/assets/images/pricing/lufthansa.svg new file mode 100644 index 0000000..a4d7d5b --- /dev/null +++ b/src/assets/images/pricing/lufthansa.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/assets/images/pricing/mercedes.svg b/src/assets/images/pricing/mercedes.svg new file mode 100644 index 0000000..7991605 --- /dev/null +++ b/src/assets/images/pricing/mercedes.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/images/pricing/nvidia.svg b/src/assets/images/pricing/nvidia.svg new file mode 100644 index 0000000..ea63d68 --- /dev/null +++ b/src/assets/images/pricing/nvidia.svg @@ -0,0 +1,10 @@ + + + nvidia + + + + + + + \ No newline at end of file diff --git a/src/assets/images/pricing/sap.svg b/src/assets/images/pricing/sap.svg new file mode 100644 index 0000000..64564bc --- /dev/null +++ b/src/assets/images/pricing/sap.svg @@ -0,0 +1,9 @@ + + + sap + + + + + + \ No newline at end of file diff --git a/src/assets/images/pricing/unicredit.svg b/src/assets/images/pricing/unicredit.svg new file mode 100644 index 0000000..92646df --- /dev/null +++ b/src/assets/images/pricing/unicredit.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/pricing/verizon.svg b/src/assets/images/pricing/verizon.svg new file mode 100644 index 0000000..c2e3495 --- /dev/null +++ b/src/assets/images/pricing/verizon.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/pricing/viacom.svg b/src/assets/images/pricing/viacom.svg new file mode 100644 index 0000000..1bc3900 --- /dev/null +++ b/src/assets/images/pricing/viacom.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/smp/logo.png b/src/assets/images/smp/logo.png new file mode 100644 index 0000000..7ecba3b Binary files /dev/null and b/src/assets/images/smp/logo.png differ diff --git a/src/assets/images/themes/arya-blue.png b/src/assets/images/themes/arya-blue.png new file mode 100644 index 0000000..06eaf5d Binary files /dev/null and b/src/assets/images/themes/arya-blue.png differ diff --git a/src/assets/images/themes/arya-green.png b/src/assets/images/themes/arya-green.png new file mode 100644 index 0000000..7219b35 Binary files /dev/null and b/src/assets/images/themes/arya-green.png differ diff --git a/src/assets/images/themes/arya-orange.png b/src/assets/images/themes/arya-orange.png new file mode 100644 index 0000000..7c6656d Binary files /dev/null and b/src/assets/images/themes/arya-orange.png differ diff --git a/src/assets/images/themes/arya-purple.png b/src/assets/images/themes/arya-purple.png new file mode 100644 index 0000000..0a79a00 Binary files /dev/null and b/src/assets/images/themes/arya-purple.png differ diff --git a/src/assets/images/themes/bootstrap4-dark-blue.svg b/src/assets/images/themes/bootstrap4-dark-blue.svg new file mode 100644 index 0000000..d0a9de4 --- /dev/null +++ b/src/assets/images/themes/bootstrap4-dark-blue.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/themes/bootstrap4-dark-purple.svg b/src/assets/images/themes/bootstrap4-dark-purple.svg new file mode 100644 index 0000000..c97df77 --- /dev/null +++ b/src/assets/images/themes/bootstrap4-dark-purple.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/themes/bootstrap4-light-blue.svg b/src/assets/images/themes/bootstrap4-light-blue.svg new file mode 100644 index 0000000..93c8b56 --- /dev/null +++ b/src/assets/images/themes/bootstrap4-light-blue.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/themes/bootstrap4-light-purple.svg b/src/assets/images/themes/bootstrap4-light-purple.svg new file mode 100644 index 0000000..b9c644c --- /dev/null +++ b/src/assets/images/themes/bootstrap4-light-purple.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/themes/fluent-light.png b/src/assets/images/themes/fluent-light.png new file mode 100644 index 0000000..4766eeb Binary files /dev/null and b/src/assets/images/themes/fluent-light.png differ diff --git a/src/assets/images/themes/lara-dark-blue.png b/src/assets/images/themes/lara-dark-blue.png new file mode 100644 index 0000000..0a99908 Binary files /dev/null and b/src/assets/images/themes/lara-dark-blue.png differ diff --git a/src/assets/images/themes/lara-dark-indigo.png b/src/assets/images/themes/lara-dark-indigo.png new file mode 100644 index 0000000..b435d98 Binary files /dev/null and b/src/assets/images/themes/lara-dark-indigo.png differ diff --git a/src/assets/images/themes/lara-dark-purple.png b/src/assets/images/themes/lara-dark-purple.png new file mode 100644 index 0000000..e0d5bf4 Binary files /dev/null and b/src/assets/images/themes/lara-dark-purple.png differ diff --git a/src/assets/images/themes/lara-dark-teal.png b/src/assets/images/themes/lara-dark-teal.png new file mode 100644 index 0000000..2ae2194 Binary files /dev/null and b/src/assets/images/themes/lara-dark-teal.png differ diff --git a/src/assets/images/themes/lara-light-blue.png b/src/assets/images/themes/lara-light-blue.png new file mode 100644 index 0000000..0278849 Binary files /dev/null and b/src/assets/images/themes/lara-light-blue.png differ diff --git a/src/assets/images/themes/lara-light-indigo.png b/src/assets/images/themes/lara-light-indigo.png new file mode 100644 index 0000000..80bee58 Binary files /dev/null and b/src/assets/images/themes/lara-light-indigo.png differ diff --git a/src/assets/images/themes/lara-light-purple.png b/src/assets/images/themes/lara-light-purple.png new file mode 100644 index 0000000..7745c13 Binary files /dev/null and b/src/assets/images/themes/lara-light-purple.png differ diff --git a/src/assets/images/themes/lara-light-teal.png b/src/assets/images/themes/lara-light-teal.png new file mode 100644 index 0000000..f8fb07f Binary files /dev/null and b/src/assets/images/themes/lara-light-teal.png differ diff --git a/src/assets/images/themes/luna-amber.png b/src/assets/images/themes/luna-amber.png new file mode 100644 index 0000000..2cb7685 Binary files /dev/null and b/src/assets/images/themes/luna-amber.png differ diff --git a/src/assets/images/themes/luna-blue.png b/src/assets/images/themes/luna-blue.png new file mode 100644 index 0000000..fac4339 Binary files /dev/null and b/src/assets/images/themes/luna-blue.png differ diff --git a/src/assets/images/themes/luna-green.png b/src/assets/images/themes/luna-green.png new file mode 100644 index 0000000..f4c3789 Binary files /dev/null and b/src/assets/images/themes/luna-green.png differ diff --git a/src/assets/images/themes/luna-pink.png b/src/assets/images/themes/luna-pink.png new file mode 100644 index 0000000..6ef7b35 Binary files /dev/null and b/src/assets/images/themes/luna-pink.png differ diff --git a/src/assets/images/themes/md-dark-deeppurple.svg b/src/assets/images/themes/md-dark-deeppurple.svg new file mode 100644 index 0000000..c6f838b --- /dev/null +++ b/src/assets/images/themes/md-dark-deeppurple.svg @@ -0,0 +1,9 @@ + + + 4 + + + + + + \ No newline at end of file diff --git a/src/assets/images/themes/md-dark-indigo.svg b/src/assets/images/themes/md-dark-indigo.svg new file mode 100644 index 0000000..68658b6 --- /dev/null +++ b/src/assets/images/themes/md-dark-indigo.svg @@ -0,0 +1,9 @@ + + + 2 + + + + + + \ No newline at end of file diff --git a/src/assets/images/themes/md-light-deeppurple.svg b/src/assets/images/themes/md-light-deeppurple.svg new file mode 100644 index 0000000..0d3119f --- /dev/null +++ b/src/assets/images/themes/md-light-deeppurple.svg @@ -0,0 +1,9 @@ + + + 4 + + + + + + \ No newline at end of file diff --git a/src/assets/images/themes/md-light-indigo.svg b/src/assets/images/themes/md-light-indigo.svg new file mode 100644 index 0000000..1afeed7 --- /dev/null +++ b/src/assets/images/themes/md-light-indigo.svg @@ -0,0 +1,9 @@ + + + 2 + + + + + + \ No newline at end of file diff --git a/src/assets/images/themes/mira.jpg b/src/assets/images/themes/mira.jpg new file mode 100644 index 0000000..18e5b6e Binary files /dev/null and b/src/assets/images/themes/mira.jpg differ diff --git a/src/assets/images/themes/nano.jpg b/src/assets/images/themes/nano.jpg new file mode 100644 index 0000000..62f3a10 Binary files /dev/null and b/src/assets/images/themes/nano.jpg differ diff --git a/src/assets/images/themes/nova-accent.png b/src/assets/images/themes/nova-accent.png new file mode 100644 index 0000000..260087f Binary files /dev/null and b/src/assets/images/themes/nova-accent.png differ diff --git a/src/assets/images/themes/nova-alt.png b/src/assets/images/themes/nova-alt.png new file mode 100644 index 0000000..6d2eaa7 Binary files /dev/null and b/src/assets/images/themes/nova-alt.png differ diff --git a/src/assets/images/themes/nova-vue.png b/src/assets/images/themes/nova-vue.png new file mode 100644 index 0000000..d40f2ab Binary files /dev/null and b/src/assets/images/themes/nova-vue.png differ diff --git a/src/assets/images/themes/nova.png b/src/assets/images/themes/nova.png new file mode 100644 index 0000000..12ff704 Binary files /dev/null and b/src/assets/images/themes/nova.png differ diff --git a/src/assets/images/themes/rhea.png b/src/assets/images/themes/rhea.png new file mode 100644 index 0000000..2ac3421 Binary files /dev/null and b/src/assets/images/themes/rhea.png differ diff --git a/src/assets/images/themes/saga-blue.png b/src/assets/images/themes/saga-blue.png new file mode 100644 index 0000000..0671d46 Binary files /dev/null and b/src/assets/images/themes/saga-blue.png differ diff --git a/src/assets/images/themes/saga-green.png b/src/assets/images/themes/saga-green.png new file mode 100644 index 0000000..4c8c3b8 Binary files /dev/null and b/src/assets/images/themes/saga-green.png differ diff --git a/src/assets/images/themes/saga-orange.png b/src/assets/images/themes/saga-orange.png new file mode 100644 index 0000000..2cabd5d Binary files /dev/null and b/src/assets/images/themes/saga-orange.png differ diff --git a/src/assets/images/themes/saga-purple.png b/src/assets/images/themes/saga-purple.png new file mode 100644 index 0000000..4b45f8b Binary files /dev/null and b/src/assets/images/themes/saga-purple.png differ diff --git a/src/assets/images/themes/soho-dark.png b/src/assets/images/themes/soho-dark.png new file mode 100644 index 0000000..02194d4 Binary files /dev/null and b/src/assets/images/themes/soho-dark.png differ diff --git a/src/assets/images/themes/soho-light.png b/src/assets/images/themes/soho-light.png new file mode 100644 index 0000000..9532fb5 Binary files /dev/null and b/src/assets/images/themes/soho-light.png differ diff --git a/src/assets/images/themes/tailwind-light.png b/src/assets/images/themes/tailwind-light.png new file mode 100644 index 0000000..679bd1e Binary files /dev/null and b/src/assets/images/themes/tailwind-light.png differ diff --git a/src/assets/images/themes/vela-blue.png b/src/assets/images/themes/vela-blue.png new file mode 100644 index 0000000..6780f35 Binary files /dev/null and b/src/assets/images/themes/vela-blue.png differ diff --git a/src/assets/images/themes/vela-green.png b/src/assets/images/themes/vela-green.png new file mode 100644 index 0000000..6344526 Binary files /dev/null and b/src/assets/images/themes/vela-green.png differ diff --git a/src/assets/images/themes/vela-orange.png b/src/assets/images/themes/vela-orange.png new file mode 100644 index 0000000..a2a9cde Binary files /dev/null and b/src/assets/images/themes/vela-orange.png differ diff --git a/src/assets/images/themes/vela-purple.png b/src/assets/images/themes/vela-purple.png new file mode 100644 index 0000000..d53ac06 Binary files /dev/null and b/src/assets/images/themes/vela-purple.png differ diff --git a/src/assets/images/themes/viva-dark.svg b/src/assets/images/themes/viva-dark.svg new file mode 100644 index 0000000..43b7706 --- /dev/null +++ b/src/assets/images/themes/viva-dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/images/themes/viva-light.svg b/src/assets/images/themes/viva-light.svg new file mode 100644 index 0000000..1904eb4 --- /dev/null +++ b/src/assets/images/themes/viva-light.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/environments/environment.dev.musa.ts b/src/environments/environment.dev.musa.ts new file mode 100644 index 0000000..fe9597c --- /dev/null +++ b/src/environments/environment.dev.musa.ts @@ -0,0 +1,18 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: false, + API_URL: 'https://musa.maiora.solutions/api', + BROWSER_URL: 'https:/musa.maiora.solutions', + MAX_FILE_SIZE: 10485760, // in bynary bytes +}; +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/dist/zone-error'; // Included with Angular CLI. diff --git a/src/environments/environment.dev.ts b/src/environments/environment.dev.ts new file mode 100644 index 0000000..2af36ba --- /dev/null +++ b/src/environments/environment.dev.ts @@ -0,0 +1,18 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: false, + API_URL: 'https://ep.insiemesalute.maiora.cloud/api', + BROWSER_URL: 'https://ep.insiemesalute.maiora.cloud', + MAX_FILE_SIZE: 10485760, // in bynary bytes +}; +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/dist/zone-error'; // Included with Angular CLI. diff --git a/src/environments/environment.prod.musa.ts b/src/environments/environment.prod.musa.ts new file mode 100644 index 0000000..0a6b8cd --- /dev/null +++ b/src/environments/environment.prod.musa.ts @@ -0,0 +1,18 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: true, + API_URL: 'https://musa.maiora.cloud/api', + BROWSER_URL: 'https:/musa.maiora.cloud', + MAX_FILE_SIZE: 10485760, // in bynary bytes +}; +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/dist/zone-error'; // Included with Angular CLI. diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts new file mode 100644 index 0000000..c25dd22 --- /dev/null +++ b/src/environments/environment.prod.ts @@ -0,0 +1,18 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: false, + API_URL: 'https://ep.insiemesalute.org/api', + BROWSER_URL: 'https://ep.insiemesalute.org', + MAX_FILE_SIZE: 10485760, // in bynary bytes +}; +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/dist/zone-error'; // Included with Angular CLI. diff --git a/src/environments/environment.ts b/src/environments/environment.ts new file mode 100644 index 0000000..6b79e15 --- /dev/null +++ b/src/environments/environment.ts @@ -0,0 +1,19 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: false, + API_URL: 'http://localhost:3000', + BROWSER_URL: 'http://localhost:4200', + MAX_FILE_SIZE: 10485760, // in bynary bytes +}; + +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/dist/zone-error'; // Included with Angular CLI. diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..4e1023e --- /dev/null +++ b/src/index.html @@ -0,0 +1,17 @@ + + + + + Consorzio MuSa + + + + + + + + + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..f3a7223 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,7 @@ +import { bootstrapApplication } from '@angular/platform-browser'; +import { AppComponent } from './app/app.component'; +import { appConfig } from './app/app.config'; + +bootstrapApplication(AppComponent, appConfig).catch((err) => + console.error(err), +); diff --git a/src/styles.scss b/src/styles.scss new file mode 100644 index 0000000..44ec7c5 --- /dev/null +++ b/src/styles.scss @@ -0,0 +1,38 @@ +/* You can add global styles to this file, and also import other style files */ +@use './tailwind.css'; +@use 'assets/css/app/layout.scss'; +@use 'primeicons/primeicons.css'; +@use 'assets/css/demo/flags.css'; +@plugin 'tailwindcss-primeui'; +@layer tailwind, primeng; +@layer tailwind { + @import 'tailwindcss'; + @theme { + --color-primary: #173775; + --color-error: #dc2626; + } +} + +.pac-container { + z-index: 999999; +} + +.iconImg { + color: #dc7c29; +} + +.iconPdf { + color: #c42228; +} + +.iconWord { + color: #2a5696; +} + +.iconExcel { + color: #1f7045; +} + +.iconPowerPoint { + color: #d04525; +} diff --git a/src/tailwind.css b/src/tailwind.css new file mode 100755 index 0000000..b5c61c9 --- /dev/null +++ b/src/tailwind.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/tailwind.config.cjs b/tailwind.config.cjs new file mode 100755 index 0000000..5e86a2c --- /dev/null +++ b/tailwind.config.cjs @@ -0,0 +1,18 @@ +/** @type {import('tailwindcss').Config} */ +const primeui = require('tailwindcss-primeui'); +import { primeNg } from 'primeng/tailwind'; +module.exports = { + darkMode: ['selector', '[class="app-dark"]'], + content: ['./src/**/*.{html,ts,scss,css}', './index.html'], + corePlugins: { preflight: false }, + plugins: [primeui, primeNg, require('tailwindcss-primeui')], + theme: { + screens: { + sm: '576px', + md: '768px', + lg: '992px', + xl: '1200px', + '2xl': '1920px', + }, + }, +}; diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..cae6b6f --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,11 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": ["googlemaps"] + }, + "files": ["src/main.ts"], + "include": ["src/**/*.d.ts"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..dd709c4 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,34 @@ +/* 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": { + "outDir": "./dist/out-tsc", + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "isolatedModules": true, + "esModuleInterop": true, + "experimentalDecorators": true, + "moduleResolution": "bundler", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "paths": { + "@core/*": ["./src/app/core/*"], + "@shared/*": ["./src/app/shared/*"], + "@environments/*": ["./src/environments/*"], + "@api/*": ["./src/api/*"] + }, + "allowSyntheticDefaultImports": true + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/tsconfig.spec.json b/tsconfig.spec.json new file mode 100644 index 0000000..1d6ed98 --- /dev/null +++ b/tsconfig.spec.json @@ -0,0 +1,10 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": ["jasmine", "googlemaps"] + }, + "include": ["src/**/*.spec.ts", "src/**/*.d.ts"] +}