diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 9d5b788f..00000000 --- a/.eslintignore +++ /dev/null @@ -1,5 +0,0 @@ -*.ico -*.json -*.md -*.scss -**/assets/**/*.* diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index eaa1fdd7..00000000 --- a/.eslintrc.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "root": true, - "extends": ["@pega"], - "parserOptions": { - "project": "tsconfig.json", - "ecmaVersion": 13 - }, - "globals": { - "PCore": "readonly" - }, - "settings": { - "import/resolver": { - "typescript": {}, - "node": { - "extensions": [".js", ".jsx", ".ts"] - } - } - }, - "env": { - "browser": true, - "node": true - }, - "ignorePatterns": ["node_modules", "!.storybook", ".storybook/public", "**/**/*.json"], - "rules": { - // Prettier recommends running separately from a linter. - // https://prettier.io/docs/en/integrating-with-linters.html#notes - "prettier/prettier": "off", - - // Disable rules from shared configs we're not ready for yet. - "sonarjs/cognitive-complexity": ["warn", 20], - "sonarjs/no-duplicate-string": "off", - - // - // Initial release: turning these off; phase in to "warn" or "error" over time - // For "quotes" and "@typescript-eslint/quotes", see override below for .ts/.tsx files - "import/extensions": ["off", "never"], - "import/named": "off", - "import/no-cycle": "off", - "import/no-duplicates": "off", - "import/no-extraneous-dependencies": "off", - "import/no-named-as-default": "off", - "import/no-named-as-default-member": "off", - "import/no-self-import": "off", - "import/no-unresolved": "off", - "import/no-useless-path-segments": "off", - "import/order": "off", - - "no-underscore-dangle": "off", // TODO : adhere to standard naming - "no-restricted-syntax": "warn", // TODO : fix for-in loops - - "jsx-a11y/alt-text": "off", - "jsx-a11y/anchor-is-valid": "off", - "jsx-a11y/click-events-have-key-events": "off", - "jsx-a11y/label-has-associated-control": "off", - "jsx-a11y/no-static-element-interactions": "off", - - "class-methods-use-this": "off", // TODO *** - "@typescript-eslint/naming-convention": "off", // prefer warn but needs different parserOptions - "@typescript-eslint/ban-types": "off", // also, see override below - - "import/no-relative-packages": "off", // arnab - - // TODO: Need to be fixed - "guard-for-in": "off", - "eqeqeq": "off", - "no-alert": "off", - "no-console": "off", - "no-plusplus": "off" - }, - "overrides": [ - { - "files": "*.@(ts|tsx)", - "rules": { - "@typescript-eslint/method-signature-style": ["error", "property"], - // "@typescript-eslint/ban-types": [ - // "warn", - // { - // "types": { - // "Omit": "Please use the 'OmitStrict' type from 'src/types/' instead.", - // "object": false, - // "Function": false - // }, - // "extendDefaults": true - // } - // ], - - "quotes": "off", - "@typescript-eslint/quotes": "off" - // [ - // "error", - // "single", - // { - // "avoidEscape": true, - // "allowTemplateLiterals": false - // } - // ] - } - }, - { - "files": "*.@(js|jsx|ts|tsx|mdx)", - "rules": {} - }, - { - "files": ".storybook/*.js", - "extends": ["@pega/eslint-config/script"] - }, - { - "files": "*/**/mocks/**.@(mocks|styles).@(tsx|ts)", - "rules": { - "import/prefer-default-export": ["off"] - } - }, - // angular specific lint rules - { - "files": ["*.ts"], - "parserOptions": { - "project": ["tsconfig.json"], - "createDefaultProgram": true - }, - "extends": ["plugin:@angular-eslint/recommended", "plugin:@angular-eslint/template/process-inline-templates"], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "style": "kebab-case" - } - ], - "@angular-eslint/no-output-on-prefix": "off", - "import/prefer-default-export": "off" - } - }, - { - "files": ["*.html"], - "extends": ["plugin:@angular-eslint/template/recommended"], - "rules": { - "@angular-eslint/template/eqeqeq": "off" - } - } - ] -} diff --git a/.github/workflows/install-build-sdk-pack.yml b/.github/workflows/install-build-sdk-pack.yml index 67fe3653..f97e11ad 100644 --- a/.github/workflows/install-build-sdk-pack.yml +++ b/.github/workflows/install-build-sdk-pack.yml @@ -11,7 +11,7 @@ on: pull_request: branches: - master - - 'release/**' + - 'release/**' jobs: build: @@ -20,7 +20,7 @@ jobs: strategy: matrix: - node-version: [18.x] + node-version: [22.x] steps: - uses: actions/checkout@v2 diff --git a/README.md b/README.md index 54c9d7e5..8a863027 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ You can see the full license [here](LICENSE) or directly on [apache.org](https:/ ## Contributing -We welcome contributions to the Anguar SDK Components project. +We welcome contributions to the Angular SDK Components project. Refer to our [guidelines for contributors](./docs/CONTRIBUTING.md) if you are interested in contributing to the project. @@ -56,10 +56,10 @@ Refer to our [guidelines for contributors](./docs/CONTRIBUTING.md) if you are in ## Additional Resources -* [Constellaton Angular SDK on Pega Community](https://community.pega.com/marketplace/component/angular-sdk) +* [Constellation Angular SDK on Pega Community](https://community.pega.com/marketplace/component/angular-sdk) * [Constellation Angular SDK code](https://github.com/pegasystems/angular-sdk) * [Constellation SDKs Documentation](https://docs.pega.com/bundle/constellation-sdk/page/constellation-sdks/sdks/constellation-sdks.html) * [Troubleshooting Constellation SDKs](https://docs.pega.com/bundle/constellation-sdk/page/constellation-sdks/sdks/troubleshooting-constellation-sdks.html) * [MediaCo sample application](https://docs.pega.com/bundle/constellation-sdk/page/constellation-sdks/sdks/mediaco-sample-application.html) -* [Angular 15](https://angular.io/) +* [Angular](https://angular.io/) * [Angular Material](https://v15.material.angular.io/) diff --git a/angular.json b/angular.json index a59af576..0ab5a9aa 100644 --- a/angular.json +++ b/angular.json @@ -108,7 +108,7 @@ "output": "./tinymce" }, "projects/angular-test-app/src/favicon.ico", - "projects/angular-test-app/src/assets" + "projects/angular-test-app/src/assets/img" ], "styles": ["projects/angular-test-app/src/styles.scss"], "scripts": ["./node_modules/tinymce/tinymce.min.js"], diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..527e3e39 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,170 @@ +import { globalIgnores } from 'eslint/config'; +import { fileURLToPath } from 'node:url'; +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; +import sonarjs from 'eslint-plugin-sonarjs'; +import importPlugin from 'eslint-plugin-import'; +import react from 'eslint-plugin-react'; +import reactHooks from 'eslint-plugin-react-hooks'; +// eslint.config.js +import { defineConfig } from 'eslint/config'; + +const __filename = fileURLToPath(import.meta.url); + +export default defineConfig([ + eslint.configs.recommended, + ...tseslint.configs.recommended, + globalIgnores([ + '**/node_modules', + 'packages/*/lib', + '!**/.storybook', + '.storybook/public', + '**/demo.stories.jsx', + '**/mock.stories.js', + '**/demo.stories.tsx', + '**/demo.test.tsx', + '**/*.test.tsx', + '**/mock.stories.ts', + '**/*.mdx', + '**/webpack.config.js', + 'src/helpers/config_access.js', + '**/*.html', + '**/*.css', + '**/*.json', + '**/*.md', + '**/*.svg', + '**/*.zip', + '**/*.d.ts', + '*.storybook/*', + '**/*.cjs', + '**/*.mjs', + '**/paths.js', + 'dist/*', + 'lib/*', + '**/ext-libs.js' + ]), + { + languageOptions: { + globals: { + PCore: 'readonly', + window: true, + console: true, + document: true, + fetch: true + }, + + ecmaVersion: 13, + sourceType: 'script', + + parserOptions: { + project: 'tsconfig.json', + ecmaFeatures: { + jsx: true + } + } + }, + + settings: { + 'import/resolver': { + typescript: {}, + react: { + version: 'detect' + }, + node: { + extensions: ['.js', '.jsx', '.ts', '.tsx'] + } + }, + + react: { + version: 'detect' + } + }, + + plugins: { sonarjs, import: importPlugin, react, 'react-hooks': reactHooks }, + rules: { + 'react/jsx-filename-extension': [0, { extensions: ['.jsx', '*.tsx'] }], + + // Prettier recommends running separately from a linter. + // https://prettier.io/docs/en/integrating-with-linters.html#notes + 'prettier/prettier': 'off', + + // Disable rules from shared configs we're not ready for yet. + 'sonarjs/cognitive-complexity': ['error', 20], + 'sonarjs/no-duplicate-string': 'off', + + // + // Initial release: turning these off; phase in to "warn" or "error" over time + // For "quotes" and "@typescript-eslint/quotes", see override below for .ts/.tsx files + 'import/extensions': ['off', 'never'], + 'import/named': 'off', + 'import/no-cycle': 'off', + 'import/no-duplicates': 'off', + 'import/no-extraneous-dependencies': 'off', + 'import/no-named-as-default': 'off', + 'import/no-named-as-default-member': 'off', + 'import/no-self-import': 'off', + 'import/no-unresolved': 'off', + 'import/no-useless-path-segments': 'off', + 'import/order': 'off', + + 'no-underscore-dangle': 'off', // TODO : adhere to standard naming + 'no-restricted-syntax': 'warn', // TODO : fix for-in loops + + 'jsx-a11y/alt-text': 'off', + 'jsx-a11y/anchor-is-valid': 'off', + 'jsx-a11y/click-events-have-key-events': 'off', + 'jsx-a11y/label-has-associated-control': 'off', + 'jsx-a11y/no-static-element-interactions': 'off', + + '@typescript-eslint/naming-convention': 'off', // prefer warn but needs different parserOptions + '@typescript-eslint/ban-types': 'off', // also, see override below + '@typescript-eslint/no-explicit-any': 'off', // prefer warn but needs different parserOptions + '@typescript-eslint/no-empty-object-type': 'off', // prefer warn but needs different parserOptions + '@typescript-eslint/ban-ts-comment': 'off', // prefer warn but needs different parserOptions + '@typescript-eslint/no-unsafe-function-type': 'off', + + 'import/no-relative-packages': 'off' // arnab + } + }, + { + files: ['**/*.@(ts|tsx)'], + + rules: { + '@typescript-eslint/method-signature-style': ['error', 'property'], + quotes: 'off', + '@typescript-eslint/quotes': 'off' + } + }, + { + files: ['**/*.@(jsx|tsx|mdx)'], + + rules: { + 'react/react-in-jsx-scope': 'off', + 'react-hooks/rules-of-hooks': 'off', + 'react-hooks/exhaustive-deps': 'off' + } + }, + { + files: ['**/*.@(ts|tsx)'], + rules: { + 'no-console': 'off', + 'import/prefer-default-export': 'off', + 'import/no-relative-packages': 'off', + 'react/jsx-fragments': 'off', + 'react/react-in-jsx-scope': 'off', + 'react-hooks/exhaustive-deps': 'off' + } + }, + { + files: ['**/*.@(js|jsx|ts|tsx|mdx)'], + rules: {} + }, + + { + files: ['*/**/mocks/**.@(mocks|styles).@(tsx|ts)'], + + rules: { + 'import/prefer-default-export': ['off'] + } + } +]); diff --git a/package-lock.json b/package-lock.json index 951cc7d1..9dc4d591 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,28 +1,29 @@ { "name": "@pega/angular-sdk-components", - "version": "24.2.12", + "version": "25.1.11", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@pega/angular-sdk-components", - "version": "24.2.12", + "version": "25.1.11", "license": "SEE LICENSE IN LICENSE", "dependencies": { - "@angular/animations": "^18.2.12", - "@angular/cdk": "^18.2.13", - "@angular/common": "^18.2.12", - "@angular/compiler": "^18.2.12", - "@angular/core": "^18.2.12", - "@angular/forms": "^18.2.12", - "@angular/material": "^18.2.13", - "@angular/material-experimental": "^18.2.13", - "@angular/material-moment-adapter": "^18.2.13", - "@angular/platform-browser": "^18.2.12", - "@angular/platform-browser-dynamic": "^18.2.12", - "@angular/router": "^18.2.12", - "@danielmoncada/angular-datetime-picker": "^18.1.0", - "@pega/auth": "~0.2.28", + "@angular/animations": "^20.3.15", + "@angular/cdk": "^20.2.14", + "@angular/common": "^20.3.15", + "@angular/compiler": "^20.3.15", + "@angular/core": "^20.3.15", + "@angular/forms": "^20.3.15", + "@angular/google-maps": "^20.2.14", + "@angular/material": "^20.2.14", + "@angular/material-experimental": "^20.2.14", + "@angular/material-moment-adapter": "^20.2.14", + "@angular/platform-browser": "^20.3.15", + "@angular/platform-browser-dynamic": "^20.3.15", + "@angular/router": "^20.3.15", + "@danielmoncada/angular-datetime-picker": "^20.0.1", + "@pega/auth": "~0.2.34", "@tinymce/tinymce-angular": "^8.0.1", "core-js": "^3.39.0", "dayjs": "^1.11.13", @@ -30,38 +31,38 @@ "fast-deep-equal": "^3.1.3", "libphonenumber-js": "^1.10.53", "lodash.clonedeep": "^4.5.0", - "ngx-currency": "^18.0.0", - "ngx-mat-intl-tel-input": "^5.0.0", + "mat-tel-input": "19.0.5-0", + "ngx-currency": "^19.0.0", "rxjs": "^7.8.1", "tslib": "^2.8.1", - "zone.js": "~0.14.10" + "zone.js": "~0.15.1" }, "devDependencies": { - "@angular-builders/custom-webpack": "^18.0.0", - "@angular-devkit/build-angular": "^18.2.12", - "@angular-devkit/core": "^18.2.12", - "@angular-eslint/eslint-plugin": "^18.4.0", - "@angular-eslint/eslint-plugin-template": "^18.4.0", - "@angular-eslint/template-parser": "^18.4.1", - "@angular/cli": "^18.2.12", - "@angular/compiler-cli": "^18.2.12", - "@angular/language-service": "^18.2.12", - "@pega/configs": "^0.16.2", - "@pega/constellationjs": "~24.2.2", - "@pega/pcore-pconnect-typedefs": "~3.2.2", - "@playwright/test": "^1.40.1", + "@angular-builders/custom-webpack": "^20.0.0", + "@angular-devkit/build-angular": "^20.3.13", + "@angular-devkit/core": "^20.3.13", + "@angular-eslint/eslint-plugin": "^20.7.0", + "@angular-eslint/eslint-plugin-template": "^20.7.0", + "@angular-eslint/template-parser": "^20.7.0", + "@angular/cli": "^20.3.13", + "@angular/compiler-cli": "^20.3.3", + "@angular/language-service": "^20.3.15", + "@pega/configs": "^0.16.3", + "@pega/constellationjs": "~25.1.0", + "@pega/pcore-pconnect-typedefs": "~4.1.0", + "@playwright/test": "^1.54.2", "@types/jasmine": "~5.1.4", "@types/jasminewd2": "~2.0.13", "@types/node": "^20.10.8", - "@typescript-eslint/eslint-plugin": "^7.18.0", - "@typescript-eslint/parser": "^7.18.0", "brotli": "^1.3.3", "codelyzer": "^6.0.2", "compressing": "^1.10.1", - "copy-webpack-plugin": "^12.0.2", - "eslint": "^8.56.0", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jest": "^28.9.0", + "copy-webpack-plugin": "^13.0.1", + "eslint": "^9.36.0", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jest": "^29.0.1", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-sonarjs": "^3.0.5", "fs-extra": "^11.2.0", "jasmine-core": "~5.1.1", "karma": "~6.4.2", @@ -70,21 +71,201 @@ "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "^2.1.0", "md5-file": "^5.0.0", - "ng-packagr": "^18.2.1", + "ng-packagr": "^20.3.0", "npm-force-resolutions": "0.0.10", "npm-run-all": "^4.1.5", "postcss": "^8.4.49", - "shx": "^0.3.4", + "shx": "^0.4.0", "tinymce": "^6.8.6", "ts-node": "~10.9.2", - "typescript": "^5.4.5", - "webpack": "^5.96.1" + "typescript": "^5.9.3", + "typescript-eslint": "^8.48.1", + "webpack": "^5.101.2" + } + }, + "node_modules/@algolia/abtesting": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-abtesting": { + "version": "5.35.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "5.35.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.35.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.35.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "5.35.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.35.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.35.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/ingestion": { + "version": "1.35.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.35.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "5.35.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.35.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.35.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.35.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" } }, "node_modules/@ampproject/remapping": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -96,168 +277,157 @@ } }, "node_modules/@angular-builders/common": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@angular-builders/common/-/common-2.0.0.tgz", - "integrity": "sha512-O5YJc++DtJVJhqA/OomRKN2jGYzvU/YXtfrPAqcA9Is3Ob5jvV0L0JHSAjSw/KaLvk/FjBIqoRVcYdLp5LKddA==", + "version": "4.0.0", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "^18.0.0", + "@angular-devkit/core": "^20.0.0", "ts-node": "^10.0.0", - "tsconfig-paths": "^4.1.0" + "tsconfig-paths": "^4.2.0" }, "engines": { - "node": "^14.20.0 || ^16.13.0 || >=18.10.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, "node_modules/@angular-builders/custom-webpack": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-18.0.0.tgz", - "integrity": "sha512-XSynPSXHq5+nrh7J2snfrcbvm6YGwUGQRzr7OuO3wURJ6CHOD9C+xEAmvEUWW8c1YjEslVNG7aLtCGz7LA4ymw==", + "version": "20.0.0", "dev": true, "license": "MIT", "dependencies": { - "@angular-builders/common": "2.0.0", - "@angular-devkit/architect": ">=0.1800.0 < 0.1900.0", - "@angular-devkit/build-angular": "^18.0.0", - "@angular-devkit/core": "^18.0.0", + "@angular-builders/common": "4.0.0", + "@angular-devkit/architect": ">=0.2000.0 < 0.2100.0", + "@angular-devkit/build-angular": "^20.0.0", + "@angular-devkit/core": "^20.0.0", + "@angular/build": "^20.0.0", "lodash": "^4.17.15", - "webpack-merge": "^5.7.3" + "webpack-merge": "^6.0.0" }, "engines": { - "node": "^14.20.0 || ^16.13.0 || >=18.10.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler-cli": "^18.0.0" + "@angular/compiler-cli": "^20.0.0" } }, "node_modules/@angular-devkit/architect": { - "version": "0.1802.20", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.20.tgz", - "integrity": "sha512-nNUv2541/X4V0vtT2F6wCT+/GAY8v+J8MRMh8kGBVdyV9EdtSTWxHAvE1WhX5uE7VUCNegDfElxvAR9Vq8qSig==", + "version": "0.2003.13", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.20", - "rxjs": "7.8.1" + "@angular-devkit/core": "20.3.13", + "rxjs": "7.8.2" }, "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, - "node_modules/@angular-devkit/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": "18.2.20", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.20.tgz", - "integrity": "sha512-wjWFSpu4PJgASB6ZkYMFspK1oLuzdyZhyjB14y+/5+qqoCRroFyaEhhOHfzqHF2dwH8+rOg6E2r4vkre94duPQ==", + "version": "20.3.13", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1802.20", - "@angular-devkit/build-webpack": "0.1802.20", - "@angular-devkit/core": "18.2.20", - "@angular/build": "18.2.20", - "@babel/core": "7.26.10", - "@babel/generator": "7.26.10", - "@babel/helper-annotate-as-pure": "7.25.9", + "@angular-devkit/architect": "0.2003.13", + "@angular-devkit/build-webpack": "0.2003.13", + "@angular-devkit/core": "20.3.13", + "@angular/build": "20.3.13", + "@babel/core": "7.28.3", + "@babel/generator": "7.28.3", + "@babel/helper-annotate-as-pure": "7.27.3", "@babel/helper-split-export-declaration": "7.24.7", - "@babel/plugin-transform-async-generator-functions": "7.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.1", - "@ngtools/webpack": "18.2.20", + "@babel/plugin-transform-async-generator-functions": "7.28.0", + "@babel/plugin-transform-async-to-generator": "7.27.1", + "@babel/plugin-transform-runtime": "7.28.3", + "@babel/preset-env": "7.28.3", + "@babel/runtime": "7.28.3", + "@discoveryjs/json-ext": "0.6.3", + "@ngtools/webpack": "20.3.13", "ansi-colors": "4.1.3", - "autoprefixer": "10.4.20", - "babel-loader": "9.1.3", + "autoprefixer": "10.4.21", + "babel-loader": "10.0.0", "browserslist": "^4.21.5", - "copy-webpack-plugin": "12.0.2", - "critters": "0.0.24", + "copy-webpack-plugin": "13.0.1", "css-loader": "7.1.2", - "esbuild-wasm": "0.23.0", - "fast-glob": "3.3.2", + "esbuild-wasm": "0.25.9", + "fast-glob": "3.3.3", "http-proxy-middleware": "3.0.5", - "https-proxy-agent": "7.0.5", "istanbul-lib-instrument": "6.0.3", "jsonc-parser": "3.3.1", "karma-source-map-support": "1.4.0", - "less": "4.2.0", - "less-loader": "12.2.0", + "less": "4.4.0", + "less-loader": "12.3.0", "license-webpack-plugin": "4.0.2", "loader-utils": "3.3.1", - "magic-string": "0.30.11", - "mini-css-extract-plugin": "2.9.0", - "mrmime": "2.0.0", - "open": "10.1.0", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "4.0.2", - "piscina": "4.6.1", - "postcss": "8.4.41", + "mini-css-extract-plugin": "2.9.4", + "open": "10.2.0", + "ora": "8.2.0", + "picomatch": "4.0.3", + "piscina": "5.1.3", + "postcss": "8.5.6", "postcss-loader": "8.1.1", "resolve-url-loader": "5.0.0", - "rxjs": "7.8.1", - "sass": "1.77.6", - "sass-loader": "16.0.0", - "semver": "7.6.3", + "rxjs": "7.8.2", + "sass": "1.90.0", + "sass-loader": "16.0.5", + "semver": "7.7.2", "source-map-loader": "5.0.0", "source-map-support": "0.5.21", - "terser": "5.31.6", + "terser": "5.43.1", "tree-kill": "1.2.2", - "tslib": "2.6.3", - "watchpack": "2.4.1", - "webpack": "5.94.0", + "tslib": "2.8.1", + "webpack": "5.101.2", "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", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "optionalDependencies": { - "esbuild": "0.23.0" + "esbuild": "0.25.9" }, "peerDependencies": { - "@angular/compiler-cli": "^18.0.0", - "@angular/localize": "^18.0.0", - "@angular/platform-server": "^18.0.0", - "@angular/service-worker": "^18.0.0", - "@web/test-runner": "^0.18.0", + "@angular/compiler-cli": "^20.0.0", + "@angular/core": "^20.0.0", + "@angular/localize": "^20.0.0", + "@angular/platform-browser": "^20.0.0", + "@angular/platform-server": "^20.0.0", + "@angular/service-worker": "^20.0.0", + "@angular/ssr": "^20.3.13", + "@web/test-runner": "^0.20.0", "browser-sync": "^3.0.2", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", + "jest": "^29.5.0 || ^30.2.0", + "jest-environment-jsdom": "^29.5.0 || ^30.2.0", "karma": "^6.3.0", - "ng-packagr": "^18.0.0", + "ng-packagr": "^20.0.0", "protractor": "^7.0.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=5.4 <5.6" + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "typescript": ">=5.8 <6.0" }, "peerDependenciesMeta": { + "@angular/core": { + "optional": true + }, "@angular/localize": { "optional": true }, + "@angular/platform-browser": { + "optional": true + }, "@angular/platform-server": { "optional": true }, "@angular/service-worker": { "optional": true }, + "@angular/ssr": { + "optional": true + }, "@web/test-runner": { "optional": true }, @@ -284,37 +454,8 @@ } } }, - "node_modules/@angular-devkit/build-angular/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/@angular-devkit/build-angular/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, "node_modules/@angular-devkit/build-angular/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": { @@ -327,8 +468,6 @@ }, "node_modules/@angular-devkit/build-angular/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": { @@ -337,99 +476,44 @@ }, "node_modules/@angular-devkit/build-angular/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/@angular-devkit/build-angular/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/@angular-devkit/build-angular/node_modules/postcss": { - "version": "8.4.41", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", - "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "node_modules/@angular-devkit/build-angular/node_modules/mime-db": { + "version": "1.52.0", "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.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" - }, "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": ">= 0.6" } }, - "node_modules/@angular-devkit/build-angular/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "node_modules/@angular-devkit/build-angular/node_modules/mime-types": { + "version": "2.1.35", "dev": true, "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "mime-db": "1.52.0" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">= 0.6" } }, - "node_modules/@angular-devkit/build-angular/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true, - "license": "0BSD" - }, "node_modules/@angular-devkit/build-angular/node_modules/webpack": { - "version": "5.94.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", - "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", + "version": "5.101.2", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", + "enhanced-resolve": "^5.17.3", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -439,11 +523,11 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", + "schema-utils": "^4.3.2", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", + "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" + "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" @@ -461,33 +545,16 @@ } } }, - "node_modules/@angular-devkit/build-angular/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/@angular-devkit/build-webpack": { - "version": "0.1802.20", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.20.tgz", - "integrity": "sha512-710EUKGXJ0HlETDOlkiFWA6Ddku0vdNumbPzi2gb5UnjFo297BIOHgHt77auDhpKj1qffHTvvoiA2UseOX85QA==", + "version": "0.2003.13", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1802.20", - "rxjs": "7.8.1" + "@angular-devkit/architect": "0.2003.13", + "rxjs": "7.8.2" }, "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, @@ -496,37 +563,25 @@ "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": "18.2.20", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.20.tgz", - "integrity": "sha512-VNxI2e9EZQNqKYtUJ4u43QRJ9kObeyG9f69caxnj28cg4qim3H1vX/sglnodP8EsTIRbzwBKc884ebHWFdQJkQ==", + "version": "20.3.13", "dev": true, "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" + "picomatch": "4.0.3", + "rxjs": "7.8.2", + "source-map": "0.7.6" }, "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "peerDependencies": { - "chokidar": "^3.5.2" + "chokidar": "^4.0.0" }, "peerDependenciesMeta": { "chokidar": { @@ -534,61 +589,36 @@ } } }, - "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==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@angular-devkit/schematics": { - "version": "18.2.20", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.20.tgz", - "integrity": "sha512-eKoFeWOxwheaGK+aguyTs9utxxmFsrI/aHQttiyhBy+HzmgX/E0grzx6ZpuipUpBA8lYMtxfTJ7AC12fGJMvFA==", + "version": "20.3.13", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.20", + "@angular-devkit/core": "20.3.13", "jsonc-parser": "3.3.1", - "magic-string": "0.30.11", - "ora": "5.4.1", - "rxjs": "7.8.1" + "magic-string": "0.30.17", + "ora": "8.2.0", + "rxjs": "7.8.2" }, "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, - "node_modules/@angular-devkit/schematics/node_modules/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-eslint/bundled-angular-compiler": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-18.4.3.tgz", - "integrity": "sha512-zdrA8mR98X+U4YgHzUKmivRU+PxzwOL/j8G7eTOvBuq8GPzsP+hvak+tyxlgeGm9HsvpFj9ERHLtJ0xDUPs8fg==", + "version": "20.7.0", "dev": true, "license": "MIT" }, "node_modules/@angular-eslint/eslint-plugin": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-18.4.3.tgz", - "integrity": "sha512-AyJbupiwTBR81P6T59v+aULEnPpZBCBxL2S5QFWfAhNCwWhcof4GihvdK2Z87yhvzDGeAzUFSWl/beJfeFa+PA==", + "version": "20.7.0", "dev": true, "license": "MIT", "dependencies": { - "@angular-eslint/bundled-angular-compiler": "18.4.3", - "@angular-eslint/utils": "18.4.3" + "@angular-eslint/bundled-angular-compiler": "20.7.0", + "@angular-eslint/utils": "20.7.0", + "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", @@ -597,18 +627,17 @@ } }, "node_modules/@angular-eslint/eslint-plugin-template": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-18.4.3.tgz", - "integrity": "sha512-ijGlX2N01ayMXTpeQivOA31AszO8OEbu9ZQUCxnu9AyMMhxyi2q50bujRChAvN9YXQfdQtbxuajxV6+aiWb5BQ==", + "version": "20.7.0", "dev": true, "license": "MIT", "dependencies": { - "@angular-eslint/bundled-angular-compiler": "18.4.3", - "@angular-eslint/utils": "18.4.3", + "@angular-eslint/bundled-angular-compiler": "20.7.0", + "@angular-eslint/utils": "20.7.0", "aria-query": "5.3.2", "axobject-query": "4.1.0" }, "peerDependencies": { + "@angular-eslint/template-parser": "20.7.0", "@typescript-eslint/types": "^7.11.0 || ^8.0.0", "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", "eslint": "^8.57.0 || ^9.0.0", @@ -616,14 +645,12 @@ } }, "node_modules/@angular-eslint/template-parser": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-18.4.3.tgz", - "integrity": "sha512-JZMPtEB8yNip3kg4WDEWQyObSo2Hwf+opq2ElYuwe85GQkGhfJSJ2CQYo4FSwd+c5MUQAqESNRg9QqGYauDsiw==", + "version": "20.7.0", "dev": true, "license": "MIT", "dependencies": { - "@angular-eslint/bundled-angular-compiler": "18.4.3", - "eslint-scope": "^8.0.2" + "@angular-eslint/bundled-angular-compiler": "20.7.0", + "eslint-scope": "^9.0.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", @@ -631,13 +658,11 @@ } }, "node_modules/@angular-eslint/utils": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-18.4.3.tgz", - "integrity": "sha512-w0bJ9+ELAEiPBSTPPm9bvDngfu1d8JbzUhvs2vU+z7sIz/HMwUZT5S4naypj2kNN0gZYGYrW0lt+HIbW87zTAQ==", + "version": "20.7.0", "dev": true, "license": "MIT", "dependencies": { - "@angular-eslint/bundled-angular-compiler": "18.4.3" + "@angular-eslint/bundled-angular-compiler": "20.7.0" }, "peerDependencies": { "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", @@ -646,453 +671,344 @@ } }, "node_modules/@angular/animations": { - "version": "18.2.13", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.13.tgz", - "integrity": "sha512-rG5J5Ek5Hg+Tz2NjkNOaG6PupiNK/lPfophXpsR1t/nWujqnMWX2krahD/i6kgD+jNWNKCJCYSOVvCx/BHOtKA==", + "version": "20.3.15", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "18.2.13" + "@angular/core": "20.3.15" } }, "node_modules/@angular/build": { - "version": "18.2.20", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.20.tgz", - "integrity": "sha512-9VW/zSQoSwc9e5OBjtnroj9feacD2HgkSYx7TsfmDyefIlOCeNxbhkm83Px/4B8VG6kzZUBzLBJ4QULl2E1Y/Q==", + "version": "20.3.13", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1802.20", - "@babel/core": "7.25.2", - "@babel/helper-annotate-as-pure": "7.24.7", + "@angular-devkit/architect": "0.2003.13", + "@babel/core": "7.28.3", + "@babel/helper-annotate-as-pure": "7.27.3", "@babel/helper-split-export-declaration": "7.24.7", - "@babel/plugin-syntax-import-attributes": "7.24.7", - "@inquirer/confirm": "3.1.22", - "@vitejs/plugin-basic-ssl": "1.1.0", + "@inquirer/confirm": "5.1.14", + "@vitejs/plugin-basic-ssl": "2.1.0", + "beasties": "0.3.5", "browserslist": "^4.23.0", - "critters": "0.0.24", - "esbuild": "0.23.0", - "fast-glob": "3.3.2", - "https-proxy-agent": "7.0.5", - "listr2": "8.2.4", - "lmdb": "3.0.13", - "magic-string": "0.30.11", - "mrmime": "2.0.0", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "4.0.2", - "piscina": "4.6.1", - "rollup": "4.22.4", - "sass": "1.77.6", - "semver": "7.6.3", - "vite": "~5.4.17", - "watchpack": "2.4.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "esbuild": "0.25.9", + "https-proxy-agent": "7.0.6", + "istanbul-lib-instrument": "6.0.3", + "jsonc-parser": "3.3.1", + "listr2": "9.0.1", + "magic-string": "0.30.17", + "mrmime": "2.0.1", + "parse5-html-rewriting-stream": "8.0.0", + "picomatch": "4.0.3", + "piscina": "5.1.3", + "rollup": "4.52.3", + "sass": "1.90.0", + "semver": "7.7.2", + "source-map-support": "0.5.21", + "tinyglobby": "0.2.14", + "vite": "7.1.11", + "watchpack": "2.4.4" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, + "optionalDependencies": { + "lmdb": "3.4.2" + }, "peerDependencies": { - "@angular/compiler-cli": "^18.0.0", - "@angular/localize": "^18.0.0", - "@angular/platform-server": "^18.0.0", - "@angular/service-worker": "^18.0.0", + "@angular/compiler": "^20.0.0", + "@angular/compiler-cli": "^20.0.0", + "@angular/core": "^20.0.0", + "@angular/localize": "^20.0.0", + "@angular/platform-browser": "^20.0.0", + "@angular/platform-server": "^20.0.0", + "@angular/service-worker": "^20.0.0", + "@angular/ssr": "^20.3.13", + "karma": "^6.4.0", "less": "^4.2.0", + "ng-packagr": "^20.0.0", "postcss": "^8.4.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=5.4 <5.6" + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "tslib": "^2.3.0", + "typescript": ">=5.8 <6.0", + "vitest": "^3.1.1" }, "peerDependenciesMeta": { + "@angular/core": { + "optional": true + }, "@angular/localize": { "optional": true }, + "@angular/platform-browser": { + "optional": true + }, "@angular/platform-server": { "optional": true }, "@angular/service-worker": { "optional": true }, + "@angular/ssr": { + "optional": true + }, + "karma": { + "optional": true + }, "less": { "optional": true }, + "ng-packagr": { + "optional": true + }, "postcss": { "optional": true }, "tailwindcss": { "optional": true + }, + "vitest": { + "optional": true } } }, - "node_modules/@angular/build/node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", - "dev": true, + "node_modules/@angular/cdk": { + "version": "20.2.14", "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", - "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" + "parse5": "^8.0.0", + "tslib": "^2.3.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@angular/build/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/build/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@angular/common": "^20.0.0 || ^21.0.0", + "@angular/core": "^20.0.0 || ^21.0.0", + "rxjs": "^6.5.3 || ^7.4.0" } }, - "node_modules/@angular/build/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/cdk": { - "version": "18.2.14", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.2.14.tgz", - "integrity": "sha512-vDyOh1lwjfVk9OqoroZAP8pf3xxKUvyl+TVR8nJxL4c5fOfUFkD7l94HaanqKSRwJcI2xiztuu92IVoHn8T33Q==", + "node_modules/@angular/cdk-experimental": { + "version": "20.2.14", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, - "optionalDependencies": { - "parse5": "^7.1.2" - }, "peerDependencies": { - "@angular/common": "^18.0.0 || ^19.0.0", - "@angular/core": "^18.0.0 || ^19.0.0", - "rxjs": "^6.5.3 || ^7.4.0" + "@angular/cdk": "20.2.14", + "@angular/core": "^20.0.0 || ^21.0.0" } }, "node_modules/@angular/cli": { - "version": "18.2.20", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.20.tgz", - "integrity": "sha512-uu8XM+vvVQxTgCJAAQtCu6aLErbdCh/xqYpawgTaoOjiDkyWonTC+iGUUy0AEk5no/pbg2TCoZZx0AXWM1yLVA==", + "version": "20.3.13", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1802.20", - "@angular-devkit/core": "18.2.20", - "@angular-devkit/schematics": "18.2.20", - "@inquirer/prompts": "5.3.8", - "@listr2/prompt-adapter-inquirer": "2.0.15", - "@schematics/angular": "18.2.20", + "@angular-devkit/architect": "0.2003.13", + "@angular-devkit/core": "20.3.13", + "@angular-devkit/schematics": "20.3.13", + "@inquirer/prompts": "7.8.2", + "@listr2/prompt-adapter-inquirer": "3.0.1", + "@modelcontextprotocol/sdk": "1.24.0", + "@schematics/angular": "20.3.13", "@yarnpkg/lockfile": "1.1.0", - "ini": "4.1.3", + "algoliasearch": "5.35.0", + "ini": "5.0.0", "jsonc-parser": "3.3.1", - "listr2": "8.2.4", - "npm-package-arg": "11.0.3", - "npm-pick-manifest": "9.1.0", - "pacote": "18.0.6", - "resolve": "1.22.8", - "semver": "7.6.3", - "symbol-observable": "4.0.0", - "yargs": "17.7.2" + "listr2": "9.0.1", + "npm-package-arg": "13.0.0", + "pacote": "21.0.0", + "resolve": "1.22.10", + "semver": "7.7.2", + "yargs": "18.0.0", + "zod": "4.1.13" }, "bin": { "ng": "bin/ng.js" }, "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@angular/common": { - "version": "18.2.13", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.13.tgz", - "integrity": "sha512-4ZqrNp1PoZo7VNvW+sbSc2CB2axP1sCH2wXl8B0wdjsj8JY1hF1OhuugwhpAHtGxqewed2kCXayE+ZJqSTV4jw==", + "version": "20.3.15", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "18.2.13", + "@angular/core": "20.3.15", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "18.2.13", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.13.tgz", - "integrity": "sha512-TzWcrkopyjFF+WeDr2cRe8CcHjU72KfYV3Sm2TkBkcXrkYX5sDjGWrBGrG3hRB4e4okqchrOCvm1MiTdy2vKMA==", + "version": "20.3.15", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/core": "18.2.13" - }, - "peerDependenciesMeta": { - "@angular/core": { - "optional": true - } + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, "node_modules/@angular/compiler-cli": { - "version": "18.2.13", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.13.tgz", - "integrity": "sha512-DBSh4AQwkiJDSiVvJATRmjxf6wyUs9pwQLgaFdSlfuTRO+sdb0J2z1r3BYm8t0IqdoyXzdZq2YCH43EmyvD71g==", + "version": "20.3.15", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "7.25.2", + "@babel/core": "7.28.3", "@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" + "yargs": "^18.0.0" }, "bin": { "ng-xi18n": "bundles/src/bin/ng_xi18n.js", - "ngc": "bundles/src/bin/ngc.js", - "ngcc": "bundles/ngcc/index.js" + "ngc": "bundles/src/bin/ngc.js" }, "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "18.2.13", - "typescript": ">=5.4 <5.6" - } - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", - "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" + "@angular/compiler": "20.3.15", + "typescript": ">=5.8 <6.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" + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@angular/compiler-cli/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, + "node_modules/@angular/core": { + "version": "20.3.15", "license": "MIT", "dependencies": { - "readdirp": "^4.0.1" + "tslib": "^2.3.0" }, "engines": { - "node": ">= 14.16.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@angular/compiler-cli/node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.18.0" + "peerDependencies": { + "@angular/compiler": "20.3.15", + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.15.0" }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" + "peerDependenciesMeta": { + "@angular/compiler": { + "optional": true + }, + "zone.js": { + "optional": true + } } }, - "node_modules/@angular/core": { - "version": "18.2.13", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.13.tgz", - "integrity": "sha512-8mbWHMgO95OuFV1Ejy4oKmbe9NOJ3WazQf/f7wks8Bck7pcihd0IKhlPBNjFllbF5o+04EYSwFhEtvEgjMDClA==", + "node_modules/@angular/forms": { + "version": "20.3.15", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.14.10" + "@angular/common": "20.3.15", + "@angular/core": "20.3.15", + "@angular/platform-browser": "20.3.15", + "rxjs": "^6.5.3 || ^7.4.0" } }, - "node_modules/@angular/forms": { - "version": "18.2.13", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.13.tgz", - "integrity": "sha512-A67D867fu3DSBhdLWWZl/F5pr7v2+dRM2u3U7ZJ0ewh4a+sv+0yqWdJW+a8xIoiHxS+btGEJL2qAKJiH+MCFfg==", + "node_modules/@angular/google-maps": { + "version": "20.2.14", "license": "MIT", "dependencies": { + "@types/google.maps": "^3.54.10", "tslib": "^2.3.0" }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, "peerDependencies": { - "@angular/common": "18.2.13", - "@angular/core": "18.2.13", - "@angular/platform-browser": "18.2.13", + "@angular/common": "^20.0.0 || ^21.0.0", + "@angular/core": "^20.0.0 || ^21.0.0", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/language-service": { - "version": "18.2.13", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-18.2.13.tgz", - "integrity": "sha512-4E4VJDrbOAxS69F9C1twQPbR9AjY47Qlz8+lwg5lJOyUJ4GoEThLbXKfadt/vIeYBwMJ7fIsYWXD0Dlmxh4k+w==", + "version": "20.3.15", "dev": true, "license": "MIT", "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, "node_modules/@angular/material": { - "version": "18.2.14", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-18.2.14.tgz", - "integrity": "sha512-28pxzJP49Mymt664WnCtPkKeg7kXUsQKTKGf/Kl95rNTEdTJLbnlcc8wV0rT0yQNR7kXgpfBnG7h0ETLv/iu5Q==", + "version": "20.2.14", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/animations": "^18.0.0 || ^19.0.0", - "@angular/cdk": "18.2.14", - "@angular/common": "^18.0.0 || ^19.0.0", - "@angular/core": "^18.0.0 || ^19.0.0", - "@angular/forms": "^18.0.0 || ^19.0.0", - "@angular/platform-browser": "^18.0.0 || ^19.0.0", + "@angular/cdk": "20.2.14", + "@angular/common": "^20.0.0 || ^21.0.0", + "@angular/core": "^20.0.0 || ^21.0.0", + "@angular/forms": "^20.0.0 || ^21.0.0", + "@angular/platform-browser": "^20.0.0 || ^21.0.0", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/material-experimental": { - "version": "18.2.14", - "resolved": "https://registry.npmjs.org/@angular/material-experimental/-/material-experimental-18.2.14.tgz", - "integrity": "sha512-OW1HeMGBYA1ExAkse0GuZwtehI+YMnvzACFa9FtuVLrR09+sSIAATnaW8M/z1f79ubeMZJAOSpVXC4GhpGU2jw==", + "version": "20.2.14", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/animations": "^18.0.0 || ^19.0.0", - "@angular/cdk": "18.2.14", - "@angular/common": "^18.0.0 || ^19.0.0", - "@angular/core": "^18.0.0 || ^19.0.0", - "@angular/forms": "^18.0.0 || ^19.0.0", - "@angular/material": "18.2.14", - "@angular/platform-browser": "^18.0.0 || ^19.0.0" + "@angular/cdk": "20.2.14", + "@angular/cdk-experimental": "20.2.14", + "@angular/common": "^20.0.0 || ^21.0.0", + "@angular/core": "^20.0.0 || ^21.0.0", + "@angular/forms": "^20.0.0 || ^21.0.0", + "@angular/material": "20.2.14", + "@angular/platform-browser": "^20.0.0 || ^21.0.0" } }, "node_modules/@angular/material-moment-adapter": { - "version": "18.2.14", - "resolved": "https://registry.npmjs.org/@angular/material-moment-adapter/-/material-moment-adapter-18.2.14.tgz", - "integrity": "sha512-igICm+qQl/KeglU4LcCHgSaaoJR6RUlDzpCs2+kfLSnsvAy5Z0ZauW3pbIsCEIDb0zknBqos9d8x+pXg/bncCQ==", + "version": "20.2.14", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/core": "^18.0.0 || ^19.0.0", - "@angular/material": "18.2.14", + "@angular/core": "^20.0.0 || ^21.0.0", + "@angular/material": "20.2.14", "moment": "^2.18.1" } }, "node_modules/@angular/platform-browser": { - "version": "18.2.13", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.13.tgz", - "integrity": "sha512-tu7ZzY6qD3ATdWFzcTcsAKe7M6cJeWbT/4/bF9unyGO3XBPcNYDKoiz10+7ap2PUd0fmPwvuvTvSNJiFEBnB8Q==", + "version": "20.3.15", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/animations": "18.2.13", - "@angular/common": "18.2.13", - "@angular/core": "18.2.13" + "@angular/animations": "20.3.15", + "@angular/common": "20.3.15", + "@angular/core": "20.3.15" }, "peerDependenciesMeta": { "@angular/animations": { @@ -1101,45 +1017,39 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "18.2.13", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.13.tgz", - "integrity": "sha512-kbQCf9+8EpuJC7buBxhSiwBtXvjAwAKh6MznD6zd2pyCYqfY6gfRCZQRtK59IfgVtKmEONWI9grEyNIRoTmqJg==", + "version": "20.3.15", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "18.2.13", - "@angular/compiler": "18.2.13", - "@angular/core": "18.2.13", - "@angular/platform-browser": "18.2.13" + "@angular/common": "20.3.15", + "@angular/compiler": "20.3.15", + "@angular/core": "20.3.15", + "@angular/platform-browser": "20.3.15" } }, "node_modules/@angular/router": { - "version": "18.2.13", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.13.tgz", - "integrity": "sha512-VKmfgi/r/CkyBq9nChQ/ptmfu0JT/8ONnLVJ5H+SkFLRYJcIRyHLKjRihMCyVm6xM5yktOdCaW73NTQrFz7+bg==", + "version": "20.3.15", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "18.2.13", - "@angular/core": "18.2.13", - "@angular/platform-browser": "18.2.13", + "@angular/common": "20.3.15", + "@angular/core": "20.3.15", + "@angular/platform-browser": "20.3.15", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@babel/code-frame": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", "dependencies": { @@ -1152,9 +1062,7 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", - "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "version": "7.28.5", "dev": true, "license": "MIT", "engines": { @@ -1162,22 +1070,20 @@ } }, "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==", + "version": "7.28.3", "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", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.3", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -1194,15 +1100,11 @@ }, "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": { @@ -1210,16 +1112,14 @@ } }, "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==", + "version": "7.28.3", "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", + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -1227,13 +1127,11 @@ } }, "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==", + "version": "7.27.3", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.3" }, "engines": { "node": ">=6.9.0" @@ -1241,8 +1139,6 @@ }, "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": { @@ -1258,8 +1154,6 @@ }, "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": { @@ -1267,18 +1161,16 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", - "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", + "version": "7.28.5", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-member-expression-to-functions": "^7.27.1", + "@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.27.1", + "@babel/traverse": "^7.28.5", "semver": "^6.3.1" }, "engines": { @@ -1288,23 +1180,8 @@ "@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": { @@ -1312,14 +1189,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", - "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", + "version": "7.28.5", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "regexpu-core": "^6.2.0", + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", "semver": "^6.3.1" }, "engines": { @@ -1329,23 +1204,8 @@ "@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": { @@ -1354,8 +1214,6 @@ }, "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": { @@ -1369,31 +1227,8 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@babel/helper-define-polyfill-provider/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/@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": { @@ -1401,14 +1236,12 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", - "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "version": "7.28.5", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1416,8 +1249,6 @@ }, "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": { @@ -1429,15 +1260,13 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", - "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "version": "7.28.3", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.3" + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -1448,8 +1277,6 @@ }, "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": { @@ -1461,8 +1288,6 @@ }, "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": { @@ -1471,8 +1296,6 @@ }, "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": { @@ -1487,23 +1310,8 @@ "@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": { @@ -1520,8 +1328,6 @@ }, "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": { @@ -1534,8 +1340,6 @@ }, "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": { @@ -1547,8 +1351,6 @@ }, "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": { @@ -1556,9 +1358,7 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.28.5", "dev": true, "license": "MIT", "engines": { @@ -1567,8 +1367,6 @@ }, "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": { @@ -1576,42 +1374,36 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz", - "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==", + "version": "7.28.3", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.1", - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@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.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.2.tgz", - "integrity": "sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==", + "version": "7.28.4", "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", - "@babel/types": "^7.28.2" + "@babel/types": "^7.28.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", - "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "version": "7.28.5", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.0" + "@babel/types": "^7.28.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -1621,14 +1413,12 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", - "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", + "version": "7.28.5", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1639,8 +1429,6 @@ }, "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": { @@ -1655,8 +1443,6 @@ }, "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": { @@ -1671,8 +1457,6 @@ }, "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": { @@ -1688,14 +1472,12 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", - "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", + "version": "7.28.3", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -1706,8 +1488,6 @@ }, "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": { @@ -1719,8 +1499,6 @@ }, "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": { @@ -1734,13 +1512,11 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", - "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "version": "7.27.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1751,8 +1527,6 @@ }, "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": { @@ -1768,8 +1542,6 @@ }, "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": { @@ -1783,15 +1555,13 @@ } }, "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==", + "version": "7.28.0", "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" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -1801,15 +1571,13 @@ } }, "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==", + "version": "7.27.1", "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" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1820,8 +1588,6 @@ }, "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": { @@ -1835,9 +1601,7 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz", - "integrity": "sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==", + "version": "7.28.5", "dev": true, "license": "MIT", "dependencies": { @@ -1852,8 +1616,6 @@ }, "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": { @@ -1868,13 +1630,11 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", - "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", + "version": "7.28.3", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.28.3", "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { @@ -1885,9 +1645,7 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.0.tgz", - "integrity": "sha512-IjM1IoJNw72AZFlj33Cu8X0q2XK/6AaVC3jQu+cgQ5lThWD5ajnuUAml80dqRmOhmPkTH8uAwnpMu9Rvj0LTRA==", + "version": "7.28.4", "dev": true, "license": "MIT", "dependencies": { @@ -1896,7 +1654,7 @@ "@babel/helper-globals": "^7.28.0", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.28.0" + "@babel/traverse": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -1905,23 +1663,8 @@ "@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": { @@ -1936,14 +1679,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", - "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", + "version": "7.28.5", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.0" + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1954,8 +1695,6 @@ }, "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": { @@ -1971,8 +1710,6 @@ }, "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": { @@ -1987,8 +1724,6 @@ }, "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": { @@ -2004,8 +1739,6 @@ }, "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": { @@ -2018,10 +1751,23 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", - "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", + "version": "7.28.5", "dev": true, "license": "MIT", "dependencies": { @@ -2036,8 +1782,6 @@ }, "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": { @@ -2052,8 +1796,6 @@ }, "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": { @@ -2069,8 +1811,6 @@ }, "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": { @@ -2087,8 +1827,6 @@ }, "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": { @@ -2103,8 +1841,6 @@ }, "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": { @@ -2118,9 +1854,7 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", - "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", + "version": "7.28.5", "dev": true, "license": "MIT", "dependencies": { @@ -2135,8 +1869,6 @@ }, "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": { @@ -2151,8 +1883,6 @@ }, "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": { @@ -2168,8 +1898,6 @@ }, "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": { @@ -2184,16 +1912,14 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", - "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", + "version": "7.28.5", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-module-transforms": "^7.28.3", "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -2204,8 +1930,6 @@ }, "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": { @@ -2221,8 +1945,6 @@ }, "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": { @@ -2238,8 +1960,6 @@ }, "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": { @@ -2254,8 +1974,6 @@ }, "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": { @@ -2270,8 +1988,6 @@ }, "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": { @@ -2285,9 +2001,7 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz", - "integrity": "sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==", + "version": "7.28.4", "dev": true, "license": "MIT", "dependencies": { @@ -2295,7 +2009,7 @@ "@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.0" + "@babel/traverse": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -2306,8 +2020,6 @@ }, "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": { @@ -2323,8 +2035,6 @@ }, "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": { @@ -2338,9 +2048,7 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", - "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", + "version": "7.28.5", "dev": true, "license": "MIT", "dependencies": { @@ -2356,8 +2064,6 @@ }, "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": { @@ -2372,8 +2078,6 @@ }, "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": { @@ -2389,8 +2093,6 @@ }, "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": { @@ -2405,23 +2107,8 @@ "@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": { @@ -2435,9 +2122,7 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.28.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.1.tgz", - "integrity": "sha512-P0QiV/taaa3kXpLY+sXla5zec4E+4t4Aqc9ggHlfZ7a2cp8/x/Gv08jfwEtn9gnnYIMvHx6aoOZ8XJL8eU71Dg==", + "version": "7.28.4", "dev": true, "license": "MIT", "dependencies": { @@ -2452,8 +2137,6 @@ }, "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": { @@ -2469,8 +2152,6 @@ }, "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": { @@ -2484,17 +2165,15 @@ } }, "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==", + "version": "7.28.3", "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", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", "semver": "^6.3.1" }, "engines": { @@ -2506,8 +2185,6 @@ }, "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": { @@ -2516,8 +2193,6 @@ }, "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": { @@ -2532,8 +2207,6 @@ }, "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": { @@ -2549,8 +2222,6 @@ }, "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": { @@ -2565,8 +2236,6 @@ }, "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": { @@ -2581,8 +2250,6 @@ }, "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": { @@ -2597,8 +2264,6 @@ }, "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": { @@ -2613,8 +2278,6 @@ }, "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": { @@ -2630,8 +2293,6 @@ }, "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": { @@ -2647,8 +2308,6 @@ }, "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": { @@ -2663,80 +2322,79 @@ } }, "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==", + "version": "7.28.3", "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/compat-data": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.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/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.28.0", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.0", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.28.3", + "@babel/plugin-transform-classes": "^7.28.3", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.0", + "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.28.0", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.28.3", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.40.0", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "core-js-compat": "^3.43.0", "semver": "^6.3.1" }, "engines": { @@ -2746,26 +2404,8 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env/node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", - "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/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==", + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", "dev": true, "license": "ISC", "bin": { @@ -2774,8 +2414,6 @@ }, "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": { @@ -2788,22 +2426,15 @@ } }, "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==", + "version": "7.28.3", "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": { @@ -2816,18 +2447,16 @@ } }, "node_modules/@babel/traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", - "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "version": "7.28.5", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.0", + "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.0", + "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", - "@babel/types": "^7.28.0", + "@babel/types": "^7.28.5", "debug": "^4.3.1" }, "engines": { @@ -2835,14 +2464,12 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", - "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "version": "7.28.5", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.0", - "@babel/types": "^7.28.0", + "@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" @@ -2852,23 +2479,75 @@ } }, "node_modules/@babel/types": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", - "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", + "version": "7.28.5", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@cacheable/memory": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@cacheable/utils": "^2.3.2", + "@keyv/bigmap": "^1.3.0", + "hookified": "^1.13.0", + "keyv": "^5.5.4" + } + }, + "node_modules/@cacheable/memory/node_modules/@keyv/bigmap": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "hashery": "^1.2.0", + "hookified": "^1.13.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "keyv": "^5.5.4" + } + }, + "node_modules/@cacheable/memory/node_modules/keyv": { + "version": "5.5.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "node_modules/@cacheable/utils": { + "version": "2.3.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "hashery": "^1.2.0", + "keyv": "^5.5.4" + } + }, + "node_modules/@cacheable/utils/node_modules/keyv": { + "version": "5.5.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, "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": { @@ -2876,18 +2555,16 @@ } }, "node_modules/@commitlint/cli": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.8.1.tgz", - "integrity": "sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==", + "version": "20.1.0", "dev": true, "license": "MIT", "peer": true, "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", + "@commitlint/format": "^20.0.0", + "@commitlint/lint": "^20.0.0", + "@commitlint/load": "^20.1.0", + "@commitlint/read": "^20.0.0", + "@commitlint/types": "^20.0.0", "tinyexec": "^1.0.0", "yargs": "^17.0.0" }, @@ -2898,15 +2575,154 @@ "node": ">=v18" } }, + "node_modules/@commitlint/cli/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/cli/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@commitlint/cli/node_modules/cliui": { + "version": "8.0.1", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@commitlint/cli/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@commitlint/cli/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@commitlint/cli/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@commitlint/cli/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/cli/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/cli/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/cli/node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "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/@commitlint/cli/node_modules/yargs": { + "version": "17.7.2", + "dev": true, + "license": "MIT", + "peer": true, + "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/@commitlint/cli/node_modules/yargs-parser": { + "version": "21.1.1", + "dev": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } + }, "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==", + "version": "20.0.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@commitlint/types": "^19.8.1", + "@commitlint/types": "^20.0.0", "ajv": "^8.11.0" }, "engines": { @@ -2914,14 +2730,12 @@ } }, "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==", + "version": "20.0.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@commitlint/types": "^19.8.1", + "@commitlint/types": "^20.0.0", "lodash.camelcase": "^4.3.0", "lodash.kebabcase": "^4.1.1", "lodash.snakecase": "^4.1.1", @@ -2933,9 +2747,7 @@ } }, "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==", + "version": "20.0.0", "dev": true, "license": "MIT", "peer": true, @@ -2944,14 +2756,12 @@ } }, "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==", + "version": "20.0.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@commitlint/types": "^19.8.1", + "@commitlint/types": "^20.0.0", "chalk": "^5.3.0" }, "engines": { @@ -2959,14 +2769,12 @@ } }, "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==", + "version": "20.0.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@commitlint/types": "^19.8.1", + "@commitlint/types": "^20.0.0", "semver": "^7.6.0" }, "engines": { @@ -2974,34 +2782,30 @@ } }, "node_modules/@commitlint/lint": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.8.1.tgz", - "integrity": "sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw==", + "version": "20.0.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@commitlint/is-ignored": "^19.8.1", - "@commitlint/parse": "^19.8.1", - "@commitlint/rules": "^19.8.1", - "@commitlint/types": "^19.8.1" + "@commitlint/is-ignored": "^20.0.0", + "@commitlint/parse": "^20.0.0", + "@commitlint/rules": "^20.0.0", + "@commitlint/types": "^20.0.0" }, "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==", + "version": "20.1.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@commitlint/config-validator": "^19.8.1", - "@commitlint/execute-rule": "^19.8.1", - "@commitlint/resolve-extends": "^19.8.1", - "@commitlint/types": "^19.8.1", + "@commitlint/config-validator": "^20.0.0", + "@commitlint/execute-rule": "^20.0.0", + "@commitlint/resolve-extends": "^20.1.0", + "@commitlint/types": "^20.0.0", "chalk": "^5.3.0", "cosmiconfig": "^9.0.0", "cosmiconfig-typescript-loader": "^6.1.0", @@ -3014,9 +2818,7 @@ } }, "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==", + "version": "20.0.0", "dev": true, "license": "MIT", "peer": true, @@ -3025,14 +2827,12 @@ } }, "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==", + "version": "20.0.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@commitlint/types": "^19.8.1", + "@commitlint/types": "^20.0.0", "conventional-changelog-angular": "^7.0.0", "conventional-commits-parser": "^5.0.0" }, @@ -3041,15 +2841,13 @@ } }, "node_modules/@commitlint/read": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.8.1.tgz", - "integrity": "sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ==", + "version": "20.0.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@commitlint/top-level": "^19.8.1", - "@commitlint/types": "^19.8.1", + "@commitlint/top-level": "^20.0.0", + "@commitlint/types": "^20.0.0", "git-raw-commits": "^4.0.0", "minimist": "^1.2.8", "tinyexec": "^1.0.0" @@ -3059,15 +2857,13 @@ } }, "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==", + "version": "20.1.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@commitlint/config-validator": "^19.8.1", - "@commitlint/types": "^19.8.1", + "@commitlint/config-validator": "^20.0.0", + "@commitlint/types": "^20.0.0", "global-directory": "^4.0.1", "import-meta-resolve": "^4.0.0", "lodash.mergewith": "^4.6.2", @@ -3078,26 +2874,22 @@ } }, "node_modules/@commitlint/rules": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.8.1.tgz", - "integrity": "sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw==", + "version": "20.0.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@commitlint/ensure": "^19.8.1", - "@commitlint/message": "^19.8.1", - "@commitlint/to-lines": "^19.8.1", - "@commitlint/types": "^19.8.1" + "@commitlint/ensure": "^20.0.0", + "@commitlint/message": "^20.0.0", + "@commitlint/to-lines": "^20.0.0", + "@commitlint/types": "^20.0.0" }, "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==", + "version": "20.0.0", "dev": true, "license": "MIT", "peer": true, @@ -3106,9 +2898,7 @@ } }, "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==", + "version": "20.0.0", "dev": true, "license": "MIT", "peer": true, @@ -3120,11 +2910,10 @@ } }, "node_modules/@commitlint/types": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.8.1.tgz", - "integrity": "sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==", + "version": "20.0.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/conventional-commits-parser": "^5.0.0", "chalk": "^5.3.0" @@ -3134,42 +2923,40 @@ } }, "node_modules/@cspell/cspell-bundled-dicts": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-9.2.0.tgz", - "integrity": "sha512-e4qb78SQWqHkRw47W8qFJ3RPijhSLkADF+T0oH8xl3r/golq1RGp2/KrWOqGRRofUSTiIKYqaMX7mbAyFnOxyA==", + "version": "9.4.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { "@cspell/dict-ada": "^4.1.1", "@cspell/dict-al": "^1.1.1", - "@cspell/dict-aws": "^4.0.12", - "@cspell/dict-bash": "^4.2.1", - "@cspell/dict-companies": "^3.2.2", - "@cspell/dict-cpp": "^6.0.9", + "@cspell/dict-aws": "^4.0.16", + "@cspell/dict-bash": "^4.2.2", + "@cspell/dict-companies": "^3.2.7", + "@cspell/dict-cpp": "^6.0.15", "@cspell/dict-cryptocurrencies": "^5.0.5", "@cspell/dict-csharp": "^4.0.7", "@cspell/dict-css": "^4.0.18", "@cspell/dict-dart": "^2.3.1", - "@cspell/dict-data-science": "^2.0.9", + "@cspell/dict-data-science": "^2.0.12", "@cspell/dict-django": "^4.1.5", - "@cspell/dict-docker": "^1.1.15", + "@cspell/dict-docker": "^1.1.16", "@cspell/dict-dotnet": "^5.0.10", "@cspell/dict-elixir": "^4.0.8", - "@cspell/dict-en_us": "^4.4.15", - "@cspell/dict-en-common-misspellings": "^2.1.3", - "@cspell/dict-en-gb-mit": "^3.1.5", - "@cspell/dict-filetypes": "^3.0.13", + "@cspell/dict-en_us": "^4.4.24", + "@cspell/dict-en-common-misspellings": "^2.1.8", + "@cspell/dict-en-gb-mit": "^3.1.14", + "@cspell/dict-filetypes": "^3.0.14", "@cspell/dict-flutter": "^1.1.1", "@cspell/dict-fonts": "^4.0.5", "@cspell/dict-fsharp": "^1.1.1", "@cspell/dict-fullstack": "^3.2.7", "@cspell/dict-gaming-terms": "^1.1.2", "@cspell/dict-git": "^3.0.7", - "@cspell/dict-golang": "^6.0.23", + "@cspell/dict-golang": "^6.0.24", "@cspell/dict-google": "^1.0.9", "@cspell/dict-haskell": "^4.0.6", - "@cspell/dict-html": "^4.0.12", + "@cspell/dict-html": "^4.0.13", "@cspell/dict-html-symbol-entities": "^4.0.4", "@cspell/dict-java": "^5.0.12", "@cspell/dict-julia": "^1.1.1", @@ -3179,49 +2966,46 @@ "@cspell/dict-lorem-ipsum": "^4.0.5", "@cspell/dict-lua": "^4.0.8", "@cspell/dict-makefile": "^1.0.5", - "@cspell/dict-markdown": "^2.0.12", + "@cspell/dict-markdown": "^2.0.13", "@cspell/dict-monkeyc": "^1.0.11", "@cspell/dict-node": "^5.0.8", - "@cspell/dict-npm": "^5.2.12", - "@cspell/dict-php": "^4.0.15", + "@cspell/dict-npm": "^5.2.25", + "@cspell/dict-php": "^4.1.0", "@cspell/dict-powershell": "^5.0.15", - "@cspell/dict-public-licenses": "^2.0.14", - "@cspell/dict-python": "^4.2.19", + "@cspell/dict-public-licenses": "^2.0.15", + "@cspell/dict-python": "^4.2.23", "@cspell/dict-r": "^2.1.1", "@cspell/dict-ruby": "^5.0.9", "@cspell/dict-rust": "^4.0.12", "@cspell/dict-scala": "^5.0.8", - "@cspell/dict-shell": "^1.1.1", - "@cspell/dict-software-terms": "^5.1.4", + "@cspell/dict-shell": "^1.1.2", + "@cspell/dict-software-terms": "^5.1.15", "@cspell/dict-sql": "^2.2.1", "@cspell/dict-svelte": "^1.0.7", "@cspell/dict-swift": "^2.0.6", "@cspell/dict-terraform": "^1.1.3", "@cspell/dict-typescript": "^3.2.3", - "@cspell/dict-vue": "^3.0.5" + "@cspell/dict-vue": "^3.0.5", + "@cspell/dict-zig": "^1.0.0" }, "engines": { "node": ">=20" } }, "node_modules/@cspell/cspell-json-reporter": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-9.2.0.tgz", - "integrity": "sha512-qHdkW8eyknCSDEsqCG8OHBMal03LQf21H2LVWhtwszEQ4BQRKcWctc+VIgkO69F/jLaN2wi/yhhMufXWHAEzIg==", + "version": "9.4.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@cspell/cspell-types": "9.2.0" + "@cspell/cspell-types": "9.4.0" }, "engines": { "node": ">=20" } }, "node_modules/@cspell/cspell-pipe": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-9.2.0.tgz", - "integrity": "sha512-RO3adcsr7Ek+4511nyEOWDhOYYU1ogRs1Mo5xx3kDIdcKAJzhFdGry35T2wqft4dPASLCXcemBrhoS+hdQ+z+Q==", + "version": "9.4.0", "dev": true, "license": "MIT", "peer": true, @@ -3230,9 +3014,7 @@ } }, "node_modules/@cspell/cspell-resolver": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-9.2.0.tgz", - "integrity": "sha512-0Xvwq0iezfO71Alw+DjsGxacAzydqOAxdXnY4JknHuxt2l8GTSMjRwj65QAflv3PN6h1QoRZEeWdiKtusceWAw==", + "version": "9.4.0", "dev": true, "license": "MIT", "peer": true, @@ -3244,9 +3026,7 @@ } }, "node_modules/@cspell/cspell-service-bus": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-9.2.0.tgz", - "integrity": "sha512-ZDvcOTFk3cCVW+OjlkljeP7aSuV8tIguVn+GMco1/A+961hsEP20hngK9zJtyfpXqyvJKtvCVlyzS+z8VRrZGg==", + "version": "9.4.0", "dev": true, "license": "MIT", "peer": true, @@ -3255,9 +3035,7 @@ } }, "node_modules/@cspell/cspell-types": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-9.2.0.tgz", - "integrity": "sha512-hL4ltFwiARpFxlfXt4GiTWQxIFyZp4wrlp7dozZbitYO6QlYc5fwQ8jBc5zFUqknuH4gx/sCMLNXhAv3enNGZQ==", + "version": "9.4.0", "dev": true, "license": "MIT", "peer": true, @@ -3267,499 +3045,385 @@ }, "node_modules/@cspell/dict-ada": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-4.1.1.tgz", - "integrity": "sha512-E+0YW9RhZod/9Qy2gxfNZiHJjCYFlCdI69br1eviQQWB8yOTJX0JHXLs79kOYhSW0kINPVUdvddEBe6Lu6CjGQ==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-al": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-al/-/dict-al-1.1.1.tgz", - "integrity": "sha512-sD8GCaZetgQL4+MaJLXqbzWcRjfKVp8x+px3HuCaaiATAAtvjwUQ5/Iubiqwfd1boIh2Y1/3EgM3TLQ7Q8e0wQ==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-aws": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-4.0.14.tgz", - "integrity": "sha512-qLPR+OFmpzyUcuUYyCQFIURDDUGIlQsdGirPyvaIrXxs2giCKG97cAuFz5EleL3/Lo7uJAVDw0lt4Ka7wIRhjQ==", + "version": "4.0.16", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-bash": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.2.1.tgz", - "integrity": "sha512-SBnzfAyEAZLI9KFS7DUG6Xc1vDFuLllY3jz0WHvmxe8/4xV3ufFE3fGxalTikc1VVeZgZmxYiABw4iGxVldYEg==", + "version": "4.2.2", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@cspell/dict-shell": "1.1.1" + "@cspell/dict-shell": "1.1.2" } }, "node_modules/@cspell/dict-companies": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.2.3.tgz", - "integrity": "sha512-7ekwamRYeS7G3I3LEKM3t0WIyAytCbsx2I2h2z2eEvF+b3TmtJVcV7UI7BScLue3bep4sPB/b4CV3BUv3QfyzQ==", + "version": "3.2.7", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-cpp": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-6.0.9.tgz", - "integrity": "sha512-Xdq9MwGh0D5rsnbOqFW24NIClXXRhN11KJdySMibpcqYGeomxB2ODFBuhj1H7azO7kVGkGH0Okm4yQ2TRzBx0g==", + "version": "6.0.15", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-cryptocurrencies": { "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-5.0.5.tgz", - "integrity": "sha512-R68hYYF/rtlE6T/dsObStzN5QZw+0aQBinAXuWCVqwdS7YZo0X33vGMfChkHaiCo3Z2+bkegqHlqxZF4TD3rUA==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-csharp": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.7.tgz", - "integrity": "sha512-H16Hpu8O/1/lgijFt2lOk4/nnldFtQ4t8QHbyqphqZZVE5aS4J/zD/WvduqnLY21aKhZS6jo/xF5PX9jyqPKUA==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-css": { "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.18.tgz", - "integrity": "sha512-EF77RqROHL+4LhMGW5NTeKqfUd/e4OOv6EDFQ/UQQiFyWuqkEKyEz0NDILxOFxWUEVdjT2GQ2cC7t12B6pESwg==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-dart": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.3.1.tgz", - "integrity": "sha512-xoiGnULEcWdodXI6EwVyqpZmpOoh8RA2Xk9BNdR7DLamV/QMvEYn8KJ7NlRiTSauJKPNkHHQ5EVHRM6sTS7jdg==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-data-science": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.9.tgz", - "integrity": "sha512-wTOFMlxv06veIwKdXUwdGxrQcK44Zqs426m6JGgHIB/GqvieZQC5n0UI+tUm5OCxuNyo4OV6mylT4cRMjtKtWQ==", + "version": "2.0.12", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-django": { "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.1.5.tgz", - "integrity": "sha512-AvTWu99doU3T8ifoMYOMLW2CXKvyKLukPh1auOPwFGHzueWYvBBN+OxF8wF7XwjTBMMeRleVdLh3aWCDEX/ZWg==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-docker": { "version": "1.1.16", - "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.16.tgz", - "integrity": "sha512-UiVQ5RmCg6j0qGIxrBnai3pIB+aYKL3zaJGvXk1O/ertTKJif9RZikKXCEgqhaCYMweM4fuLqWSVmw3hU164Iw==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-dotnet": { "version": "5.0.10", - "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-5.0.10.tgz", - "integrity": "sha512-ooar8BP/RBNP1gzYfJPStKEmpWy4uv/7JCq6FOnJLeD1yyfG3d/LFMVMwiJo+XWz025cxtkM3wuaikBWzCqkmg==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-elixir": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-4.0.8.tgz", - "integrity": "sha512-CyfphrbMyl4Ms55Vzuj+mNmd693HjBFr9hvU+B2YbFEZprE5AG+EXLYTMRWrXbpds4AuZcvN3deM2XVB80BN/Q==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-en_us": { - "version": "4.4.16", - "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.16.tgz", - "integrity": "sha512-/R47sUbUmba2dG/0LZyE6P6gX/DRF1sCcYNQNWyPk/KeidQRNZG+FH9U0KRvX42/2ZzMge6ebXH3WAJ52w0Vqw==", + "version": "4.4.24", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-en-common-misspellings": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.1.3.tgz", - "integrity": "sha512-v1I97Hr1OrK+mwHsVzbY4vsPxx6mA5quhxzanF6XuRofz00wH4HPz8Q3llzRHxka5Wl/59gyan04UkUrvP4gdA==", + "version": "2.1.8", "dev": true, "license": "CC BY-SA 4.0", "peer": true }, "node_modules/@cspell/dict-en-gb-mit": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb-mit/-/dict-en-gb-mit-3.1.6.tgz", - "integrity": "sha512-3JJGxuPhDK5rMDYPzJYAdjjsBddEyV54rXfUQpOCl7c7weMhNDWfC2q4h3cKNDj7Isud1q2RM+DlSxQWf40OTw==", + "version": "3.1.14", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-filetypes": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-3.0.13.tgz", - "integrity": "sha512-g6rnytIpQlMNKGJT1JKzWkC+b3xCliDKpQ3ANFSq++MnR4GaLiifaC4JkVON11Oh/UTplYOR1nY3BR4X30bswA==", + "version": "3.0.14", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-flutter": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-flutter/-/dict-flutter-1.1.1.tgz", - "integrity": "sha512-UlOzRcH2tNbFhZmHJN48Za/2/MEdRHl2BMkCWZBYs+30b91mWvBfzaN4IJQU7dUZtowKayVIF9FzvLZtZokc5A==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-fonts": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-fonts/-/dict-fonts-4.0.5.tgz", - "integrity": "sha512-BbpkX10DUX/xzHs6lb7yzDf/LPjwYIBJHJlUXSBXDtK/1HaeS+Wqol4Mlm2+NAgZ7ikIE5DQMViTgBUY3ezNoQ==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-fsharp": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-fsharp/-/dict-fsharp-1.1.1.tgz", - "integrity": "sha512-imhs0u87wEA4/cYjgzS0tAyaJpwG7vwtC8UyMFbwpmtw+/bgss+osNfyqhYRyS/ehVCWL17Ewx2UPkexjKyaBA==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-fullstack": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.2.7.tgz", - "integrity": "sha512-IxEk2YAwAJKYCUEgEeOg3QvTL4XLlyArJElFuMQevU1dPgHgzWElFevN5lsTFnvMFA1riYsVinqJJX0BanCFEg==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-gaming-terms": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.1.2.tgz", - "integrity": "sha512-9XnOvaoTBscq0xuD6KTEIkk9hhdfBkkvJAIsvw3JMcnp1214OCGW8+kako5RqQ2vTZR3Tnf3pc57o7VgkM0q1Q==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-git": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@cspell/dict-git/-/dict-git-3.0.7.tgz", - "integrity": "sha512-odOwVKgfxCQfiSb+nblQZc4ErXmnWEnv8XwkaI4sNJ7cNmojnvogYVeMqkXPjvfrgEcizEEA4URRD2Ms5PDk1w==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-golang": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.23.tgz", - "integrity": "sha512-oXqUh/9dDwcmVlfUF5bn3fYFqbUzC46lXFQmi5emB0vYsyQXdNWsqi6/yH3uE7bdRE21nP7Yo0mR1jjFNyLamg==", + "version": "6.0.24", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-google": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@cspell/dict-google/-/dict-google-1.0.9.tgz", - "integrity": "sha512-biL65POqialY0i4g6crj7pR6JnBkbsPovB2WDYkj3H4TuC/QXv7Pu5pdPxeUJA6TSCHI7T5twsO4VSVyRxD9CA==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-haskell": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-4.0.6.tgz", - "integrity": "sha512-ib8SA5qgftExpYNjWhpYIgvDsZ/0wvKKxSP+kuSkkak520iPvTJumEpIE+qPcmJQo4NzdKMN8nEfaeci4OcFAQ==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-html": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.12.tgz", - "integrity": "sha512-JFffQ1dDVEyJq6tCDWv0r/RqkdSnV43P2F/3jJ9rwLgdsOIXwQbXrz6QDlvQLVvNSnORH9KjDtenFTGDyzfCaA==", + "version": "4.0.13", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-html-symbol-entities": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.4.tgz", - "integrity": "sha512-afea+0rGPDeOV9gdO06UW183Qg6wRhWVkgCFwiO3bDupAoyXRuvupbb5nUyqSTsLXIKL8u8uXQlJ9pkz07oVXw==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-java": { "version": "5.0.12", - "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.12.tgz", - "integrity": "sha512-qPSNhTcl7LGJ5Qp6VN71H8zqvRQK04S08T67knMq9hTA8U7G1sTKzLmBaDOFhq17vNX/+rT+rbRYp+B5Nwza1A==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-julia": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-julia/-/dict-julia-1.1.1.tgz", - "integrity": "sha512-WylJR9TQ2cgwd5BWEOfdO3zvDB+L7kYFm0I9u0s9jKHWQ6yKmfKeMjU9oXxTBxIufhCXm92SKwwVNAC7gjv+yA==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-k8s": { "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.12.tgz", - "integrity": "sha512-2LcllTWgaTfYC7DmkMPOn9GsBWsA4DZdlun4po8s2ysTP7CPEnZc1ZfK6pZ2eI4TsZemlUQQ+NZxMe9/QutQxg==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-kotlin": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-kotlin/-/dict-kotlin-1.1.1.tgz", - "integrity": "sha512-J3NzzfgmxRvEeOe3qUXnSJQCd38i/dpF9/t3quuWh6gXM+krsAXP75dY1CzDmS8mrJAlBdVBeAW5eAZTD8g86Q==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-latex": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-4.0.4.tgz", - "integrity": "sha512-YdTQhnTINEEm/LZgTzr9Voz4mzdOXH7YX+bSFs3hnkUHCUUtX/mhKgf1CFvZ0YNM2afjhQcmLaR9bDQVyYBvpA==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-lorem-ipsum": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-4.0.5.tgz", - "integrity": "sha512-9a4TJYRcPWPBKkQAJ/whCu4uCAEgv/O2xAaZEI0n4y1/l18Yyx8pBKoIX5QuVXjjmKEkK7hi5SxyIsH7pFEK9Q==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-lua": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-4.0.8.tgz", - "integrity": "sha512-N4PkgNDMu9JVsRu7JBS/3E/dvfItRgk9w5ga2dKq+JupP2Y3lojNaAVFhXISh4Y0a6qXDn2clA6nvnavQ/jjLA==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-makefile": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-makefile/-/dict-makefile-1.0.5.tgz", - "integrity": "sha512-4vrVt7bGiK8Rx98tfRbYo42Xo2IstJkAF4tLLDMNQLkQ86msDlYSKG1ZCk8Abg+EdNcFAjNhXIiNO+w4KflGAQ==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-markdown": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@cspell/dict-markdown/-/dict-markdown-2.0.12.tgz", - "integrity": "sha512-ufwoliPijAgWkD/ivAMC+A9QD895xKiJRF/fwwknQb7kt7NozTLKFAOBtXGPJAB4UjhGBpYEJVo2elQ0FCAH9A==", + "version": "2.0.13", "dev": true, "license": "MIT", "peer": true, "peerDependencies": { "@cspell/dict-css": "^4.0.18", - "@cspell/dict-html": "^4.0.12", + "@cspell/dict-html": "^4.0.13", "@cspell/dict-html-symbol-entities": "^4.0.4", "@cspell/dict-typescript": "^3.2.3" } }, "node_modules/@cspell/dict-monkeyc": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.11.tgz", - "integrity": "sha512-7Q1Ncu0urALI6dPTrEbSTd//UK0qjRBeaxhnm8uY5fgYNFYAG+u4gtnTIo59S6Bw5P++4H3DiIDYoQdY/lha8w==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-node": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-5.0.8.tgz", - "integrity": "sha512-AirZcN2i84ynev3p2/1NCPEhnNsHKMz9zciTngGoqpdItUb2bDt1nJBjwlsrFI78GZRph/VaqTVFwYikmncpXg==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-npm": { - "version": "5.2.13", - "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.13.tgz", - "integrity": "sha512-yE7DfpiQjDFW6TLr5/fsSj4BlUy1A8lsuz2LQQHv4lQAAkZ4RsePYFL9DkRRfEtxn8CZYetUnU74/jQbfsnyrA==", + "version": "5.2.25", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-php": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.0.15.tgz", - "integrity": "sha512-iepGB2gtToMWSTvybesn4/lUp4LwXcEm0s8vasJLP76WWVkq1zYjmeS+WAIzNgsuURyZ/9mGqhS0CWMuo74ODw==", + "version": "4.1.0", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-powershell": { "version": "5.0.15", - "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-5.0.15.tgz", - "integrity": "sha512-l4S5PAcvCFcVDMJShrYD0X6Huv9dcsQPlsVsBGbH38wvuN7gS7+GxZFAjTNxDmTY1wrNi1cCatSg6Pu2BW4rgg==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-public-licenses": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.14.tgz", - "integrity": "sha512-8NhNzQWALF6+NlLeKZKilSHbeW9MWeiD+NcrjehMAcovKFbsn8smmQG/bVxw+Ymtd6WEgNpLgswAqNsbSQQ4og==", + "version": "2.0.15", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-python": { - "version": "4.2.19", - "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.19.tgz", - "integrity": "sha512-9S2gTlgILp1eb6OJcVZeC8/Od83N8EqBSg5WHVpx97eMMJhifOzePkE0kDYjyHMtAFznCQTUu0iQEJohNQ5B0A==", + "version": "4.2.23", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@cspell/dict-data-science": "^2.0.9" + "@cspell/dict-data-science": "^2.0.12" } }, "node_modules/@cspell/dict-r": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-r/-/dict-r-2.1.1.tgz", - "integrity": "sha512-71Ka+yKfG4ZHEMEmDxc6+blFkeTTvgKbKAbwiwQAuKl3zpqs1Y0vUtwW2N4b3LgmSPhV3ODVY0y4m5ofqDuKMw==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-ruby": { "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-5.0.9.tgz", - "integrity": "sha512-H2vMcERMcANvQshAdrVx0XoWaNX8zmmiQN11dZZTQAZaNJ0xatdJoSqY8C8uhEMW89bfgpN+NQgGuDXW2vmXEw==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-rust": { "version": "4.0.12", - "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.0.12.tgz", - "integrity": "sha512-z2QiH+q9UlNhobBJArvILRxV8Jz0pKIK7gqu4TgmEYyjiu1TvnGZ1tbYHeu9w3I/wOP6UMDoCBTty5AlYfW0mw==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-scala": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-5.0.8.tgz", - "integrity": "sha512-YdftVmumv8IZq9zu1gn2U7A4bfM2yj9Vaupydotyjuc+EEZZSqAafTpvW/jKLWji2TgybM1L2IhmV0s/Iv9BTw==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-shell": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-shell/-/dict-shell-1.1.1.tgz", - "integrity": "sha512-T37oYxE7OV1x/1D4/13Y8JZGa1QgDCXV7AVt3HLXjn0Fe3TaNDvf5sU0fGnXKmBPqFFrHdpD3uutAQb1dlp15g==", + "version": "1.1.2", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-software-terms": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.1.5.tgz", - "integrity": "sha512-MX5beBP3pLmIM0mjqfrHbie3EEfyLWZ8ZqW56jcLuRlLoDcfC0FZsr66NCARgCgEwsWiidHFe87+7fFsnwqY6A==", + "version": "5.1.15", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-sql": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.2.1.tgz", - "integrity": "sha512-qDHF8MpAYCf4pWU8NKbnVGzkoxMNrFqBHyG/dgrlic5EQiKANCLELYtGlX5auIMDLmTf1inA0eNtv74tyRJ/vg==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-svelte": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@cspell/dict-svelte/-/dict-svelte-1.0.7.tgz", - "integrity": "sha512-hGZsGqP0WdzKkdpeVLBivRuSNzOTvN036EBmpOwxH+FTY2DuUH7ecW+cSaMwOgmq5JFSdTcbTNFlNC8HN8lhaQ==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-swift": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@cspell/dict-swift/-/dict-swift-2.0.6.tgz", - "integrity": "sha512-PnpNbrIbex2aqU1kMgwEKvCzgbkHtj3dlFLPMqW1vSniop7YxaDTtvTUO4zA++ugYAEL+UK8vYrBwDPTjjvSnA==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-terraform": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-terraform/-/dict-terraform-1.1.3.tgz", - "integrity": "sha512-gr6wxCydwSFyyBKhBA2xkENXtVFToheqYYGFvlMZXWjviynXmh+NK/JTvTCk/VHk3+lzbO9EEQKee6VjrAUSbA==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-typescript": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.2.3.tgz", - "integrity": "sha512-zXh1wYsNljQZfWWdSPYwQhpwiuW0KPW1dSd8idjMRvSD0aSvWWHoWlrMsmZeRl4qM4QCEAjua8+cjflm41cQBg==", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dict-vue": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-vue/-/dict-vue-3.0.5.tgz", - "integrity": "sha512-Mqutb8jbM+kIcywuPQCCaK5qQHTdaByoEO2J9LKFy3sqAdiBogNkrplqUK0HyyRFgCfbJUgjz3N85iCMcWH0JA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@cspell/dict-zig": { + "version": "1.0.0", "dev": true, "license": "MIT", "peer": true }, "node_modules/@cspell/dynamic-import": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-9.2.0.tgz", - "integrity": "sha512-2/k4LR8CQqbgIPQGELbCdt9xgg9+aQ7pMwOtllKvnFYBtwNiwqcZjlzAam2gtvD5DghKX2qrcSHG5A7YP5cX9A==", + "version": "9.4.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@cspell/url": "9.2.0", - "import-meta-resolve": "^4.1.0" + "@cspell/url": "9.4.0", + "import-meta-resolve": "^4.2.0" }, "engines": { "node": ">=20" } }, "node_modules/@cspell/filetypes": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-9.2.0.tgz", - "integrity": "sha512-6wmCa3ZyI647H7F4w6kb9PCJ703JKSgFTB8EERTdIoGySbgVp5+qMIIoZ//wELukdjgcufcFZ5pBrhRDRsemRA==", + "version": "9.4.0", "dev": true, "license": "MIT", "peer": true, @@ -3768,9 +3432,7 @@ } }, "node_modules/@cspell/strong-weak-map": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-9.2.0.tgz", - "integrity": "sha512-5mpIMiIOCu4cBqy1oCTXISgJuOCQ6R/e38AkvnYWfmMIx7fCdx8n+mF52wX9m61Ng28Sq8VL253xybsWcCxHug==", + "version": "9.4.0", "dev": true, "license": "MIT", "peer": true, @@ -3779,9 +3441,7 @@ } }, "node_modules/@cspell/url": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@cspell/url/-/url-9.2.0.tgz", - "integrity": "sha512-plB0wwdAESqBl4xDAT2db2/K1FZHJXfYlJTiV6pkn0XffTGyg4UGLaSCm15NzUoPxdSmzqj5jQb7y+mB9kFK8g==", + "version": "9.4.0", "dev": true, "license": "MIT", "peer": true, @@ -3791,8 +3451,6 @@ }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "license": "MIT", "dependencies": { @@ -3804,8 +3462,6 @@ }, "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3815,8 +3471,6 @@ }, "node_modules/@csstools/css-parser-algorithms": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", - "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", "dev": true, "funding": [ { @@ -3837,10 +3491,27 @@ "@csstools/css-tokenizer": "^3.0.4" } }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.0.20", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "peer": true, + "engines": { + "node": ">=18" + } + }, "node_modules/@csstools/css-tokenizer": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", - "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", "dev": true, "funding": [ { @@ -3860,8 +3531,6 @@ }, "node_modules/@csstools/media-query-list-parser": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", - "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", "dev": true, "funding": [ { @@ -3885,8 +3554,6 @@ }, "node_modules/@csstools/selector-specificity": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", "dev": true, "funding": [ { @@ -3908,23 +3575,19 @@ } }, "node_modules/@danielmoncada/angular-datetime-picker": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/@danielmoncada/angular-datetime-picker/-/angular-datetime-picker-18.1.0.tgz", - "integrity": "sha512-hNp0DBFlCMIKa6yvZKocmm2ZCVzevX60z/ZIhRlNVaKwU+Wwh9B/KfvqwT03uvmZWSFQSnNUoPGBTyx0fyTayw==", + "version": "20.0.1", "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, "peerDependencies": { - "@angular/cdk": "^18.0.0", - "@angular/common": "^18.0.0", - "@angular/core": "^18.0.0" + "@angular/cdk": "^19.0.0 || ^20.0.0", + "@angular/common": "^19.0.0 || ^20.0.0", + "@angular/core": "^19.0.0 || ^20.0.0" } }, "node_modules/@discoveryjs/json-ext": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.1.tgz", - "integrity": "sha512-boghen8F0Q8D+0/Q1/1r6DUEieUJ8w2a1gIknExMSHBsJFOr2+0KUfHiVYBvucPwl3+RU5PFBK833FjFCh3BhA==", + "version": "0.6.3", "dev": true, "license": "MIT", "engines": { @@ -3932,21 +3595,17 @@ } }, "node_modules/@dual-bundle/import-meta-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", - "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", + "version": "4.2.1", "dev": true, "license": "MIT", "peer": true, "funding": { "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/JounQin" } }, "node_modules/@eggjs/yauzl": { "version": "2.11.0", - "resolved": "https://registry.npmjs.org/@eggjs/yauzl/-/yauzl-2.11.0.tgz", - "integrity": "sha512-Jq+k2fCZJ3i3HShb0nxLUiAgq5pwo8JTT1TrH22JoehZQ0Nm2dvByGIja1NYfNyuE4Tx5/Dns5nVsBN/mlC8yg==", "dev": true, "license": "MIT", "dependencies": { @@ -3954,869 +3613,619 @@ "fd-slicer2": "^1.2.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", - "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.9", "cpu": [ - "ppc64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "aix" + "darwin" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz", - "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", - "cpu": [ - "arm" - ], + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz", - "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" + "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/@esbuild/android-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz", - "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", - "cpu": [ - "x64" - ], + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=18" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz", - "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint/config-array": { + "version": "0.21.1", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz", - "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", - "cpu": [ - "x64" - ], + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.12", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz", - "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=18" + "node": "*" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz", - "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", - "cpu": [ - "x64" - ], + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz", - "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", - "cpu": [ - "arm" - ], + "node_modules/@eslint/core": { + "version": "0.17.0", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz", - "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint/eslintrc": { + "version": "3.3.3", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "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.1", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz", - "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", - "cpu": [ - "ia32" - ], + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "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/@esbuild/linux-loong64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz", - "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", - "cpu": [ - "loong64" - ], + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz", - "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", - "cpu": [ - "mips64el" - ], + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=18" + "node": "*" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz", - "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", - "cpu": [ - "ppc64" - ], + "node_modules/@eslint/js": { + "version": "9.39.1", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz", - "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", - "cpu": [ - "riscv64" - ], + "node_modules/@eslint/object-schema": { + "version": "2.1.7", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz", - "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", - "cpu": [ - "s390x" - ], + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz", - "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", - "cpu": [ - "x64" - ], + "node_modules/@humanfs/core": { + "version": "0.19.1", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": ">=18.18.0" } }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz", - "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", - "cpu": [ - "arm64" - ], + "node_modules/@humanfs/node": { + "version": "0.16.7", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, "engines": { - "node": ">=18" + "node": ">=18.18.0" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz", - "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", - "cpu": [ - "x64" - ], + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, "engines": { - "node": ">=18" + "node": ">=10.10.0" } }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz", - "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", - "cpu": [ - "arm64" - ], + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.12", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz", - "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", - "cpu": [ - "x64" - ], + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=18" + "node": "*" } }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz", - "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", - "cpu": [ - "arm64" - ], + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], + "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz", - "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", - "cpu": [ - "x64" - ], + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } + "license": "BSD-3-Clause", + "peer": true }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz", - "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", - "cpu": [ - "arm64" - ], + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz", - "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", - "cpu": [ - "ia32" - ], + "node_modules/@inquirer/ansi": { + "version": "1.0.2", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz", - "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", - "cpu": [ - "x64" - ], + "node_modules/@inquirer/checkbox": { + "version": "4.3.2", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "node_modules/@inquirer/confirm": { + "version": "5.1.14", "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.4.3" + "@inquirer/core": "^10.1.15", + "@inquirer/type": "^3.0.8" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=18" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "node_modules/@inquirer/core": { + "version": "10.3.2", "dev": true, "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.3" + }, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/@inquirer/editor": { + "version": "4.2.23", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.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" + "@inquirer/core": "^10.3.2", + "@inquirer/external-editor": "^1.0.3", + "@inquirer/type": "^3.0.10" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "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==", + "node_modules/@inquirer/expand": { + "version": "4.0.23", "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" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@eslint/eslintrc/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==", + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "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/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" }, "engines": { - "node": "*" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "node_modules/@inquirer/figures": { + "version": "1.0.15", "dev": true, "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@inquirer/input": { + "version": "4.3.1", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" }, "engines": { - "node": ">=10.10.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@humanwhocodes/config-array/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==", + "node_modules/@inquirer/number": { + "version": "3.0.23", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" }, "engines": { - "node": "*" - } - }, - "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" + "node": ">=18" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@inquirer/checkbox": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.5.0.tgz", - "integrity": "sha512-sMgdETOfi2dUHT8r7TT1BTKOwNvdDGFDXYWtQ2J69SvlYNntk9I/gJe7r5yvMwwsuKnYbuRs3pNhx4tgNck5aA==", + "node_modules/@inquirer/password": { + "version": "4.0.23", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/figures": "^1.0.5", - "@inquirer/type": "^1.5.3", - "ansi-escapes": "^4.3.2", - "yoctocolors-cjs": "^2.1.2" + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@inquirer/confirm": { - "version": "3.1.22", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.22.tgz", - "integrity": "sha512-gsAKIOWBm2Q87CDfs9fEo7wJT3fwWIJfnDGMn9Qy74gBnNFOACDNfhUzovubbJjWnKLGBln7/NcSmZwj5DuEXg==", + "node_modules/@inquirer/prompts": { + "version": "7.8.2", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.0.10", - "@inquirer/type": "^1.5.2" + "@inquirer/checkbox": "^4.2.1", + "@inquirer/confirm": "^5.1.14", + "@inquirer/editor": "^4.2.17", + "@inquirer/expand": "^4.0.17", + "@inquirer/input": "^4.2.1", + "@inquirer/number": "^3.0.17", + "@inquirer/password": "^4.0.17", + "@inquirer/rawlist": "^4.1.5", + "@inquirer/search": "^3.1.0", + "@inquirer/select": "^4.3.1" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@inquirer/core": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz", - "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==", + "node_modules/@inquirer/rawlist": { + "version": "4.1.11", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/figures": "^1.0.6", - "@inquirer/type": "^2.0.0", - "@types/mute-stream": "^0.0.4", - "@types/node": "^22.5.5", - "@types/wrap-ansi": "^3.0.0", - "ansi-escapes": "^4.3.2", - "cli-width": "^4.1.0", - "mute-stream": "^1.0.0", - "signal-exit": "^4.1.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.2" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@inquirer/core/node_modules/@inquirer/type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz", - "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==", + "node_modules/@inquirer/search": { + "version": "3.2.2", "dev": true, "license": "MIT", "dependencies": { - "mute-stream": "^1.0.0" + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { "node": ">=18" - } - }, - "node_modules/@inquirer/core/node_modules/@types/node": { - "version": "22.16.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.16.5.tgz", - "integrity": "sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@inquirer/editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-2.2.0.tgz", - "integrity": "sha512-9KHOpJ+dIL5SZli8lJ6xdaYLPPzB8xB9GZItg39MBybzhxA16vxmszmQFrRwbOA918WA2rvu8xhDEg/p6LXKbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/type": "^1.5.3", - "external-editor": "^3.1.0" }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/expand": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-2.3.0.tgz", - "integrity": "sha512-qnJsUcOGCSG1e5DTOErmv2BPQqrtT6uzqn1vI/aYGiPKq+FgslGZmtdnXbhuI7IlT7OByDoEEqdnhUnVR2hhLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/type": "^1.5.3", - "yoctocolors-cjs": "^2.1.2" + "peerDependencies": { + "@types/node": ">=18" }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/figures": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.13.tgz", - "integrity": "sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@inquirer/input": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.3.0.tgz", - "integrity": "sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==", + "node_modules/@inquirer/select": { + "version": "4.4.2", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/type": "^1.5.3" + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { "node": ">=18" - } - }, - "node_modules/@inquirer/number": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-1.1.0.tgz", - "integrity": "sha512-ilUnia/GZUtfSZy3YEErXLJ2Sljo/mf9fiKc08n18DdwdmDbOzRcTv65H1jjDvlsAuvdFXf4Sa/aL7iw/NanVA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/type": "^1.5.3" }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/password": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-2.2.0.tgz", - "integrity": "sha512-5otqIpgsPYIshqhgtEwSspBQE40etouR8VIxzpJkv9i0dVHIpyhiivbkH9/dGiMLdyamT54YRdGJLfl8TFnLHg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/type": "^1.5.3", - "ansi-escapes": "^4.3.2" + "peerDependencies": { + "@types/node": ">=18" }, - "engines": { - "node": ">=18" + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@inquirer/prompts": { - "version": "5.3.8", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-5.3.8.tgz", - "integrity": "sha512-b2BudQY/Si4Y2a0PdZZL6BeJtl8llgeZa7U2j47aaJSCeAl1e4UI7y8a9bSkO3o/ZbZrgT5muy/34JbsjfIWxA==", + "node_modules/@inquirer/type": { + "version": "3.0.10", "dev": true, "license": "MIT", - "dependencies": { - "@inquirer/checkbox": "^2.4.7", - "@inquirer/confirm": "^3.1.22", - "@inquirer/editor": "^2.1.22", - "@inquirer/expand": "^2.1.22", - "@inquirer/input": "^2.2.9", - "@inquirer/number": "^1.0.10", - "@inquirer/password": "^2.1.22", - "@inquirer/rawlist": "^2.2.4", - "@inquirer/search": "^1.0.7", - "@inquirer/select": "^2.4.7" - }, "engines": { "node": ">=18" - } - }, - "node_modules/@inquirer/rawlist": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-2.3.0.tgz", - "integrity": "sha512-zzfNuINhFF7OLAtGHfhwOW2TlYJyli7lOUoJUXw/uyklcwalV6WRXBXtFIicN8rTRK1XTiPWB4UY+YuW8dsnLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/type": "^1.5.3", - "yoctocolors-cjs": "^2.1.2" }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/search": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-1.1.0.tgz", - "integrity": "sha512-h+/5LSj51dx7hp5xOn4QFnUaKeARwUCLs6mIhtkJ0JYPBLmEYjdHSYh7I6GrLg9LwpJ3xeX0FZgAG1q0QdCpVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/figures": "^1.0.5", - "@inquirer/type": "^1.5.3", - "yoctocolors-cjs": "^2.1.2" + "peerDependencies": { + "@types/node": ">=18" }, - "engines": { - "node": ">=18" + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@inquirer/select": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.5.0.tgz", - "integrity": "sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==", + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", "dev": true, "license": "MIT", - "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/figures": "^1.0.5", - "@inquirer/type": "^1.5.3", - "ansi-escapes": "^4.3.2", - "yoctocolors-cjs": "^2.1.2" - }, "engines": { - "node": ">=18" + "node": "20 || >=22" } }, - "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==", + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", "dev": true, "license": "MIT", "dependencies": { - "mute-stream": "^1.0.0" + "@isaacs/balanced-match": "^4.0.1" }, "engines": { - "node": ">=18" + "node": "20 || >=22" } }, "node_modules/@isaacs/cliui": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "license": "ISC", "dependencies": { @@ -4831,23 +4240,8 @@ "node": ">=12" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "6.2.3", "dev": true, "license": "MIT", "engines": { @@ -4859,8 +4253,6 @@ }, "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": { @@ -4875,26 +4267,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "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/@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": { @@ -4909,10 +4283,19 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "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": { @@ -4920,9 +4303,7 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", - "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "version": "0.3.13", "dev": true, "license": "MIT", "dependencies": { @@ -4932,8 +4313,6 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "license": "MIT", "engines": { @@ -4941,9 +4320,7 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.10.tgz", - "integrity": "sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==", + "version": "0.3.11", "dev": true, "license": "MIT", "dependencies": { @@ -4952,16 +4329,12 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", - "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "version": "1.5.5", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.29", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", - "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "version": "0.3.31", "dev": true, "license": "MIT", "dependencies": { @@ -4971,8 +4344,36 @@ }, "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", + "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", "dev": true, "license": "Apache-2.0", "engines": { @@ -4987,16 +4388,37 @@ } }, "node_modules/@jsonjoy.com/json-pack": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.4.0.tgz", - "integrity": "sha512-Akn8XZqN3xO9YGcgvIiTauBBXTP92QSvw6EcGha+p5nm7brhbwvev5gw4fi+ouLGrBpfPpb72+S5pxl4mkMIGQ==", + "version": "1.21.0", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/base64": "^1.1.1", - "@jsonjoy.com/util": "^1.1.2", + "@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": "^1.20.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", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" }, "engines": { "node": ">=10.0" @@ -5010,11 +4432,13 @@ } }, "node_modules/@jsonjoy.com/util": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.8.0.tgz", - "integrity": "sha512-HeR0JQNEdBozt+FrfyM5T0X3R+fIN0D+BRDkxPP5o41fTWzHfeZEqtK16aTW8haU+h+SG7XYq9PP5kobvOmkSA==", + "version": "1.9.0", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, "engines": { "node": ">=10.0" }, @@ -5027,40 +4451,33 @@ } }, "node_modules/@keyv/serialize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.0.tgz", - "integrity": "sha512-RlDgexML7Z63Q8BSaqhXdCYNBy/JQnqYIwxofUrNLGCblOMHp+xux2Q8nLMLlPpgHQPoU0Do8Z6btCpRBEqZ8g==", + "version": "1.1.1", "dev": true, "license": "MIT", "peer": true }, "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.15", - "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.15.tgz", - "integrity": "sha512-MZrGem/Ujjd4cPTLYDfCZK2iKKeiO/8OX13S6jqxldLs0Prf2aGqVlJ77nMBqMv7fzqgXEgjrNHLXcKR8l9lOg==", + "version": "3.0.1", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/type": "^1.5.1" + "@inquirer/type": "^3.0.7" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "peerDependencies": { - "@inquirer/prompts": ">= 3 < 6" + "@inquirer/prompts": ">= 3 < 8", + "listr2": "9.0.1" } }, "node_modules/@lmdb/lmdb-darwin-arm64": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.0.13.tgz", - "integrity": "sha512-uiKPB0Fv6WEEOZjruu9a6wnW/8jrjzlZbxXscMB8kuCJ1k6kHpcBnuvaAWcqhbI7rqX5GKziwWEdD+wi2gNLfA==", + "version": "3.4.2", "cpu": [ "arm64" ], @@ -5071,38 +4488,44 @@ "darwin" ] }, - "node_modules/@lmdb/lmdb-darwin-x64": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.0.13.tgz", - "integrity": "sha512-bEVIIfK5mSQoG1R19qA+fJOvCB+0wVGGnXHT3smchBVahYBdlPn2OsZZKzlHWfb1E+PhLBmYfqB5zQXFP7hJig==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@lmdb/lmdb-linux-arm": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.0.13.tgz", - "integrity": "sha512-Yml1KlMzOnXj/tnW7yX8U78iAzTk39aILYvCPbqeewAq1kSzl+w59k/fiVkTBfvDi/oW/5YRxL+Fq+Y1Fr1r2Q==", - "cpu": [ - "arm" - ], + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.24.0", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "jose": "^6.1.1", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } }, - "node_modules/@lmdb/lmdb-linux-arm64": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.0.13.tgz", - "integrity": "sha512-afbVrsMgZ9dUTNUchFpj5VkmJRxvht/u335jUJ7o23YTbNbnpmXif3VKQGCtnjSh+CZaqm6N3CPG8KO3zwyZ1Q==", + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.3", "cpu": [ "arm64" ], @@ -5110,41 +4533,43 @@ "license": "MIT", "optional": true, "os": [ - "linux" - ] - }, - "node_modules/@lmdb/lmdb-linux-x64": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.0.13.tgz", - "integrity": "sha512-vOtxu0xC0SLdQ2WRXg8Qgd8T32ak4SPqk5zjItRszrJk2BdeXqfGxBJbP7o4aOvSPSmSSv46Lr1EP4HXU8v7Kg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" + "darwin" ] }, - "node_modules/@lmdb/lmdb-win32-x64": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.0.13.tgz", - "integrity": "sha512-UCrMJQY/gJnOl3XgbWRZZUvGGBuKy6i0YNSptgMzHBjs+QYDYR1Mt/RLTOPy4fzzves65O1EDmlL//OzEqoLlA==", - "cpu": [ - "x64" - ], + "node_modules/@napi-rs/nice": { + "version": "1.1.1", "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==", + "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-darwin-arm64": { + "version": "1.1.1", "cpu": [ "arm64" ], @@ -5153,99 +4578,28 @@ "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/@ngtools/webpack": { - "version": "18.2.20", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.20.tgz", - "integrity": "sha512-6LscOXPMPZlS67aDPj6dkjT/RDySX4GLtk1JErzkUOco6pxsp8qeCzRWqjU63q/8OfZPYLCGIZKfXgXwBP9bgg==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ngtools/webpack": { + "version": "20.3.13", "dev": true, "license": "MIT", "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "peerDependencies": { - "@angular/compiler-cli": "^18.0.0", - "typescript": ">=5.4 <5.6", + "@angular/compiler-cli": "^20.0.0", + "typescript": ">=5.8 <6.0", "webpack": "^5.54.0" } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { @@ -5258,8 +4612,6 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { @@ -5268,8 +4620,6 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { @@ -5281,9 +4631,7 @@ } }, "node_modules/@npmcli/agent": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", - "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "version": "3.0.0", "dev": true, "license": "ISC", "dependencies": { @@ -5294,54 +4642,45 @@ "socks-proxy-agent": "^8.0.3" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "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": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", - "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "version": "4.0.0", "dev": true, "license": "ISC", "dependencies": { "semver": "^7.3.5" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/git": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", - "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", + "version": "6.0.3", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/promise-spawn": "^7.0.0", - "ini": "^4.1.3", + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", "lru-cache": "^10.0.1", - "npm-pick-manifest": "^9.0.0", - "proc-log": "^4.0.0", - "promise-inflight": "^1.0.1", + "npm-pick-manifest": "^10.0.0", + "proc-log": "^5.0.0", "promise-retry": "^2.0.1", "semver": "^7.3.5", - "which": "^4.0.0" + "which": "^5.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "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": { @@ -5350,15 +4689,11 @@ }, "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": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "version": "5.0.0", "dev": true, "license": "ISC", "dependencies": { @@ -5368,59 +4703,51 @@ "node-which": "bin/which.js" }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/installed-package-contents": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", - "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", + "version": "3.0.0", "dev": true, "license": "ISC", "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" }, "bin": { "installed-package-contents": "bin/index.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "version": "4.0.0", "dev": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/package-json": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.1.tgz", - "integrity": "sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ==", + "version": "6.2.0", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^5.0.0", + "@npmcli/git": "^6.0.0", "glob": "^10.2.2", - "hosted-git-info": "^7.0.0", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "proc-log": "^4.0.0", - "semver": "^7.5.3" + "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": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.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==", + "version": "10.5.0", "dev": true, "license": "ISC", "dependencies": { @@ -5438,23 +4765,35 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@npmcli/package-json/node_modules/hosted-git-info": { + "version": "8.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/lru-cache": { + "version": "10.4.3", + "dev": true, + "license": "ISC" + }, "node_modules/@npmcli/promise-spawn": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", - "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", + "version": "8.0.3", "dev": true, "license": "ISC", "dependencies": { - "which": "^4.0.0" + "which": "^5.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "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": { @@ -5462,9 +4801,7 @@ } }, "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "version": "5.0.0", "dev": true, "license": "ISC", "dependencies": { @@ -5474,41 +4811,35 @@ "node-which": "bin/which.js" }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/redact": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz", - "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==", + "version": "3.2.2", "dev": true, "license": "ISC", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/run-script": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz", - "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==", + "version": "9.1.0", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.0.0", - "@npmcli/promise-spawn": "^7.0.0", - "node-gyp": "^10.0.0", - "proc-log": "^4.0.0", - "which": "^4.0.0" + "@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": "^16.14.0 || >=18.0.0" + "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": { @@ -5516,9 +4847,7 @@ } }, "node_modules/@npmcli/run-script/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "version": "5.0.0", "dev": true, "license": "ISC", "dependencies": { @@ -5528,13 +4857,83 @@ "node-which": "bin/which.js" }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "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-darwin-arm64": { + "version": "2.5.1", + "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/node_modules/detect-libc": { + "version": "1.0.3", + "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", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/@pega/auth": { - "version": "0.2.28", - "resolved": "https://registry.npmjs.org/@pega/auth/-/auth-0.2.28.tgz", - "integrity": "sha512-H3wsZjQp/9reClNaPWurN/Qr1rEn6mfVk1PnGwXDgEtbKY2kADR4bqMwqVOvBpkOsE6up1ivfC9CaWvjY4DuYg==", + "version": "0.2.34", "license": "Apache-2.0", "dependencies": { "node-fetch": "^3.3.2", @@ -5543,8 +4942,6 @@ }, "node_modules/@pega/commitlint-config": { "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@pega/commitlint-config/-/commitlint-config-0.16.3.tgz", - "integrity": "sha512-SpNeSk2y3/uNW2/f+2JXOoBwQk55LYlMCt7Y01zzkKvTGyFH5KxK4kG0HboZV1/fTrwQn7g0u7sg+19lNWG3vA==", "dev": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { @@ -5555,10 +4952,20 @@ "@commitlint/cli": ">=19.0.0" } }, + "node_modules/@pega/commitlint-config/node_modules/@commitlint/types": { + "version": "19.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/conventional-commits-parser": "^5.0.0", + "chalk": "^5.3.0" + }, + "engines": { + "node": ">=v18" + } + }, "node_modules/@pega/commitlint-plugin": { "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@pega/commitlint-plugin/-/commitlint-plugin-0.16.3.tgz", - "integrity": "sha512-DZO1NKRCzz4vMVYGL+2Bd1+XrWUn6FqCU2sx7UChHKNe27FH5USO68R+zovadzKWluyxZ4rlG0UBwXQt0AMz6w==", "dev": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { @@ -5569,10 +4976,20 @@ "cspell": ">=5.6.0" } }, + "node_modules/@pega/commitlint-plugin/node_modules/@commitlint/types": { + "version": "19.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/conventional-commits-parser": "^5.0.0", + "chalk": "^5.3.0" + }, + "engines": { + "node": ">=v18" + } + }, "node_modules/@pega/configs": { "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@pega/configs/-/configs-0.16.3.tgz", - "integrity": "sha512-ZoAdRgdHdEN5pvpOwMiuEfq6Fo2hIUvL/e3pvBhs68stQm0KwncZWKEPA/GkKsxC/AGkUTGhHjg/cw7BXkQUdA==", "dev": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { @@ -5597,30 +5014,52 @@ "postcss-styled-syntax": "^0.6.4" } }, - "node_modules/@pega/constellationjs": { - "version": "24.2.2", - "resolved": "https://registry.npmjs.org/@pega/constellationjs/-/constellationjs-24.2.2.tgz", - "integrity": "sha512-TJB8eKrIs40t2CsO5D+qBGr5ByoYXnBGbNQPAVnSFiCyWdMF8NspW5PMos8ttYEI3yzfaYSmyvDWVU4ucd4Vbg==", + "node_modules/@pega/configs/node_modules/@eslint/eslintrc": { + "version": "2.1.4", "dev": true, - "license": "See LICENSE in LICENSE file or 'ConstellationJS Engine License.pdf' in dist/", + "license": "MIT", + "peer": true, "dependencies": { - "fs-extra": "^11.2.0" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.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": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@pega/cspell-config": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@pega/cspell-config/-/cspell-config-0.16.3.tgz", - "integrity": "sha512-EgYoN+O9wvN+URV+RWb2pwgC1MUSHAhi17d4t+YPzl0XcKA2MBHQMt56PLjKOOP6VBcRqGe3mFF/FPl4YwarJg==", + "node_modules/@pega/configs/node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "license": "SEE LICENSE IN LICENSE", - "peerDependencies": { - "cspell": ">=5.6.0" + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@pega/configs/node_modules/@eslint/js": { + "version": "8.57.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@pega/eslint-config": { + "node_modules/@pega/configs/node_modules/@pega/eslint-config": { "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@pega/eslint-config/-/eslint-config-0.16.3.tgz", - "integrity": "sha512-7k8p2C9LA6qYqlCVo49k2CuERCEsFD+LK+sh0XYMFYtQH22fI5ePLWgA3/wi/5frhE19s/rVV0/5RPLzRGMrrQ==", "dev": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { @@ -5643,383 +5082,921 @@ "eslint-plugin-testing-library": "^5.10.2" } }, - "node_modules/@pega/pcore-pconnect-typedefs": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@pega/pcore-pconnect-typedefs/-/pcore-pconnect-typedefs-3.2.2.tgz", - "integrity": "sha512-3Z+Tq5NZqhK+xPFWNPtr9NbcK63YkOLHeUgAjXOp8ugrA/xmyGpvaMbHK2jwGY0/d5T4Cv9mi34vojA/Slw0Ew==", - "dev": true, - "license": "See LICENSE in LICENSE file" - }, - "node_modules/@pega/prettier-config": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@pega/prettier-config/-/prettier-config-0.16.3.tgz", - "integrity": "sha512-Be+2DHGrmBpifor/7JFuifVX630XxaM7v6yqUo5kSvIwrOvZ5D1BUbaDrkh0Dg6l4BHpQ5Z4eTxpUnwyE9NMNQ==", + "node_modules/@pega/configs/node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.18.0", "dev": true, - "license": "SEE LICENSE IN LICENSE", + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, "peerDependencies": { - "@prettier/plugin-xml": "^3.4.1", - "prettier": ">=3.0.0" + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@pega/stylelint-config": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@pega/stylelint-config/-/stylelint-config-0.16.3.tgz", - "integrity": "sha512-RZK9N3W/IFCgeeFSdA35bbgzge0TMGGrb3R0/QOjurF5YgX5eiM9FVt2VcD3G5iDgYGVYN6yBq3vatW7WtBcfQ==", + "node_modules/@pega/configs/node_modules/@typescript-eslint/parser": { + "version": "7.18.0", "dev": true, - "license": "SEE LICENSE IN LICENSE", - "peerDependencies": { - "postcss-html": "^1.5.0", - "postcss-styled-syntax": "^0.6.4", - "stylelint": ">=13.0.0" - } - }, - "node_modules/@pega/tsconfig": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@pega/tsconfig/-/tsconfig-0.16.3.tgz", - "integrity": "sha512-xXKB536F20IEQH8pgci+VM62DNuLcyiY2jdVnno/2Mfa5vh3AVBq2wMKI8Ydl7Aqcd7rD/IfV1ekvUCqM/3DEA==", - "dev": true, - "license": "SEE LICENSE IN LICENSE", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, "peerDependencies": { - "typescript": ">=5.5.2" + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "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==", + "node_modules/@pega/configs/node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", "dev": true, "license": "MIT", - "optional": true, + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, "engines": { - "node": ">=14" + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@playwright/test": { - "version": "1.54.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.54.1.tgz", - "integrity": "sha512-FS8hQ12acieG2dYSksmLOF7BNxnVf2afRJdCuM1eMSxj6QTSE6G4InGF7oApGgDb65MX7AwMVlIkpru0yZA4Xw==", + "node_modules/@pega/configs/node_modules/@typescript-eslint/type-utils": { + "version": "7.18.0", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "playwright": "1.54.1" - }, - "bin": { - "playwright": "cli.js" + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": ">=18" + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@prettier/plugin-xml": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@prettier/plugin-xml/-/plugin-xml-3.4.2.tgz", - "integrity": "sha512-/UyNlHfkuLXG6Ed85KB0WBF283xn2yavR+UtRibBRUcvEJId2DSLdGXwJ/cDa1X++SWDPzq3+GSFniHjkNy7yg==", + "node_modules/@pega/configs/node_modules/@typescript-eslint/types": { + "version": "7.18.0", "dev": true, "license": "MIT", - "dependencies": { - "@xml-tools/parser": "^1.0.11" + "engines": { + "node": "^18.18.0 || >=20.0.0" }, - "peerDependencies": { - "prettier": "^3.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@rollup/plugin-json": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", - "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", + "node_modules/@pega/configs/node_modules/@typescript-eslint/typescript-estree": { + "version": "7.18.0", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "@rollup/pluginutils": "^5.1.0" + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": ">=14.0.0" + "node": "^18.18.0 || >=20.0.0" }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependenciesMeta": { - "rollup": { + "typescript": { "optional": true } } }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", - "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", + "node_modules/@pega/configs/node_modules/@typescript-eslint/utils": { + "version": "7.18.0", "dev": true, "license": "MIT", "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.22.1" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" }, "engines": { - "node": ">=14.0.0" + "node": "^18.18.0 || >=20.0.0" }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0||^4.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "peerDependencies": { + "eslint": "^8.56.0" } }, - "node_modules/@rollup/pluginutils": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.2.0.tgz", - "integrity": "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==", + "node_modules/@pega/configs/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + "node": "^18.18.0 || >=20.0.0" }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", - "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", - "cpu": [ - "arm" - ], + "node_modules/@pega/configs/node_modules/ajv": { + "version": "6.12.6", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ] + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz", - "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==", - "cpu": [ - "arm64" - ], + "node_modules/@pega/configs/node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ] + "peer": true, + "engines": { + "node": ">=8" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", - "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", - "cpu": [ - "arm64" - ], + "node_modules/@pega/configs/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz", - "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==", - "cpu": [ - "x64" - ], + "node_modules/@pega/configs/node_modules/brace-expansion": { + "version": "1.1.12", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", - "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", - "cpu": [ - "arm" - ], + "node_modules/@pega/configs/node_modules/chalk": { + "version": "4.1.2", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "peer": true, + "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/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", - "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", - "cpu": [ - "arm" - ], + "node_modules/@pega/configs/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz", - "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==", - "cpu": [ - "arm64" - ], + "node_modules/@pega/configs/node_modules/color-name": { + "version": "1.1.4", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "peer": true }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz", - "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==", - "cpu": [ - "arm64" - ], + "node_modules/@pega/configs/node_modules/doctrine": { + "version": "3.0.0", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz", - "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==", - "cpu": [ - "ppc64" - ], + "node_modules/@pega/configs/node_modules/eslint": { + "version": "8.57.1", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@pega/configs/node_modules/eslint-config-airbnb": { + "version": "19.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-config-airbnb-base": "^15.0.0", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5" + }, + "engines": { + "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.28.0", + "eslint-plugin-react-hooks": "^4.3.0" + } + }, + "node_modules/@pega/configs/node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" + } + }, + "node_modules/@pega/configs/node_modules/eslint-config-airbnb-base/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@pega/configs/node_modules/eslint-config-airbnb-typescript": { + "version": "18.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-config-airbnb-base": "^15.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^7.0.0", + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + } + }, + "node_modules/@pega/configs/node_modules/eslint-plugin-jest": { + "version": "28.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "engines": { + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0 || ^8.0.0", + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0", + "jest": "*" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/@pega/configs/node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/@pega/configs/node_modules/eslint-plugin-sonarjs": { + "version": "0.18.0", + "dev": true, + "license": "LGPL-3.0", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@pega/configs/node_modules/eslint-plugin-testing-library": { + "version": "5.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^5.58.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" + }, + "peerDependencies": { + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/@pega/configs/node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@pega/configs/node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@pega/configs/node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@pega/configs/node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@pega/configs/node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@pega/configs/node_modules/eslint-plugin-testing-library/node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@pega/configs/node_modules/eslint-plugin-testing-library/node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@pega/configs/node_modules/eslint-scope": { + "version": "7.2.2", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@pega/configs/node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@pega/configs/node_modules/espree": { + "version": "9.6.1", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@pega/configs/node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@pega/configs/node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", - "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", - "cpu": [ - "riscv64" - ], + "node_modules/@pega/configs/node_modules/flat-cache": { + "version": "3.2.0", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "peer": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", - "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", - "cpu": [ - "s390x" - ], + "node_modules/@pega/configs/node_modules/globals": { + "version": "13.24.0", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", - "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", - "cpu": [ - "x64" - ], + "node_modules/@pega/configs/node_modules/json-schema-traverse": { + "version": "0.4.1", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "peer": true }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", - "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", - "cpu": [ - "x64" - ], + "node_modules/@pega/configs/node_modules/locate-path": { + "version": "6.0.0", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "peer": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", - "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", - "cpu": [ - "arm64" - ], + "node_modules/@pega/configs/node_modules/p-limit": { + "version": "3.1.0", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "peer": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", - "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", - "cpu": [ - "ia32" - ], + "node_modules/@pega/configs/node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pega/configs/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@pega/configs/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@pega/configs/node_modules/ts-api-utils": { + "version": "1.4.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/@pega/configs/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/@pega/configs/node_modules/tsutils": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/@pega/configs/node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pega/constellationjs": { + "version": "25.1.1", + "dev": true, + "license": "See LICENSE in LICENSE file or 'ConstellationJS Engine License.pdf' in dist/", + "dependencies": { + "fs-extra": "^11.2.0" + } + }, + "node_modules/@pega/cspell-config": { + "version": "0.16.3", + "dev": true, + "license": "SEE LICENSE IN LICENSE", + "peerDependencies": { + "cspell": ">=5.6.0" + } + }, + "node_modules/@pega/pcore-pconnect-typedefs": { + "version": "4.1.0", + "dev": true, + "license": "See LICENSE in LICENSE file" + }, + "node_modules/@pega/prettier-config": { + "version": "0.16.3", + "dev": true, + "license": "SEE LICENSE IN LICENSE", + "peerDependencies": { + "@prettier/plugin-xml": "^3.4.1", + "prettier": ">=3.0.0" + } + }, + "node_modules/@pega/stylelint-config": { + "version": "0.16.3", + "dev": true, + "license": "SEE LICENSE IN LICENSE", + "peerDependencies": { + "postcss-html": "^1.5.0", + "postcss-styled-syntax": "^0.6.4", + "stylelint": ">=13.0.0" + } + }, + "node_modules/@pega/tsconfig": { + "version": "0.16.3", + "dev": true, + "license": "SEE LICENSE IN LICENSE", + "peerDependencies": { + "typescript": ">=5.5.2" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", "dev": true, "license": "MIT", "optional": true, - "os": [ - "win32" - ] + "engines": { + "node": ">=14" + } + }, + "node_modules/@playwright/test": { + "version": "1.57.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.57.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@prettier/plugin-xml": { + "version": "3.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@xml-tools/parser": "^1.0.11" + }, + "peerDependencies": { + "prettier": "^3.0.0" + } + }, + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", - "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.52.3", "cpu": [ - "x64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "darwin" ] }, "node_modules/@rollup/wasm-node": { - "version": "4.46.1", - "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.46.1.tgz", - "integrity": "sha512-3vOhhqH3c3YJoIvyHsAOqdnH8KOl+LhvVjyfzd/BI1RvhnfA3RMRCporxlQCriUtEoA1JzCok1UWDrMqj5nejQ==", + "version": "4.53.3", "dev": true, "license": "MIT", "dependencies": { @@ -6038,55 +6015,45 @@ }, "node_modules/@rtsao/scc": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", "dev": true, "license": "MIT" }, "node_modules/@schematics/angular": { - "version": "18.2.20", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.20.tgz", - "integrity": "sha512-32bJycGtePm8X994hGl9PChBVgw9bbc+ehDpxeeaIZzcFHWlM06+cJu8Jr2FA8SASg3TwdnEybxFiYS14884OQ==", + "version": "20.3.13", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.20", - "@angular-devkit/schematics": "18.2.20", + "@angular-devkit/core": "20.3.13", + "@angular-devkit/schematics": "20.3.13", "jsonc-parser": "3.3.1" }, "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@sigstore/bundle": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", - "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", + "version": "3.1.0", "dev": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2" + "@sigstore/protobuf-specs": "^0.4.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@sigstore/core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", - "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", + "version": "2.0.0", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@sigstore/protobuf-specs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.3.tgz", - "integrity": "sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ==", + "version": "0.4.3", "dev": true, "license": "Apache-2.0", "engines": { @@ -6094,76 +6061,53 @@ } }, "node_modules/@sigstore/sign": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", - "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", + "version": "3.1.0", "dev": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "make-fetch-happen": "^13.0.1", - "proc-log": "^4.2.0", + "@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": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@sigstore/tuf": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", - "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", + "version": "3.1.1", "dev": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2", - "tuf-js": "^2.2.1" + "@sigstore/protobuf-specs": "^0.4.1", + "tuf-js": "^3.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@sigstore/verify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", - "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", + "version": "2.1.1", "dev": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.1.0", - "@sigstore/protobuf-specs": "^0.3.2" + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "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": "^18.17.0 || >=20.5.0" } }, "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/@storybook/csf": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz", - "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==", "dev": true, "license": "MIT", "dependencies": { @@ -6172,8 +6116,6 @@ }, "node_modules/@tinymce/tinymce-angular": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@tinymce/tinymce-angular/-/tinymce-angular-8.0.1.tgz", - "integrity": "sha512-m0/ne5nL00YeZ7wCyhBVwKUbvS8fQZ+S+T5pinqTIqTUKpcfIC2+BIKqzUpS+niiRCowFoZl5eVlI5zdFN9/0A==", "license": "MIT", "dependencies": { "tinymce": "^7.0.0 || ^6.0.0 || ^5.5.0", @@ -6187,37 +6129,27 @@ } }, "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "version": "1.0.12", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true, "license": "MIT" }, "node_modules/@tufjs/canonical-json": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", - "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", "dev": true, "license": "MIT", "engines": { @@ -6225,23 +6157,19 @@ } }, "node_modules/@tufjs/models": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", - "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", + "version": "3.0.1", "dev": true, "license": "MIT", "dependencies": { "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.4" + "minimatch": "^9.0.5" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@types/body-parser": { "version": "1.19.6", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", - "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", "dev": true, "license": "MIT", "dependencies": { @@ -6251,8 +6179,6 @@ }, "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": { @@ -6261,8 +6187,6 @@ }, "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": { @@ -6271,8 +6195,6 @@ }, "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": { @@ -6281,9 +6203,7 @@ } }, "node_modules/@types/conventional-commits-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz", - "integrity": "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==", + "version": "5.0.2", "dev": true, "license": "MIT", "dependencies": { @@ -6292,8 +6212,6 @@ }, "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": { @@ -6302,8 +6220,6 @@ }, "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": { @@ -6313,8 +6229,6 @@ }, "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": { @@ -6324,28 +6238,22 @@ }, "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.23", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", - "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", + "version": "4.17.25", "dev": true, "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", - "@types/serve-static": "*" + "@types/serve-static": "^1" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "version": "4.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -6355,17 +6263,17 @@ "@types/send": "*" } }, + "node_modules/@types/google.maps": { + "version": "3.58.1", + "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.16", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", - "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", + "version": "1.17.17", "dev": true, "license": "MIT", "dependencies": { @@ -6373,16 +6281,12 @@ } }, "node_modules/@types/jasmine": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.8.tgz", - "integrity": "sha512-u7/CnvRdh6AaaIzYjCgUuVbREFgulhX05Qtf6ZtW+aOcjCKKVvKgpkPYJBFTZSHtFBYimzU4zP0V2vrEsq9Wcg==", + "version": "5.1.13", "dev": true, "license": "MIT" }, "node_modules/@types/jasminewd2": { "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.13.tgz", - "integrity": "sha512-aJ3wj8tXMpBrzQ5ghIaqMisD8C3FIrcO6sDKHqFbuqAsI7yOxj0fA7MrRCPLZHIVUjERIwsMmGn/vB0UQ9u0Hg==", "dev": true, "license": "MIT", "dependencies": { @@ -6391,39 +6295,21 @@ }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, "node_modules/@types/json5": { "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "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/mute-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", - "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/node": { - "version": "20.19.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.9.tgz", - "integrity": "sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==", + "version": "20.19.25", "dev": true, "license": "MIT", "dependencies": { @@ -6431,9 +6317,7 @@ } }, "node_modules/@types/node-forge": { - "version": "1.3.13", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.13.tgz", - "integrity": "sha512-zePQJSW5QkwSHKRApqWCVKeKoSOt4xvEnLENZPjyvm9Ezdf/EyDeJM7jqLzOwjVICQQzvLZ63T55MKdJB5H6ww==", + "version": "1.3.14", "dev": true, "license": "MIT", "dependencies": { @@ -6442,54 +6326,34 @@ }, "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/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", "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/semver": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz", - "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==", + "version": "7.7.1", "dev": true, "license": "MIT" }, "node_modules/@types/send": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", - "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "version": "1.2.1", "dev": true, "license": "MIT", "dependencies": { - "@types/mime": "^1", "@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": { @@ -6497,38 +6361,34 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", - "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", + "version": "1.15.10", "dev": true, "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/node": "*", - "@types/send": "*" + "@types/send": "<1" } }, - "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==", + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", "dev": true, "license": "MIT", "dependencies": { + "@types/mime": "^1", "@types/node": "*" } }, - "node_modules/@types/wrap-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", - "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", + "node_modules/@types/sockjs": { + "version": "0.3.36", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/ws": { "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "dev": true, "license": "MIT", "dependencies": { @@ -6536,128 +6396,50 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "version": "8.48.1", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/scope-manager": "8.48.1", + "@typescript-eslint/type-utils": "8.48.1", + "@typescript-eslint/utils": "8.48.1", + "@typescript-eslint/visitor-keys": "8.48.1", "graphemer": "^1.4.0", - "ignore": "^5.3.1", + "ignore": "^7.0.0", "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "@typescript-eslint/parser": "^8.48.1", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", "dev": true, "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" - }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" + "node": ">= 4" } }, "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz", - "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==", + "version": "8.48.1", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.38.0", - "@typescript-eslint/types": "^8.38.0", + "@typescript-eslint/scope-manager": "8.48.1", + "@typescript-eslint/types": "8.48.1", + "@typescript-eslint/typescript-estree": "8.48.1", + "@typescript-eslint/visitor-keys": "8.48.1", "debug": "^4.3.4" }, "engines": { @@ -6668,191 +6450,71 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz", - "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==", - "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 <5.9.0" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "node_modules/@typescript-eslint/project-service": { + "version": "8.48.1", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "@typescript-eslint/tsconfig-utils": "^8.48.1", + "@typescript-eslint/types": "^8.48.1", + "debug": "^4.3.4" }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", - "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", - "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/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.48.1", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "@typescript-eslint/types": "8.48.1", + "@typescript-eslint/visitor-keys": "8.48.1" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.48.1", "dev": true, "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "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/utils": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz", - "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==", + "node_modules/@typescript-eslint/type-utils": { + "version": "8.48.1", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.38.0", - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0" + "@typescript-eslint/types": "8.48.1", + "@typescript-eslint/typescript-estree": "8.48.1", + "@typescript-eslint/utils": "8.48.1", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6863,19 +6525,13 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz", - "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==", + "node_modules/@typescript-eslint/types": { + "version": "8.48.1", "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0" - }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -6884,22 +6540,19 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz", - "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.48.1", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.38.0", - "@typescript-eslint/tsconfig-utils": "8.38.0", - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0", + "@typescript-eslint/project-service": "8.48.1", + "@typescript-eslint/tsconfig-utils": "8.48.1", + "@typescript-eslint/types": "8.48.1", + "@typescript-eslint/visitor-keys": "8.48.1", "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", + "tinyglobby": "^0.2.15", "ts-api-utils": "^2.1.0" }, "engines": { @@ -6910,109 +6563,92 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz", - "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/tinyglobby": { + "version": "0.2.15", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.38.0", - "eslint-visitor-keys": "^4.2.1" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=12.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/@typescript-eslint/utils/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==", + "node_modules/@typescript-eslint/utils": { + "version": "8.48.1", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.48.1", + "@typescript-eslint/types": "8.48.1", + "@typescript-eslint/typescript-estree": "8.48.1" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@typescript-eslint/utils/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" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "version": "8.48.1", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "8.48.1", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.1", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/eslint" } }, "node_modules/@ungap/structured-clone": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", "dev": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/@vitejs/plugin-basic-ssl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", - "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", + "version": "2.1.0", "dev": true, "license": "MIT", "engines": { - "node": ">=14.6.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + "vite": "^6.0.0 || ^7.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": { @@ -7022,29 +6658,21 @@ }, "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": { @@ -7055,15 +6683,11 @@ }, "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": { @@ -7075,8 +6699,6 @@ }, "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": { @@ -7085,8 +6707,6 @@ }, "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": { @@ -7095,15 +6715,11 @@ }, "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": { @@ -7119,8 +6735,6 @@ }, "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": { @@ -7133,8 +6747,6 @@ }, "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": { @@ -7146,8 +6758,6 @@ }, "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": { @@ -7161,8 +6771,6 @@ }, "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": { @@ -7172,8 +6780,6 @@ }, "node_modules/@xml-tools/parser": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@xml-tools/parser/-/parser-1.0.11.tgz", - "integrity": "sha512-aKqQ077XnR+oQtHJlrAflaZaL7qZsulWc/i/ZEooar5JiWj1eLt0+Wg28cpa+XLney107wXqneC+oG1IZvxkTA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -7182,63 +6788,41 @@ }, "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": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "version": "3.0.1", "dev": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "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==", + "version": "2.0.0", "dev": true, "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" }, "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": { @@ -7248,20 +6832,8 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^8" - } - }, "node_modules/acorn-import-phases": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", - "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", "dev": true, "license": "MIT", "engines": { @@ -7273,8 +6845,6 @@ }, "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": { @@ -7283,8 +6853,6 @@ }, "node_modules/acorn-walk": { "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, "license": "MIT", "dependencies": { @@ -7296,8 +6864,6 @@ }, "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": { @@ -7310,8 +6876,6 @@ }, "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": { @@ -7325,32 +6889,14 @@ }, "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/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ajv": { "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", "dependencies": { @@ -7366,8 +6912,6 @@ }, "node_modules/ajv-formats": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7384,8 +6928,6 @@ }, "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": { @@ -7395,10 +6937,32 @@ "ajv": "^8.8.2" } }, + "node_modules/algoliasearch": { + "version": "5.35.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.1.0", + "@algolia/client-abtesting": "5.35.0", + "@algolia/client-analytics": "5.35.0", + "@algolia/client-common": "5.35.0", + "@algolia/client-insights": "5.35.0", + "@algolia/client-personalization": "5.35.0", + "@algolia/client-query-suggestions": "5.35.0", + "@algolia/client-search": "5.35.0", + "@algolia/ingestion": "1.35.0", + "@algolia/monitoring": "1.35.0", + "@algolia/recommend": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, "node_modules/ansi-colors": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, "license": "MIT", "engines": { @@ -7406,16 +6970,14 @@ } }, "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "version": "7.2.0", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" + "environment": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -7423,8 +6985,6 @@ }, "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" @@ -7435,19 +6995,18 @@ } }, "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==", + "version": "6.2.2", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "license": "MIT", "dependencies": { @@ -7459,8 +7018,6 @@ }, "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": { @@ -7473,8 +7030,6 @@ }, "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": { @@ -7486,8 +7041,6 @@ }, "node_modules/app-root-path": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", - "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", "dev": true, "license": "MIT", "engines": { @@ -7496,22 +7049,16 @@ }, "node_modules/arg": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true, "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/aria-query": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -7520,8 +7067,6 @@ }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "dependencies": { @@ -7537,23 +7082,17 @@ }, "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", "peer": true }, "node_modules/array-includes": { "version": "3.1.9", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7575,16 +7114,12 @@ }, "node_modules/array-timsort": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", - "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", "dev": true, "license": "MIT", "peer": true }, "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==", "dev": true, "license": "MIT", "engines": { @@ -7593,8 +7128,6 @@ }, "node_modules/array.prototype.findlast": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7614,8 +7147,6 @@ }, "node_modules/array.prototype.findlastindex": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", - "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7636,8 +7167,6 @@ }, "node_modules/array.prototype.flat": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "license": "MIT", "dependencies": { @@ -7655,8 +7184,6 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "license": "MIT", "dependencies": { @@ -7674,8 +7201,6 @@ }, "node_modules/array.prototype.tosorted": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "license": "MIT", "dependencies": { @@ -7691,8 +7216,6 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7713,15 +7236,11 @@ }, "node_modules/ast-types-flow": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true, "license": "MIT" }, "node_modules/astral-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, "license": "MIT", "peer": true, @@ -7731,8 +7250,6 @@ }, "node_modules/async-function": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, "license": "MIT", "engines": { @@ -7740,9 +7257,7 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "version": "10.4.21", "dev": true, "funding": [ { @@ -7760,11 +7275,11 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", + "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "bin": { @@ -7779,8 +7294,6 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7794,9 +7307,7 @@ } }, "node_modules/axe-core": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", - "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "version": "4.11.0", "dev": true, "license": "MPL-2.0", "engines": { @@ -7805,8 +7316,6 @@ }, "node_modules/axobject-query": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -7814,27 +7323,98 @@ } }, "node_modules/babel-loader": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", - "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "version": "10.0.0", "dev": true, "license": "MIT", "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" + "find-up": "^5.0.0" }, "engines": { - "node": ">= 14.15.0" + "node": "^18.20.0 || ^20.10.0 || >=22.0.0" }, "peerDependencies": { "@babel/core": "^7.12.0", - "webpack": ">=5" + "webpack": ">=5.61.0" + } + }, + "node_modules/babel-loader/node_modules/find-up": { + "version": "5.0.0", + "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/babel-loader/node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "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": { @@ -7848,8 +7428,6 @@ }, "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": { @@ -7857,14 +7435,12 @@ } }, "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==", + "version": "0.13.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3", - "core-js-compat": "^3.40.0" + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -7872,8 +7448,6 @@ }, "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": { @@ -7885,15 +7459,11 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, "funding": [ { @@ -7913,25 +7483,45 @@ }, "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.9.0", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, "node_modules/batch": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true, "license": "MIT" }, + "node_modules/beasties": { + "version": "0.3.5", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "css-select": "^6.0.0", + "css-what": "^7.0.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "htmlparser2": "^10.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.49", + "postcss-media-query-parser": "^0.2.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/big.js": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, "license": "MIT", "engines": { @@ -7940,88 +7530,49 @@ }, "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==", - "dev": true, - "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": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/bl": { + "version": "1.2.3", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" } }, - "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==", + "node_modules/body-parser": { + "version": "2.2.1", "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "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": { @@ -8031,15 +7582,11 @@ }, "node_modules/boolbase": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true, "license": "ISC" }, "node_modules/brace-expansion": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8048,8 +7595,6 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", "dependencies": { @@ -8061,8 +7606,6 @@ }, "node_modules/brotli": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", - "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", "dev": true, "license": "MIT", "dependencies": { @@ -8070,9 +7613,7 @@ } }, "node_modules/browserslist": { - "version": "4.25.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", - "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "version": "4.28.1", "dev": true, "funding": [ { @@ -8090,10 +7631,11 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001726", - "electron-to-chromium": "^1.5.173", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -8102,35 +7644,8 @@ "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==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "node_modules/buffer-alloc": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, "license": "MIT", "dependencies": { @@ -8140,15 +7655,11 @@ }, "node_modules/buffer-alloc-unsafe": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", "dev": true, "license": "MIT" }, "node_modules/buffer-crc32": { "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, "license": "MIT", "engines": { @@ -8157,33 +7668,27 @@ }, "node_modules/buffer-fill": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", "dev": true, "license": "MIT" }, "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/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", + "version": "3.3.0", "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "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==", "license": "MIT", "dependencies": { "run-applescript": "^7.0.0" @@ -8197,8 +7702,6 @@ }, "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": { @@ -8206,13 +7709,11 @@ } }, "node_modules/cacache": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", - "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "version": "19.0.1", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/fs": "^3.1.0", + "@npmcli/fs": "^4.0.0", "fs-minipass": "^3.0.0", "glob": "^10.2.2", "lru-cache": "^10.0.1", @@ -8220,19 +7721,25 @@ "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/cacache/node_modules/chownr": { + "version": "3.0.0", + "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==", + "version": "10.5.0", "dev": true, "license": "ISC", "dependencies": { @@ -8252,38 +7759,56 @@ }, "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/tar": { + "version": "7.5.2", + "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", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, "node_modules/cacheable": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.10.3.tgz", - "integrity": "sha512-M6p10iJ/VT0wT7TLIGUnm958oVrU2cUK8pQAVU21Zu7h8rbk/PeRtRWrvHJBql97Bhzk3g1N6+2VKC+Rjxna9Q==", + "version": "2.3.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "hookified": "^1.10.0", - "keyv": "^5.4.0" + "@cacheable/memory": "^2.0.6", + "@cacheable/utils": "^2.3.2", + "hookified": "^1.13.0", + "keyv": "^5.5.4", + "qified": "^0.5.2" } }, "node_modules/cacheable/node_modules/keyv": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.4.0.tgz", - "integrity": "sha512-TMckyVjEoacG5IteUpUrOBsFORtheqziVyyY2dLUwg1jwTb8u48LX4TgmtogkNl9Y9unaEJ1luj10fGyjMGFOQ==", + "version": "5.5.5", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@keyv/serialize": "^1.1.0" + "@keyv/serialize": "^1.1.1" } }, "node_modules/call-bind": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", "dependencies": { @@ -8301,8 +7826,6 @@ }, "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": { @@ -8315,8 +7838,6 @@ }, "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": { @@ -8332,8 +7853,6 @@ }, "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": { @@ -8341,9 +7860,7 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001727", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", - "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", + "version": "1.0.30001759", "dev": true, "funding": [ { @@ -8362,9 +7879,7 @@ "license": "CC-BY-4.0" }, "node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "version": "5.6.2", "dev": true, "license": "MIT", "engines": { @@ -8375,9 +7890,7 @@ } }, "node_modules/chalk-template": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.0.tgz", - "integrity": "sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==", + "version": "1.1.2", "dev": true, "license": "MIT", "peer": true, @@ -8392,16 +7905,12 @@ } }, "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "version": "2.1.1", "dev": true, "license": "MIT" }, "node_modules/chevrotain": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-7.1.1.tgz", - "integrity": "sha512-wy3mC1x4ye+O+QkEinVJkPf5u2vsrDIYW9G7ZuwFl6v/Yu0LwUuT2POsb+NUWApebyxfkQq6+yDfRExbnI5rcw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -8409,47 +7918,21 @@ } }, "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "version": "4.0.3", "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" + "readdirp": "^4.0.1" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 14.16.0" }, "funding": { "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" } }, "node_modules/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": { @@ -8458,28 +7941,14 @@ }, "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/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/clear-module": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/clear-module/-/clear-module-4.1.2.tgz", - "integrity": "sha512-LWAxzHqdHsAZlPlEyJ2Poz6AIs384mPeqLVCru2p0BrP9G/kVGuhNyZYClLO6cXlnuJjzC8xtsJIuMjKqLXoAw==", "dev": true, "license": "MIT", "peer": true, @@ -8496,8 +7965,6 @@ }, "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": { @@ -8512,8 +7979,6 @@ }, "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==", "dev": true, "license": "MIT", "engines": { @@ -8525,8 +7990,6 @@ }, "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": { @@ -8542,8 +8005,6 @@ }, "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": { @@ -8551,120 +8012,47 @@ } }, "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==", + "version": "9.0.1", "dev": true, "license": "ISC", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=12" + "node": ">=20" } }, "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==", + "version": "6.2.3", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/cliui/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/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/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==", + "version": "9.0.2", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "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==", - "dev": true, - "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": { @@ -8678,8 +8066,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": { @@ -8691,8 +8077,6 @@ }, "node_modules/codelyzer": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-6.0.2.tgz", - "integrity": "sha512-v3+E0Ucu2xWJMOJ2fA/q9pDT/hlxHftHGPUay1/1cTgyPV5JTHFdO9hqo837Sx2s9vKBMTt5gO+lhF95PO6J+g==", "dev": true, "license": "MIT", "dependencies": { @@ -8719,8 +8103,6 @@ }, "node_modules/codelyzer/node_modules/@angular/compiler": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz", - "integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -8729,8 +8111,6 @@ }, "node_modules/codelyzer/node_modules/aria-query": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", - "integrity": "sha512-majUxHgLehQTeSA+hClx+DY09OVUqG3GtezWkF1krgLGNdlDu9l9V8DaqNMWbq4Eddc8wsyDA0hpDUtnYxQEXw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -8740,15 +8120,11 @@ }, "node_modules/codelyzer/node_modules/ast-types-flow": { "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true, "license": "ISC" }, "node_modules/codelyzer/node_modules/axobject-query": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", - "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -8757,28 +8133,11 @@ }, "node_modules/codelyzer/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/codelyzer/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, "node_modules/codelyzer/node_modules/source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -8787,22 +8146,16 @@ }, "node_modules/codelyzer/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true, "license": "0BSD" }, "node_modules/codelyzer/node_modules/zone.js": { "version": "0.10.3", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", - "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==", "dev": true, "license": "MIT" }, "node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "license": "MIT", "dependencies": { @@ -8811,50 +8164,37 @@ }, "node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true, "license": "MIT" }, "node_modules/colord": { "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true, "license": "MIT", "peer": true }, "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.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.0.tgz", - "integrity": "sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==", + "version": "14.0.2", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=20" } }, "node_modules/comment-json": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", - "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", + "version": "4.4.1", "dev": true, "license": "MIT", "peer": true, "dependencies": { "array-timsort": "^1.0.3", "core-util-is": "^1.0.3", - "esprima": "^4.0.1", - "has-own-prop": "^2.0.0", - "repeat-string": "^1.6.1" + "esprima": "^4.0.1" }, "engines": { "node": ">= 6" @@ -8862,22 +8202,11 @@ }, "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/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true, - "license": "MIT" - }, "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", "peer": true, @@ -8888,8 +8217,6 @@ }, "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": { @@ -8901,8 +8228,6 @@ }, "node_modules/compressing": { "version": "1.10.3", - "resolved": "https://registry.npmjs.org/compressing/-/compressing-1.10.3.tgz", - "integrity": "sha512-F3RxWLU4UNfNYFVNwCK58HwQnv/5drvUW176FC//3i0pwpdahoZxMM7dkxWuA2MEafqfwDc+iudk70Sx/VMUIw==", "dev": true, "license": "MIT", "dependencies": { @@ -8920,10 +8245,19 @@ "node": ">= 4.0.0" } }, + "node_modules/compressing/node_modules/iconv-lite": { + "version": "0.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "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": { @@ -8941,8 +8275,6 @@ }, "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": { @@ -8951,29 +8283,29 @@ }, "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", + "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==", "dev": true, "license": "MIT" }, "node_modules/confusing-browser-globals": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true, "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": { @@ -8988,8 +8320,6 @@ }, "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": { @@ -8998,38 +8328,75 @@ }, "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/encodeurl": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/finalhandler": { + "version": "1.1.2", + "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/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==", + "node_modules/connect/node_modules/on-finished": { + "version": "2.3.0", "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "5.2.1" + "ee-first": "1.1.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, "license": "MIT", "engines": { @@ -9038,8 +8405,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", "peer": true, @@ -9052,8 +8417,6 @@ }, "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", "peer": true, @@ -9072,15 +8435,11 @@ }, "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": { @@ -9088,16 +8447,15 @@ } }, "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "version": "1.2.2", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } }, "node_modules/copy-anything": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", "dev": true, "license": "MIT", "dependencies": { @@ -9108,18 +8466,15 @@ } }, "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==", + "version": "13.0.1", "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" + "serialize-javascript": "^6.0.2", + "tinyglobby": "^0.2.12" }, "engines": { "node": ">= 18.12.0" @@ -9132,110 +8487,8 @@ "webpack": "^5.1.0" } }, - "node_modules/copy-webpack-plugin/node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/copy-webpack-plugin/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/copy-webpack-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/copy-webpack-plugin/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/copy-webpack-plugin/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/copy-webpack-plugin/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/core-js": { - "version": "3.44.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.44.0.tgz", - "integrity": "sha512-aFCtd4l6GvAXwVEh3XbbVqJGHDJt0OZRa+5ePGx3LLwi12WfexqQxcsohb2wgsa/92xtl19Hd66G/L+TaAxDMw==", + "version": "3.47.0", "hasInstallScript": true, "license": "MIT", "funding": { @@ -9244,13 +8497,11 @@ } }, "node_modules/core-js-compat": { - "version": "3.44.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.44.0.tgz", - "integrity": "sha512-JepmAj2zfl6ogy34qfWtcE7nHKAJnKsQFRn++scjVS2bZFllwptzw61BZcZFYBPpUznLfAvh0LGhxKppk04ClA==", + "version": "3.47.0", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.25.1" + "browserslist": "^4.28.0" }, "funding": { "type": "opencollective", @@ -9259,15 +8510,11 @@ }, "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": { @@ -9280,8 +8527,6 @@ }, "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": { @@ -9306,14 +8551,12 @@ } }, "node_modules/cosmiconfig-typescript-loader": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz", - "integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==", + "version": "6.2.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "jiti": "^2.4.1" + "jiti": "^2.6.1" }, "engines": { "node": ">=v18" @@ -9326,85 +8569,11 @@ }, "node_modules/create-require": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/critters": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.24.tgz", - "integrity": "sha512-Oyqew0FGM0wYUSNqR0L6AteO5MpMoUU0rhKRieXeiKs+PmRTxiJMyaunYB2KF6fQ3dzChXKCpbFOEJx3OQ1v/Q==", - "deprecated": "Ownership of Critters has moved to the Nuxt team, who will be maintaining the project going forward. If you'd like to keep using Critters, please switch to the actively-maintained fork at https://github.com/danielroe/beasties", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "chalk": "^4.1.0", - "css-select": "^5.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.2", - "htmlparser2": "^8.0.2", - "postcss": "^8.4.23", - "postcss-media-query-parser": "^0.2.3" - } - }, - "node_modules/critters/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/critters/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/critters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/critters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/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": { @@ -9417,31 +8586,30 @@ } }, "node_modules/cspell": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/cspell/-/cspell-9.2.0.tgz", - "integrity": "sha512-AKzaFMem2jRcGpAY2spKP0z15jpZeX1WTDNHCDsB8/YvnhnOfWXc0S5AF+4sfU1cQgHWYGFOolMuTri0ZQdV+Q==", + "version": "9.4.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@cspell/cspell-json-reporter": "9.2.0", - "@cspell/cspell-pipe": "9.2.0", - "@cspell/cspell-types": "9.2.0", - "@cspell/dynamic-import": "9.2.0", - "@cspell/url": "9.2.0", - "chalk": "^5.4.1", - "chalk-template": "^1.1.0", - "commander": "^14.0.0", - "cspell-config-lib": "9.2.0", - "cspell-dictionary": "9.2.0", - "cspell-gitignore": "9.2.0", - "cspell-glob": "9.2.0", - "cspell-io": "9.2.0", - "cspell-lib": "9.2.0", + "@cspell/cspell-json-reporter": "9.4.0", + "@cspell/cspell-pipe": "9.4.0", + "@cspell/cspell-types": "9.4.0", + "@cspell/dynamic-import": "9.4.0", + "@cspell/url": "9.4.0", + "ansi-regex": "^6.2.2", + "chalk": "^5.6.2", + "chalk-template": "^1.1.2", + "commander": "^14.0.2", + "cspell-config-lib": "9.4.0", + "cspell-dictionary": "9.4.0", + "cspell-gitignore": "9.4.0", + "cspell-glob": "9.4.0", + "cspell-io": "9.4.0", + "cspell-lib": "9.4.0", "fast-json-stable-stringify": "^2.1.0", "flatted": "^3.3.3", - "semver": "^7.7.2", - "tinyglobby": "^0.2.14" + "semver": "^7.7.3", + "tinyglobby": "^0.2.15" }, "bin": { "cspell": "bin.mjs", @@ -9455,50 +8623,44 @@ } }, "node_modules/cspell-config-lib": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-9.2.0.tgz", - "integrity": "sha512-Yc8+hT+uIWWCi6WMhOL6HDYbBCP2qig1tgKGThHVeOx6GviieV10TZ5kQ+P7ONgoqw2nmm7uXIC19dGYx3DblQ==", + "version": "9.4.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@cspell/cspell-types": "9.2.0", - "comment-json": "^4.2.5", - "smol-toml": "^1.4.1", - "yaml": "^2.8.0" + "@cspell/cspell-types": "9.4.0", + "comment-json": "^4.4.1", + "smol-toml": "^1.5.2", + "yaml": "^2.8.2" }, "engines": { "node": ">=20" } }, "node_modules/cspell-dictionary": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-9.2.0.tgz", - "integrity": "sha512-lV4VtjsDtxu8LyCcb6DY7Br4e/Aw1xfR8QvjYhHaJ8t03xry9STey5Rkfp+lz+hlVevNcn3lfCaacGuXyD+lLg==", + "version": "9.4.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@cspell/cspell-pipe": "9.2.0", - "@cspell/cspell-types": "9.2.0", - "cspell-trie-lib": "9.2.0", - "fast-equals": "^5.2.2" + "@cspell/cspell-pipe": "9.4.0", + "@cspell/cspell-types": "9.4.0", + "cspell-trie-lib": "9.4.0", + "fast-equals": "^5.3.3" }, "engines": { "node": ">=20" } }, "node_modules/cspell-gitignore": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-9.2.0.tgz", - "integrity": "sha512-gXDQZ7czTPwmEg1qtsUIjVEFm9IfgTO8rA02O8eYIveqjFixbSV3fIYOgoxZSZYxjt3O44m8+/zAFC1RE4CM/Q==", + "version": "9.4.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@cspell/url": "9.2.0", - "cspell-glob": "9.2.0", - "cspell-io": "9.2.0" + "@cspell/url": "9.4.0", + "cspell-glob": "9.4.0", + "cspell-io": "9.4.0" }, "bin": { "cspell-gitignore": "bin.mjs" @@ -9508,44 +8670,26 @@ } }, "node_modules/cspell-glob": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-9.2.0.tgz", - "integrity": "sha512-viycZDyegzW2AKPFqvX5RveqTrB0sKgexlCu2A8z8eumpYYor5sD1NP05VDOqkAF4hDuiGqkHn6iNo0L1wNgLw==", + "version": "9.4.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@cspell/url": "9.2.0", + "@cspell/url": "9.4.0", "picomatch": "^4.0.3" }, "engines": { "node": ">=20" } }, - "node_modules/cspell-glob/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", - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/cspell-grammar": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-9.2.0.tgz", - "integrity": "sha512-qthAmWcNHpYAmufy7YWVg9xwrYANkVlI40bgC2uGd8EnKssm/qOPhqXXNS+kLf+q0NmJM5nMgRLhCC23xSp3JA==", + "version": "9.4.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@cspell/cspell-pipe": "9.2.0", - "@cspell/cspell-types": "9.2.0" + "@cspell/cspell-pipe": "9.4.0", + "@cspell/cspell-types": "9.4.0" }, "bin": { "cspell-grammar": "bin.mjs" @@ -9555,47 +8699,41 @@ } }, "node_modules/cspell-io": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-9.2.0.tgz", - "integrity": "sha512-oxKiqFLcz629FmOId8UpdDznpMvCgpuktg4nkD2G9pYpRh+fRLZpP4QtZPyvJqvpUIzFhIOznMeHjsiBYHOZUA==", + "version": "9.4.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@cspell/cspell-service-bus": "9.2.0", - "@cspell/url": "9.2.0" + "@cspell/cspell-service-bus": "9.4.0", + "@cspell/url": "9.4.0" }, "engines": { "node": ">=20" } }, "node_modules/cspell-lib": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-9.2.0.tgz", - "integrity": "sha512-RnhDIsETw6Ex0UaK3PFoJ2FwWMWfJPtdpNpv1qgmJwoGD4CzwtIqPOLtZ24zqdCP8ZnNTF/lwV/9rZVqifYjsw==", + "version": "9.4.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@cspell/cspell-bundled-dicts": "9.2.0", - "@cspell/cspell-pipe": "9.2.0", - "@cspell/cspell-resolver": "9.2.0", - "@cspell/cspell-types": "9.2.0", - "@cspell/dynamic-import": "9.2.0", - "@cspell/filetypes": "9.2.0", - "@cspell/strong-weak-map": "9.2.0", - "@cspell/url": "9.2.0", + "@cspell/cspell-bundled-dicts": "9.4.0", + "@cspell/cspell-pipe": "9.4.0", + "@cspell/cspell-resolver": "9.4.0", + "@cspell/cspell-types": "9.4.0", + "@cspell/dynamic-import": "9.4.0", + "@cspell/filetypes": "9.4.0", + "@cspell/strong-weak-map": "9.4.0", + "@cspell/url": "9.4.0", "clear-module": "^4.1.2", - "comment-json": "^4.2.5", - "cspell-config-lib": "9.2.0", - "cspell-dictionary": "9.2.0", - "cspell-glob": "9.2.0", - "cspell-grammar": "9.2.0", - "cspell-io": "9.2.0", - "cspell-trie-lib": "9.2.0", + "cspell-config-lib": "9.4.0", + "cspell-dictionary": "9.4.0", + "cspell-glob": "9.4.0", + "cspell-grammar": "9.4.0", + "cspell-io": "9.4.0", + "cspell-trie-lib": "9.4.0", "env-paths": "^3.0.0", - "fast-equals": "^5.2.2", - "gensequence": "^7.0.0", + "gensequence": "^8.0.8", "import-fresh": "^3.3.1", "resolve-from": "^5.0.0", "vscode-languageserver-textdocument": "^1.0.12", @@ -9608,8 +8746,6 @@ }, "node_modules/cspell-lib/node_modules/env-paths": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", - "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", "dev": true, "license": "MIT", "peer": true, @@ -9621,25 +8757,21 @@ } }, "node_modules/cspell-trie-lib": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-9.2.0.tgz", - "integrity": "sha512-6GHL1KvLQzcPBSNY6QWOabq8YwRJAnNKamA0O/tRKy+11Hy99ysD4xvfu3kKYPAcobp5ZykX4nudHxy8yrEvng==", + "version": "9.4.0", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@cspell/cspell-pipe": "9.2.0", - "@cspell/cspell-types": "9.2.0", - "gensequence": "^7.0.0" + "@cspell/cspell-pipe": "9.4.0", + "@cspell/cspell-types": "9.4.0", + "gensequence": "^8.0.8" }, "engines": { "node": ">=20" } }, "node_modules/cspell/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", "dev": true, "license": "ISC", "peer": true, @@ -9650,10 +8782,24 @@ "node": ">=10" } }, + "node_modules/cspell/node_modules/tinyglobby": { + "version": "0.2.15", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, "node_modules/css-functions-list": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", - "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", "dev": true, "license": "MIT", "peer": true, @@ -9663,8 +8809,6 @@ }, "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": { @@ -9698,17 +8842,15 @@ } }, "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==", + "version": "6.0.0", "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" + "css-what": "^7.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "nth-check": "^2.1.1" }, "funding": { "url": "https://github.com/sponsors/fb55" @@ -9716,8 +8858,6 @@ }, "node_modules/css-selector-tokenizer": { "version": "0.7.3", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", - "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", "dev": true, "license": "MIT", "dependencies": { @@ -9727,8 +8867,6 @@ }, "node_modules/css-tree": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", - "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", "dev": true, "license": "MIT", "peer": true, @@ -9741,9 +8879,7 @@ } }, "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==", + "version": "7.0.0", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -9755,8 +8891,6 @@ }, "node_modules/cssauron": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", - "integrity": "sha512-Ht70DcFBh+/ekjVrYS2PlDMdSQEl3OFNmjK6lcn49HptBgilXf/Zwg4uFh9Xn0pX3Q8YOkSjIFOfK2osvdqpBw==", "dev": true, "license": "MIT", "dependencies": { @@ -9765,8 +8899,6 @@ }, "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": { @@ -9778,22 +8910,16 @@ }, "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/damerau-levenshtein": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true, "license": "BSD-2-Clause" }, "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", "peer": true, @@ -9806,8 +8932,6 @@ }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "license": "MIT", "engines": { "node": ">= 12" @@ -9815,8 +8939,6 @@ }, "node_modules/data-view-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9833,8 +8955,6 @@ }, "node_modules/data-view-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9851,8 +8971,6 @@ }, "node_modules/data-view-byte-offset": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9869,8 +8987,6 @@ }, "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": { @@ -9878,15 +8994,11 @@ } }, "node_modules/dayjs": { - "version": "1.11.13", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "version": "1.11.19", "license": "MIT" }, "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", "dev": true, "license": "MIT", "dependencies": { @@ -9903,25 +9015,11 @@ }, "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/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "version": "5.4.0", "license": "MIT", "dependencies": { "bundle-name": "^4.1.0", @@ -9935,9 +9033,7 @@ } }, "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==", + "version": "5.0.1", "license": "MIT", "engines": { "node": ">=18" @@ -9946,23 +9042,8 @@ "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", "dependencies": { @@ -9979,8 +9060,6 @@ }, "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==", "license": "MIT", "engines": { "node": ">=12" @@ -9991,8 +9070,6 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "license": "MIT", "dependencies": { @@ -10009,8 +9086,6 @@ }, "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": { @@ -10019,8 +9094,6 @@ }, "node_modules/dependency-graph": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz", - "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==", "dev": true, "license": "MIT", "engines": { @@ -10029,8 +9102,6 @@ }, "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": { @@ -10039,33 +9110,26 @@ } }, "node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "version": "2.1.2", "dev": true, "license": "Apache-2.0", + "optional": true, "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": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -10074,8 +9138,6 @@ }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "license": "MIT", "dependencies": { @@ -10085,10 +9147,16 @@ "node": ">=8" } }, + "node_modules/dir-glob/node_modules/path-type": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "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": { @@ -10099,22 +9167,18 @@ } }, "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "version": "2.1.0", "dev": true, "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, "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": { @@ -10126,8 +9190,6 @@ }, "node_modules/dom-serializer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, "license": "MIT", "dependencies": { @@ -10141,8 +9203,6 @@ }, "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": [ { @@ -10154,8 +9214,6 @@ }, "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": { @@ -10170,8 +9228,6 @@ }, "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": { @@ -10185,8 +9241,6 @@ }, "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", "peer": true, @@ -10199,14 +9253,10 @@ }, "node_modules/downloadjs": { "version": "1.4.7", - "resolved": "https://registry.npmjs.org/downloadjs/-/downloadjs-1.4.7.tgz", - "integrity": "sha512-LN1gO7+u9xjU5oEScGFKvXhYf7Y/empUIIEAGBs1LzUq/rg5duiDrkuH5A2lQGd5jfMOb9X9usDa2oVXwJ0U/Q==", "license": "MIT" }, "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": { @@ -10220,36 +9270,26 @@ }, "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.191", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.191.tgz", - "integrity": "sha512-xcwe9ELcuxYLUFqZZxL19Z6HVKcvNkIwhbHUz7L3us6u12yR+7uY89dSl570f/IqNthx8dAw3tojG7i4Ni4tDA==", + "version": "1.5.264", "dev": true, "license": "ISC" }, "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/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": { @@ -10257,9 +9297,7 @@ } }, "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==", + "version": "2.0.0", "dev": true, "license": "MIT", "engines": { @@ -10268,8 +9306,6 @@ }, "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, @@ -10279,8 +9315,6 @@ }, "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, @@ -10293,8 +9327,6 @@ }, "node_modules/end-of-stream": { "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, "license": "MIT", "dependencies": { @@ -10303,8 +9335,6 @@ }, "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": { @@ -10324,36 +9354,69 @@ }, "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==", + "node_modules/engine.io/node_modules/accepts": { + "version": "1.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io/node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/negotiator": { + "version": "0.6.3", "dev": true, "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 0.6" } }, "node_modules/enhanced-resolve": { - "version": "5.18.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", - "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", + "version": "5.18.3", "dev": true, "license": "MIT", "dependencies": { @@ -10366,8 +9429,6 @@ }, "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": { @@ -10382,8 +9443,6 @@ }, "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": { @@ -10395,8 +9454,6 @@ }, "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": { @@ -10405,8 +9462,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": { @@ -10418,15 +9473,11 @@ }, "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, @@ -10438,9 +9489,7 @@ } }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", "dev": true, "license": "MIT", "dependencies": { @@ -10449,8 +9498,6 @@ }, "node_modules/es-abstract": { "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", "dev": true, "license": "MIT", "dependencies": { @@ -10518,8 +9565,6 @@ }, "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": { @@ -10528,8 +9573,6 @@ }, "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": { @@ -10538,8 +9581,6 @@ }, "node_modules/es-iterator-helpers": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", "dev": true, "license": "MIT", "dependencies": { @@ -10566,15 +9607,11 @@ }, "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": { @@ -10586,8 +9623,6 @@ }, "node_modules/es-set-tostringtag": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "license": "MIT", "dependencies": { @@ -10602,8 +9637,6 @@ }, "node_modules/es-shim-unscopables": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, "license": "MIT", "dependencies": { @@ -10615,8 +9648,6 @@ }, "node_modules/es-to-primitive": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { @@ -10632,9 +9663,7 @@ } }, "node_modules/esbuild": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", - "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", + "version": "0.25.9", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -10645,38 +9674,36 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.8", - "@esbuild/android-arm": "0.25.8", - "@esbuild/android-arm64": "0.25.8", - "@esbuild/android-x64": "0.25.8", - "@esbuild/darwin-arm64": "0.25.8", - "@esbuild/darwin-x64": "0.25.8", - "@esbuild/freebsd-arm64": "0.25.8", - "@esbuild/freebsd-x64": "0.25.8", - "@esbuild/linux-arm": "0.25.8", - "@esbuild/linux-arm64": "0.25.8", - "@esbuild/linux-ia32": "0.25.8", - "@esbuild/linux-loong64": "0.25.8", - "@esbuild/linux-mips64el": "0.25.8", - "@esbuild/linux-ppc64": "0.25.8", - "@esbuild/linux-riscv64": "0.25.8", - "@esbuild/linux-s390x": "0.25.8", - "@esbuild/linux-x64": "0.25.8", - "@esbuild/netbsd-arm64": "0.25.8", - "@esbuild/netbsd-x64": "0.25.8", - "@esbuild/openbsd-arm64": "0.25.8", - "@esbuild/openbsd-x64": "0.25.8", - "@esbuild/openharmony-arm64": "0.25.8", - "@esbuild/sunos-x64": "0.25.8", - "@esbuild/win32-arm64": "0.25.8", - "@esbuild/win32-ia32": "0.25.8", - "@esbuild/win32-x64": "0.25.8" + "@esbuild/aix-ppc64": "0.25.9", + "@esbuild/android-arm": "0.25.9", + "@esbuild/android-arm64": "0.25.9", + "@esbuild/android-x64": "0.25.9", + "@esbuild/darwin-arm64": "0.25.9", + "@esbuild/darwin-x64": "0.25.9", + "@esbuild/freebsd-arm64": "0.25.9", + "@esbuild/freebsd-x64": "0.25.9", + "@esbuild/linux-arm": "0.25.9", + "@esbuild/linux-arm64": "0.25.9", + "@esbuild/linux-ia32": "0.25.9", + "@esbuild/linux-loong64": "0.25.9", + "@esbuild/linux-mips64el": "0.25.9", + "@esbuild/linux-ppc64": "0.25.9", + "@esbuild/linux-riscv64": "0.25.9", + "@esbuild/linux-s390x": "0.25.9", + "@esbuild/linux-x64": "0.25.9", + "@esbuild/netbsd-arm64": "0.25.9", + "@esbuild/netbsd-x64": "0.25.9", + "@esbuild/openbsd-arm64": "0.25.9", + "@esbuild/openbsd-x64": "0.25.9", + "@esbuild/openharmony-arm64": "0.25.9", + "@esbuild/sunos-x64": "0.25.9", + "@esbuild/win32-arm64": "0.25.9", + "@esbuild/win32-ia32": "0.25.9", + "@esbuild/win32-x64": "0.25.9" } }, "node_modules/esbuild-wasm": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.23.0.tgz", - "integrity": "sha512-6jP8UmWy6R6TUUV8bMuC3ZyZ6lZKI56x0tkxyCIqWwRRJ/DgeQKneh/Oid5EoGoPFLrGNkz47ZEtWAYuiY/u9g==", + "version": "0.25.9", "dev": true, "license": "MIT", "bin": { @@ -10688,8 +9715,6 @@ }, "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": { @@ -10698,15 +9723,11 @@ }, "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": { @@ -10717,133 +9738,65 @@ } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "version": "9.39.1", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "@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", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "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": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-airbnb": { - "version": "19.0.4", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", - "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-config-airbnb-base": "^15.0.0", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5" - }, - "engines": { - "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.28.0", - "eslint-plugin-react-hooks": "^4.3.0" - } - }, - "node_modules/eslint-config-airbnb-base": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", - "dev": true, - "license": "MIT", - "dependencies": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5", - "semver": "^6.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "url": "https://eslint.org/donate" }, "peerDependencies": { - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.2" - } - }, - "node_modules/eslint-config-airbnb-base/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/eslint-config-airbnb-typescript": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-18.0.0.tgz", - "integrity": "sha512-oc+Lxzgzsu8FQyFVa4QFaVKiitTYiiW3frB9KYW5OWdPrqFc7FzxgB20hP4cHMlr+MBzGcLl3jnCOVOydL9mIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-config-airbnb-base": "^15.0.0" + "jiti": "*" }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^7.0.0", - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-prettier": { "version": "8.10.2", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.2.tgz", - "integrity": "sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A==", "dev": true, "license": "MIT", "bin": { @@ -10855,8 +9808,6 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "license": "MIT", "dependencies": { @@ -10867,8 +9818,6 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10877,8 +9826,6 @@ }, "node_modules/eslint-module-utils": { "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", - "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", "dev": true, "license": "MIT", "dependencies": { @@ -10895,8 +9842,6 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10905,8 +9850,6 @@ }, "node_modules/eslint-plugin-import": { "version": "2.32.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", - "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", "dependencies": { @@ -10939,8 +9882,6 @@ }, "node_modules/eslint-plugin-import/node_modules/brace-expansion": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -10950,31 +9891,14 @@ }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-import/node_modules/json5": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "license": "MIT", "dependencies": { @@ -10986,8 +9910,6 @@ }, "node_modules/eslint-plugin-import/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -10999,8 +9921,6 @@ }, "node_modules/eslint-plugin-import/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": { @@ -11009,8 +9929,6 @@ }, "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "license": "MIT", "dependencies": { @@ -11021,20 +9939,18 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "28.14.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.14.0.tgz", - "integrity": "sha512-P9s/qXSMTpRTerE2FQ0qJet2gKbcGyFTPAJipoKxmWqR6uuFqIqk8FuEfg5yBieOezVrEfAMZrEwJ6yEp+1MFQ==", + "version": "29.2.1", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/utils": "^8.0.0" }, "engines": { - "node": "^16.10.0 || ^18.12.0 || >=20.0.0" + "node": "^20.12.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0 || ^8.0.0", - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", "jest": "*" }, "peerDependenciesMeta": { @@ -11048,8 +9964,6 @@ }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", - "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -11078,8 +9992,6 @@ }, "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -11089,8 +10001,6 @@ }, "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -11102,8 +10012,6 @@ }, "node_modules/eslint-plugin-react": { "version": "7.37.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", - "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", "dev": true, "license": "MIT", "dependencies": { @@ -11134,22 +10042,18 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "version": "5.2.0", "dev": true, "license": "MIT", "engines": { "node": ">=10" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "node_modules/eslint-plugin-react/node_modules/brace-expansion": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -11157,23 +10061,8 @@ "concat-map": "0.0.1" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-react/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -11185,237 +10074,75 @@ }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/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/eslint-plugin-sonarjs": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.18.0.tgz", - "integrity": "sha512-DJ3osLnt6KFdT5e9ZuIDOjT5A6wUGSLeiJJT03lPgpdD+7CVWlYAw9Goe3bt7SmbFO3Xh89NOCZAuB9XA7bAUQ==", - "dev": true, - "license": "LGPL-3.0", - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-storybook": { - "version": "0.6.15", - "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.6.15.tgz", - "integrity": "sha512-lAGqVAJGob47Griu29KXYowI4G7KwMoJDOkEip8ujikuDLxU+oWJ1l0WL6F2oDO4QiyUFXvtDkEkISMOPzo+7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/csf": "^0.0.1", - "@typescript-eslint/utils": "^5.45.0", - "requireindex": "^1.1.0", - "ts-dedent": "^2.2.0" - }, - "engines": { - "node": "12.x || 14.x || >= 16" - }, - "peerDependencies": { - "eslint": ">=6" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "bin": { + "resolve": "bin/resolve" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-storybook/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==", + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/eslint-plugin-storybook/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/eslint-plugin-sonarjs": { + "version": "3.0.5", "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" + "license": "LGPL-3.0-only", + "dependencies": { + "@eslint-community/regexpp": "4.12.1", + "builtin-modules": "3.3.0", + "bytes": "3.1.2", + "functional-red-black-tree": "1.0.1", + "jsx-ast-utils-x": "0.1.0", + "lodash.merge": "4.6.2", + "minimatch": "9.0.5", + "scslre": "0.3.0", + "semver": "7.7.2", + "typescript": ">=5" + }, + "peerDependencies": { + "eslint": "^8.0.0 || ^9.0.0" } }, - "node_modules/eslint-plugin-storybook/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/eslint-plugin-storybook/node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/eslint-plugin-sonarjs/node_modules/@eslint-community/regexpp": { + "version": "4.12.1", "dev": true, "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/eslint-plugin-testing-library": { - "version": "5.11.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz", - "integrity": "sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==", + "node_modules/eslint-plugin-storybook": { + "version": "0.6.15", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^5.58.0" + "@storybook/csf": "^0.0.1", + "@typescript-eslint/utils": "^5.45.0", + "requireindex": "^1.1.0", + "ts-dedent": "^2.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0", - "npm": ">=6" + "node": "12.x || 14.x || >= 16" }, "peerDependencies": { - "eslint": "^7.5.0 || ^8.0.0" + "eslint": ">=6" } }, - "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/scope-manager": { + "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/scope-manager": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "license": "MIT", "dependencies": { @@ -11430,10 +10157,8 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/types": { + "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/types": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, "license": "MIT", "engines": { @@ -11444,10 +10169,8 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/typescript-estree": { + "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/typescript-estree": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -11472,10 +10195,8 @@ } } }, - "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/utils": { + "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/utils": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11499,10 +10220,8 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/visitor-keys": { + "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/visitor-keys": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "license": "MIT", "dependencies": { @@ -11517,10 +10236,8 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/eslint-plugin-testing-library/node_modules/eslint-scope": { + "node_modules/eslint-plugin-storybook/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": { @@ -11531,27 +10248,21 @@ "node": ">=8.0.0" } }, - "node_modules/eslint-plugin-testing-library/node_modules/estraverse": { + "node_modules/eslint-plugin-storybook/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/eslint-plugin-testing-library/node_modules/tslib": { + "node_modules/eslint-plugin-storybook/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true, "license": "0BSD" }, - "node_modules/eslint-plugin-testing-library/node_modules/tsutils": { + "node_modules/eslint-plugin-storybook/node_modules/tsutils": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "license": "MIT", "dependencies": { @@ -11565,9 +10276,7 @@ } }, "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==", + "version": "9.0.0", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -11575,7 +10284,7 @@ "estraverse": "^5.2.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -11583,8 +10292,6 @@ }, "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": { @@ -11596,8 +10303,6 @@ }, "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": { @@ -11613,8 +10318,6 @@ }, "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": { @@ -11629,8 +10332,6 @@ }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -11640,8 +10341,6 @@ }, "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": { @@ -11657,8 +10356,6 @@ }, "node_modules/eslint/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11670,15 +10367,11 @@ }, "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.4.0", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -11686,7 +10379,18 @@ "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -11694,8 +10398,6 @@ }, "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": { @@ -11711,15 +10413,11 @@ }, "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": { @@ -11734,8 +10432,6 @@ }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -11747,8 +10443,6 @@ }, "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": { @@ -11763,8 +10457,6 @@ }, "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": { @@ -11779,8 +10471,6 @@ }, "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": { @@ -11789,8 +10479,6 @@ }, "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": { @@ -11801,18 +10489,27 @@ } }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.4.0", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -11820,8 +10517,6 @@ }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "license": "BSD-2-Clause", "peer": true, @@ -11835,8 +10530,6 @@ }, "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": { @@ -11848,8 +10541,6 @@ }, "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": { @@ -11861,8 +10552,6 @@ }, "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": { @@ -11871,15 +10560,11 @@ }, "node_modules/estree-walker": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true, "license": "MIT" }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -11888,8 +10573,6 @@ }, "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": { @@ -11898,186 +10581,191 @@ }, "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/exponential-backoff": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", - "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", - "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==", + "node_modules/eventsource": { + "version": "3.0.7", "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" + "eventsource-parser": "^3.0.1" }, "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">=18.0.0" } }, - "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==", + "node_modules/eventsource-parser": { + "version": "3.0.6", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=18.0.0" } }, - "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==", + "node_modules/execa": { + "version": "1.0.0", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/express/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.6", "dev": true, "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, "engines": { - "node": ">= 0.8" + "node": ">=4.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==", + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", "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": ">=4" } }, - "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==", + "node_modules/execa/node_modules/semver": { + "version": "5.7.2", "dev": true, - "license": "MIT" + "license": "ISC", + "bin": { + "semver": "bin/semver" + } }, - "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==", + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "node_modules/execa/node_modules/which": { + "version": "1.3.1", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "isexe": "^2.0.0" }, - "engines": { - "node": ">=4" + "bin": { + "which": "bin/which" } }, - "node_modules/external-editor/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==", + "node_modules/exponential-backoff": { + "version": "3.1.3", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/express": { + "version": "5.2.1", "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "7.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" } }, + "node_modules/extend": { + "version": "3.0.2", + "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-equals": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz", - "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==", + "version": "5.3.3", "dev": true, "license": "MIT", "peer": true, @@ -12086,9 +10774,7 @@ } }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", "dev": true, "license": "MIT", "dependencies": { @@ -12096,7 +10782,7 @@ "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -12104,8 +10790,6 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -12117,22 +10801,16 @@ }, "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.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "version": "3.1.0", "dev": true, "funding": [ { @@ -12148,8 +10826,6 @@ }, "node_modules/fastest-levenshtein": { "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, "license": "MIT", "peer": true, @@ -12159,15 +10835,11 @@ }, "node_modules/fastparse": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", "dev": true, "license": "MIT" }, "node_modules/fastq": { "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, "license": "ISC", "dependencies": { @@ -12176,8 +10848,6 @@ }, "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": { @@ -12189,8 +10859,6 @@ }, "node_modules/fd-slicer2": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fd-slicer2/-/fd-slicer2-1.2.0.tgz", - "integrity": "sha512-3lBUNUckhMZduCc4g+Pw4Ve16LD9vpX9b8qUkkKq2mgDRLYWzblszZH2luADnJqjJe+cypngjCuKRm/IW12rRw==", "dev": true, "license": "MIT", "dependencies": { @@ -12198,12 +10866,12 @@ } }, "node_modules/fdir": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "version": "6.5.0", "dev": true, "license": "MIT", - "peer": true, + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -12215,8 +10883,6 @@ }, "node_modules/fetch-blob": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", "funding": [ { "type": "github", @@ -12237,22 +10903,18 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { @@ -12263,66 +10925,35 @@ } }, "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "2.1.1", "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" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, "engines": { - "node": ">= 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" + "node": ">= 18.0.0" }, - "engines": { - "node": ">= 0.8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "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==", + "node_modules/find-cache-directory": { + "version": "6.0.0", "dev": true, "license": "MIT", "dependencies": { "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" + "pkg-dir": "^8.0.0" }, "engines": { - "node": ">=14.16" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -12330,8 +10961,6 @@ }, "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", "peer": true, @@ -12347,10 +10976,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/find-up-simple": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "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": { @@ -12358,38 +10996,29 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "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/flushwritable": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/flushwritable/-/flushwritable-1.0.0.tgz", - "integrity": "sha512-3VELfuWCLVzt5d2Gblk8qcqFro6nuwvxwMzHaENVDHI7rxcBRtMCwTk/E9FXcgh+82DSpavPNDueA9+RxXJoFg==", "dev": true, "license": "MIT" }, "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "version": "1.15.11", "dev": true, "funding": [ { @@ -12409,8 +11038,6 @@ }, "node_modules/for-each": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", "dependencies": { @@ -12425,8 +11052,6 @@ }, "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": { @@ -12442,8 +11067,6 @@ }, "node_modules/formdata-polyfill": { "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", "license": "MIT", "dependencies": { "fetch-blob": "^3.1.2" @@ -12454,8 +11077,6 @@ }, "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": { @@ -12464,8 +11085,6 @@ }, "node_modules/fraction.js": { "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true, "license": "MIT", "engines": { @@ -12477,26 +11096,20 @@ } }, "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "version": "2.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/fs-constants": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true, "license": "MIT" }, "node_modules/fs-extra": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "version": "11.3.2", "dev": true, "license": "MIT", "dependencies": { @@ -12510,8 +11123,6 @@ }, "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": { @@ -12523,17 +11134,12 @@ }, "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==", "dev": true, - "hasInstallScript": true, "license": "MIT", "optional": true, "os": [ @@ -12545,8 +11151,6 @@ }, "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": { @@ -12555,8 +11159,6 @@ }, "node_modules/function.prototype.name": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -12574,31 +11176,38 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/generator-function": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/gensequence": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-7.0.0.tgz", - "integrity": "sha512-47Frx13aZh01afHJTB3zTtKIlFI6vWY+MYCN9Qpew6i52rfKjnhCF/l1YlC8UmEMvvntZZ6z4PiCcmyuedR2aQ==", + "version": "8.0.8", "dev": true, "license": "MIT", "peer": true, "engines": { - "node": ">=18" + "node": ">=20" } }, "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": { @@ -12607,8 +11216,6 @@ }, "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": { @@ -12616,9 +11223,7 @@ } }, "node_modules/get-east-asian-width": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", - "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "version": "1.4.0", "dev": true, "license": "MIT", "engines": { @@ -12630,8 +11235,6 @@ }, "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": { @@ -12655,8 +11258,6 @@ }, "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": { @@ -12669,15 +11270,22 @@ }, "node_modules/get-ready": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-ready/-/get-ready-1.0.0.tgz", - "integrity": "sha512-mFXCZPJIlcYcth+N8267+mghfYN9h3EhsDa6JSnbA3Wrhh/XFpuowviFcsDeYZtKspQyWyJqfs4O6P8CHeTwzw==", "dev": true, "license": "MIT" }, + "node_modules/get-stream": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/get-symbol-description": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { @@ -12694,8 +11302,6 @@ }, "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", "peer": true, @@ -12713,9 +11319,6 @@ }, "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": { @@ -12735,8 +11338,6 @@ }, "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": { @@ -12746,17 +11347,28 @@ "node": ">=10.13.0" } }, + "node_modules/glob-to-regex.js": { + "version": "1.2.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/glob-to-regexp": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/glob/node_modules/brace-expansion": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -12766,8 +11378,6 @@ }, "node_modules/glob/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -12779,8 +11389,6 @@ }, "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", "peer": true, @@ -12796,8 +11404,6 @@ }, "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", "peer": true, @@ -12807,8 +11413,6 @@ }, "node_modules/global-modules": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, "license": "MIT", "peer": true, @@ -12821,8 +11425,6 @@ }, "node_modules/global-prefix": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, "license": "MIT", "peer": true, @@ -12837,16 +11439,12 @@ }, "node_modules/global-prefix/node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, "license": "ISC", "peer": true }, "node_modules/global-prefix/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", "peer": true, @@ -12858,29 +11456,11 @@ } }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "14.0.0", "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -12888,8 +11468,6 @@ }, "node_modules/globalthis": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12905,8 +11483,6 @@ }, "node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "license": "MIT", "dependencies": { @@ -12926,16 +11502,12 @@ }, "node_modules/globjoin": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", "dev": true, "license": "MIT", "peer": true }, "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": { @@ -12947,29 +11519,21 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, "license": "ISC" }, "node_modules/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/has-bigints": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", "engines": { @@ -12981,29 +11545,14 @@ }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-own-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", - "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=8" } }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { @@ -13015,8 +11564,6 @@ }, "node_modules/has-proto": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13031,8 +11578,6 @@ }, "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": { @@ -13044,8 +11589,6 @@ }, "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": { @@ -13058,10 +11601,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hashery": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "hookified": "^1.13.0" + }, + "engines": { + "node": ">=20" + } + }, "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": { @@ -13072,37 +11625,32 @@ } }, "node_modules/hookified": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.11.0.tgz", - "integrity": "sha512-aDdIN3GyU5I6wextPplYdfmWCo+aLmjjVbntmX6HLD5RCi/xKsivYEBhnRD+d9224zFf008ZpLMPlWF0ZodYZw==", + "version": "1.13.0", "dev": true, "license": "MIT", "peer": true }, "node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "version": "9.0.2", "dev": true, "license": "ISC", "dependencies": { - "lru-cache": "^10.0.1" + "lru-cache": "^11.1.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.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==", + "version": "11.2.4", "dev": true, - "license": "ISC" + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } }, "node_modules/hpack.js": { "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13112,57 +11660,13 @@ "wbuf": "^1.1.0" } }, - "node_modules/hpack.js/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/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/html-tags": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "dev": true, "license": "MIT", "peer": true, @@ -13174,9 +11678,7 @@ } }, "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "version": "10.0.0", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -13189,62 +11691,57 @@ "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" + "domutils": "^3.2.1", + "entities": "^6.0.0" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "6.0.1", + "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==", + "version": "2.0.1", "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" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/http-parser-js": { "version": "0.5.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", - "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", "dev": true, "license": "MIT" }, "node_modules/http-proxy": { "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13258,8 +11755,6 @@ }, "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": { @@ -13272,8 +11767,6 @@ }, "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": { @@ -13289,13 +11782,11 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "version": "7.0.6", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -13304,8 +11795,6 @@ }, "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": { @@ -13313,22 +11802,22 @@ } }, "node_modules/iconv-lite": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", - "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", + "version": "0.7.0", "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "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": { @@ -13338,31 +11827,8 @@ "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==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "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": { @@ -13370,22 +11836,32 @@ } }, "node_modules/ignore-walk": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", - "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", + "version": "8.0.0", "dev": true, "license": "ISC", "dependencies": { - "minimatch": "^9.0.0" + "minimatch": "^10.0.3" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "10.1.1", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/image-size": { "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", "dev": true, "license": "MIT", "optional": true, @@ -13397,16 +11873,12 @@ } }, "node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "version": "5.1.4", "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": { @@ -13422,8 +11894,6 @@ }, "node_modules/import-fresh/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": { @@ -13435,8 +11905,6 @@ }, "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": { @@ -13444,9 +11912,7 @@ } }, "node_modules/import-meta-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", - "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", + "version": "4.2.0", "dev": true, "license": "MIT", "peer": true, @@ -13457,29 +11923,14 @@ }, "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/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "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": { @@ -13489,25 +11940,19 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, "license": "ISC" }, "node_modules/ini": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", - "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "version": "5.0.0", "dev": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/injection-js": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.5.0.tgz", - "integrity": "sha512-UpY2ONt4xbht4GhSqQ2zMJ1rBIQq4uOY+DlR6aOeYyqK7xadXt7UQbJIyxmgk288bPMkIZKjViieHm0O0i72Jw==", + "version": "2.6.1", "dev": true, "license": "MIT", "dependencies": { @@ -13516,8 +11961,6 @@ }, "node_modules/internal-slot": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { @@ -13531,8 +11974,6 @@ }, "node_modules/interpret": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true, "license": "MIT", "engines": { @@ -13540,33 +11981,23 @@ } }, "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "version": "10.1.0", "dev": true, "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, "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==", + "version": "1.9.1", "dev": true, "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 0.10" } }, "node_modules/is-array-buffer": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { @@ -13583,15 +12014,11 @@ }, "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-async-function": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13610,8 +12037,6 @@ }, "node_modules/is-bigint": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13626,8 +12051,6 @@ }, "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": { @@ -13639,8 +12062,6 @@ }, "node_modules/is-boolean-object": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "license": "MIT", "dependencies": { @@ -13656,8 +12077,6 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "license": "MIT", "engines": { @@ -13669,8 +12088,6 @@ }, "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": { @@ -13685,8 +12102,6 @@ }, "node_modules/is-data-view": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { @@ -13703,8 +12118,6 @@ }, "node_modules/is-date-object": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { @@ -13720,8 +12133,6 @@ }, "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==", "license": "MIT", "bin": { "is-docker": "cli.js" @@ -13735,8 +12146,6 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", "engines": { @@ -13745,8 +12154,6 @@ }, "node_modules/is-finalizationregistry": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { @@ -13761,8 +12168,6 @@ }, "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": { @@ -13773,14 +12178,13 @@ } }, "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "version": "1.1.2", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" }, @@ -13793,8 +12197,6 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { @@ -13806,8 +12208,6 @@ }, "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==", "license": "MIT", "dependencies": { "is-docker": "^3.0.0" @@ -13823,26 +12223,18 @@ } }, "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==", + "version": "2.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true, - "license": "MIT" - }, "node_modules/is-map": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", "engines": { @@ -13852,17 +12244,8 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true, - "license": "MIT" - }, "node_modules/is-negative-zero": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "license": "MIT", "engines": { @@ -13873,9 +12256,7 @@ } }, "node_modules/is-network-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", - "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "version": "1.3.0", "dev": true, "license": "MIT", "engines": { @@ -13887,8 +12268,6 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", "engines": { @@ -13897,8 +12276,6 @@ }, "node_modules/is-number-object": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { @@ -13914,8 +12291,6 @@ }, "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", "peer": true, @@ -13925,18 +12300,15 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, "license": "MIT", + "peer": true, "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": { @@ -13948,18 +12320,19 @@ }, "node_modules/is-plain-object": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/is-promise": { + "version": "4.0.0", + "dev": true, + "license": "MIT" + }, "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": { @@ -13977,8 +12350,6 @@ }, "node_modules/is-set": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "license": "MIT", "engines": { @@ -13990,8 +12361,6 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { @@ -14004,10 +12373,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-stream": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-string": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { @@ -14023,8 +12398,6 @@ }, "node_modules/is-symbol": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { @@ -14041,8 +12414,6 @@ }, "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", "peer": true, @@ -14055,8 +12426,6 @@ }, "node_modules/is-typed-array": { "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14070,13 +12439,11 @@ } }, "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==", + "version": "2.1.0", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -14084,8 +12451,6 @@ }, "node_modules/is-weakmap": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "license": "MIT", "engines": { @@ -14097,8 +12462,6 @@ }, "node_modules/is-weakref": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", "dependencies": { @@ -14113,8 +12476,6 @@ }, "node_modules/is-weakset": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14130,15 +12491,11 @@ }, "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==", "license": "MIT", "dependencies": { "is-inside-container": "^1.0.0" @@ -14152,15 +12509,11 @@ }, "node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/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": { @@ -14172,15 +12525,11 @@ }, "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": { @@ -14189,8 +12538,6 @@ }, "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": { @@ -14199,8 +12546,6 @@ }, "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": { @@ -14216,8 +12561,6 @@ }, "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": { @@ -14231,8 +12574,6 @@ }, "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": { @@ -14246,8 +12587,6 @@ }, "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": { @@ -14255,9 +12594,7 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "version": "3.2.0", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -14270,8 +12607,6 @@ }, "node_modules/iterator.prototype": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", - "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", "dev": true, "license": "MIT", "dependencies": { @@ -14288,8 +12623,6 @@ }, "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": { @@ -14304,15 +12637,11 @@ }, "node_modules/jasmine-core": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.1.2.tgz", - "integrity": "sha512-2oIUMGn00FdUiqz6epiiJr7xcFyNYj3rDcfmnzfkBnHyBQ3cBQUs4mmyGsOb7TTLb9kxk7dBcmEmqhDKkBoDyA==", "dev": true, "license": "MIT" }, "node_modules/jest-worker": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "license": "MIT", "dependencies": { @@ -14326,8 +12655,6 @@ }, "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": { @@ -14341,9 +12668,7 @@ } }, "node_modules/jiti": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz", - "integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==", + "version": "2.6.1", "dev": true, "license": "MIT", "peer": true, @@ -14351,17 +12676,21 @@ "jiti": "lib/jiti-cli.mjs" } }, + "node_modules/jose": { + "version": "6.1.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", "dev": true, "license": "MIT", "dependencies": { @@ -14371,17 +12700,8 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true, - "license": "MIT" - }, "node_modules/jsesc": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", "bin": { @@ -14393,53 +12713,39 @@ }, "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-format": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-format/-/json-format-1.0.1.tgz", - "integrity": "sha512-MoKIg/lBeQALqjYnqEanikfo3zBKRwclpXJexdF0FUniYAAN2ypEIXBEtpQb+9BkLFtDK1fyTLAsnGlyGfLGxw==", "dev": true, "license": "MIT" }, "node_modules/json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true, "license": "MIT" }, "node_modules/json-parse-even-better-errors": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", - "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "version": "4.0.0", "dev": true, "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, "license": "MIT" }, "node_modules/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": { @@ -14451,15 +12757,11 @@ }, "node_modules/jsonc-parser": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", "dev": true, "license": "MIT" }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "6.2.0", "dev": true, "license": "MIT", "dependencies": { @@ -14471,8 +12773,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" @@ -14481,8 +12781,6 @@ }, "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)", "peer": true, @@ -14499,8 +12797,6 @@ }, "node_modules/jsx-ast-utils": { "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14513,10 +12809,16 @@ "node": ">=4.0" } }, + "node_modules/jsx-ast-utils-x": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "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": { @@ -14554,8 +12856,6 @@ }, "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": { @@ -14564,8 +12864,6 @@ }, "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": { @@ -14577,8 +12875,6 @@ }, "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": { @@ -14595,8 +12891,6 @@ }, "node_modules/karma-coverage/node_modules/brace-expansion": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -14606,8 +12900,6 @@ }, "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": { @@ -14623,8 +12915,6 @@ }, "node_modules/karma-coverage/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -14636,8 +12926,6 @@ }, "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": { @@ -14646,8 +12934,6 @@ }, "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": { @@ -14662,8 +12948,6 @@ }, "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": { @@ -14674,25 +12958,27 @@ }, "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", + "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": { @@ -14705,10 +12991,31 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/karma/node_modules/body-parser": { + "version": "1.20.4", + "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.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, "node_modules/karma/node_modules/brace-expansion": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -14716,10 +13023,31 @@ "concat-map": "0.0.1" } }, + "node_modules/karma/node_modules/chokidar": { + "version": "3.6.0", + "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": { @@ -14730,8 +13058,6 @@ }, "node_modules/karma/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14743,32 +13069,81 @@ }, "node_modules/karma/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, + "node_modules/karma/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.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", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/karma/node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "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/media-typer": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/karma/node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/karma/node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/karma/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -14778,10 +13153,49 @@ "node": "*" } }, + "node_modules/karma/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/karma/node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/karma/node_modules/raw-body": { + "version": "2.5.3", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/karma/node_modules/readdirp": { + "version": "3.6.0", + "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": { @@ -14790,8 +13204,6 @@ }, "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": { @@ -14803,20 +13215,31 @@ "node": ">=8" } }, - "node_modules/karma/node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "node_modules/karma/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/type-is": { + "version": "1.6.18", "dev": true, "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, "engines": { - "node": ">=14.14" + "node": ">= 0.6" } }, "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": { @@ -14833,8 +13256,6 @@ }, "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": { @@ -14852,8 +13273,6 @@ }, "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": { @@ -14862,8 +13281,6 @@ }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { @@ -14872,8 +13289,6 @@ }, "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": { @@ -14882,23 +13297,17 @@ }, "node_modules/known-css-properties": { "version": "0.37.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz", - "integrity": "sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==", "dev": true, "license": "MIT", "peer": true }, "node_modules/language-subtag-registry": { "version": "0.3.23", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "dev": true, "license": "CC0-1.0" }, "node_modules/language-tags": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, "license": "MIT", "dependencies": { @@ -14909,9 +13318,7 @@ } }, "node_modules/launch-editor": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.11.0.tgz", - "integrity": "sha512-R/PIF14L6e2eHkhvQPu7jDRCr0msfCYCxbYiLgkkAGi0dVPWuM+RrsPu0a5dpuNe0KWGL3jpAkOlv53xGfPheQ==", + "version": "2.12.0", "dev": true, "license": "MIT", "dependencies": { @@ -14920,9 +13327,7 @@ } }, "node_modules/less": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", - "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", + "version": "4.4.0", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -14934,7 +13339,7 @@ "lessc": "bin/lessc" }, "engines": { - "node": ">=6" + "node": ">=14" }, "optionalDependencies": { "errno": "^0.1.1", @@ -14947,9 +13352,7 @@ } }, "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==", + "version": "12.3.0", "dev": true, "license": "MIT", "engines": { @@ -14975,8 +13378,6 @@ }, "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, @@ -14990,8 +13391,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, @@ -15004,8 +13403,6 @@ }, "node_modules/less/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, @@ -15015,8 +13412,6 @@ }, "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, @@ -15026,8 +13421,6 @@ }, "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, @@ -15037,8 +13430,6 @@ }, "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": { @@ -15050,15 +13441,11 @@ } }, "node_modules/libphonenumber-js": { - "version": "1.12.10", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.10.tgz", - "integrity": "sha512-E91vHJD61jekHHR/RF/E83T/CMoaLXT7cwYA75T4gim4FZjnM6hbJjVIGg7chqlSqRsSvQ3izGmOjHy1SQzcGQ==", + "version": "1.12.31", "license": "MIT" }, "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": { @@ -15075,15 +13462,11 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true, "license": "MIT" }, "node_modules/listr2": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz", - "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", + "version": "9.0.1", "dev": true, "license": "MIT", "dependencies": { @@ -15095,26 +13478,11 @@ "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/listr2/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=20.0.0" } }, "node_modules/listr2/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "6.2.3", "dev": true, "license": "MIT", "engines": { @@ -15126,31 +13494,11 @@ }, "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/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } + "dev": true, + "license": "MIT" }, "node_modules/listr2/node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "version": "9.0.2", "dev": true, "license": "MIT", "dependencies": { @@ -15166,35 +13514,33 @@ } }, "node_modules/lmdb": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.0.13.tgz", - "integrity": "sha512-UGe+BbaSUQtAMZobTb4nHvFMrmvuAQKSeaqAX2meTEQjfsbpl5sxdHD8T72OnwD4GU9uwNhYXIVe4QGs8N9Zyw==", + "version": "3.4.2", "dev": true, "hasInstallScript": true, "license": "MIT", + "optional": true, "dependencies": { - "msgpackr": "^1.10.2", + "msgpackr": "^1.11.2", "node-addon-api": "^6.1.0", "node-gyp-build-optional-packages": "5.2.2", - "ordered-binary": "^1.4.1", + "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.0.13", - "@lmdb/lmdb-darwin-x64": "3.0.13", - "@lmdb/lmdb-linux-arm": "3.0.13", - "@lmdb/lmdb-linux-arm64": "3.0.13", - "@lmdb/lmdb-linux-x64": "3.0.13", - "@lmdb/lmdb-win32-x64": "3.0.13" + "@lmdb/lmdb-darwin-arm64": "3.4.2", + "@lmdb/lmdb-darwin-x64": "3.4.2", + "@lmdb/lmdb-linux-arm": "3.4.2", + "@lmdb/lmdb-linux-arm64": "3.4.2", + "@lmdb/lmdb-linux-x64": "3.4.2", + "@lmdb/lmdb-win32-arm64": "3.4.2", + "@lmdb/lmdb-win32-x64": "3.4.2" } }, "node_modules/load-json-file": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, "license": "MIT", "dependencies": { @@ -15209,8 +13555,6 @@ }, "node_modules/load-json-file/node_modules/parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "license": "MIT", "dependencies": { @@ -15222,19 +13566,19 @@ } }, "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "version": "4.3.1", "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": { @@ -15243,10 +13587,9 @@ }, "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", + "peer": true, "dependencies": { "p-locate": "^6.0.0" }, @@ -15259,1955 +13602,1984 @@ }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true, "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", "peer": true }, "node_modules/lodash.clonedeep": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", "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", "peer": true }, "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", "peer": true }, "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", "peer": true }, "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", "peer": true }, "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", "peer": true }, "node_modules/lodash.truncate": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true, "license": "MIT", "peer": true }, "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", "peer": true }, "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", "peer": true }, "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==", + "version": "6.0.0", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "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==", + "node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "6.1.0", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "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": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" }, "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==", + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.1.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "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", + "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", + "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", + "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/loose-envify": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-symbols/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==", + "node_modules/make-error": { + "version": "1.3.6", + "dev": true, + "license": "ISC" + }, + "node_modules/make-fetch-happen": { + "version": "14.0.3", "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/mat-tel-input": { + "version": "19.0.5-0", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "tslib": "^2.x" }, + "peerDependencies": { + "@angular/common": "19.x", + "@angular/core": "19.x", + "@angular/forms": "19.x", + "@angular/material": "19.x", + "@angular/platform-browser": "19.x", + "@angular/platform-browser-dynamic": "19.x", + "libphonenumber-js": "^1.11.16" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" } }, - "node_modules/log-symbols/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==", + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/md5-file": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "bin": { + "md5-file": "cli.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/mdn-data": { + "version": "2.12.2", + "dev": true, + "license": "CC0-1.0", + "peer": true + }, + "node_modules/media-typer": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/memfs": { + "version": "4.51.1", + "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/memorystream": { + "version": "0.3.1", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/meow": { + "version": "12.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=16.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", "dev": true, "license": "MIT" }, - "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==", + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", "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": ">= 0.6" } }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "node_modules/micromatch": { + "version": "4.0.8", "dev": true, "license": "MIT", "dependencies": { - "environment": "^1.0.0" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.6" } }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "node_modules/mime": { + "version": "2.6.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "bin": { + "mime": "cli.js" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">=4.0.0" } }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", - "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "node_modules/mime-db": { + "version": "1.54.0", "dev": true, "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.0.0" - }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", - "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "node_modules/mime-types": { + "version": "3.0.2", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" + "mime-db": "^1.54.0" }, "engines": { "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "node_modules/mimic-function": { + "version": "5.0.1", "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "node_modules/mini-css-extract-plugin": { + "version": "2.9.4", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" }, "engines": { - "node": ">=18" + "node": ">= 12.13.0" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" } }, - "node_modules/log4js": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", - "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "node_modules/minimalistic-assert": { + "version": "1.0.1", "dev": true, - "license": "Apache-2.0", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "9.0.5", + "dev": true, + "license": "ISC", "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/minimist": { + "version": "1.2.8", "dev": true, "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/minipass": { + "version": "7.1.2", "dev": true, "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" + "engines": { + "node": ">=16 || 14 >=14.17" } }, - "node_modules/magic-string": { - "version": "0.30.11", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", - "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "node_modules/minipass-collect": { + "version": "2.0.1", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" } }, - "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==", + "node_modules/minipass-fetch": { + "version": "4.0.1", "dev": true, "license": "MIT", "dependencies": { - "semver": "^7.5.3" + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^3.0.1" }, "engines": { - "node": ">=10" + "node": "^18.17.0 || >=20.5.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "encoding": "^0.1.13" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "license": "ISC" - }, - "node_modules/make-fetch-happen": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", - "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "node_modules/minipass-flush": { + "version": "1.0.5", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" + "minipass": "^3.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 8" } }, - "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==", + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "license": "MIT", - "peer": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/md5-file": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-5.0.0.tgz", - "integrity": "sha512-xbEFXCYVWrSx/gEKS1VPlg84h/4L20znVIulKw6kMfmBUAZNAnF00eczz9ICMl+/hjQGo5KSXRxbL/47X3rmMw==", + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", "dev": true, - "license": "MIT", - "bin": { - "md5-file": "cli.js" + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=8" } }, - "node_modules/mdn-data": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", - "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "license": "CC0-1.0", - "peer": true + "license": "ISC" }, - "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==", + "node_modules/minipass-sized": { + "version": "1.0.3", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/memfs": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.23.0.tgz", - "integrity": "sha512-SucHN2lcWf0jrnw+jP6FoVW6l/zGJiXfNMdApZzG0x/0mAIMdwAeR5mjfsCH5U3BoqpUEtqzz+dSQSO0H/eqxg==", + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", "dev": true, - "license": "Apache-2.0", + "license": "ISC", "dependencies": { - "@jsonjoy.com/json-pack": "^1.0.3", - "@jsonjoy.com/util": "^1.3.0", - "tree-dump": "^1.0.1", - "tslib": "^2.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">= 4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "node": ">=8" } }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "3.1.0", "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, "engines": { - "node": ">= 0.10.0" + "node": ">= 18" } }, - "node_modules/meow": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "node_modules/mkdirp": { + "version": "0.5.6", "dev": true, "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "license": "MIT", "peer": true, "engines": { - "node": ">=16.10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, - "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==", + "node_modules/mrmime": { + "version": "2.0.1", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" } }, - "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==", + "node_modules/ms": { + "version": "2.1.3", "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==", + "node_modules/msgpackr": { + "version": "1.11.5", "dev": true, "license": "MIT", - "engines": { - "node": ">= 8" + "optional": true, + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "node_modules/msgpackr-extract": { + "version": "3.0.3", "dev": true, + "hasInstallScript": true, "license": "MIT", - "engines": { - "node": ">= 0.6" + "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/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "node_modules/multicast-dns": { + "version": "7.2.5", "dev": true, "license": "MIT", "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" }, - "engines": { - "node": ">=8.6" + "bin": { + "multicast-dns": "cli.js" } }, - "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==", + "node_modules/mute-stream": { + "version": "2.0.0", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "node_modules/nanoid": { + "version": "3.3.11", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "bin": { - "mime": "cli.js" + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": ">=4.0.0" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "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==", + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/needle": { + "version": "3.3.1", "dev": true, "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, "engines": { - "node": ">= 0.6" + "node": ">= 4.4.x" } }, - "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==", + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "mime-db": "1.52.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "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==", + "node_modules/negotiator": { + "version": "1.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "node_modules/neo-async": { + "version": "2.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/ng-packagr": { + "version": "20.3.2", "dev": true, "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@rollup/plugin-json": "^6.1.0", + "@rollup/wasm-node": "^4.24.0", + "ajv": "^8.17.1", + "ansi-colors": "^4.1.3", + "browserslist": "^4.22.1", + "chokidar": "^4.0.1", + "commander": "^14.0.0", + "dependency-graph": "^1.0.0", + "esbuild": "^0.25.0", + "find-cache-directory": "^6.0.0", + "injection-js": "^2.4.0", + "jsonc-parser": "^3.3.1", + "less": "^4.2.0", + "ora": "^8.2.0", + "piscina": "^5.0.0", + "postcss": "^8.4.47", + "rollup-plugin-dts": "^6.2.0", + "rxjs": "^7.8.1", + "sass": "^1.81.0", + "tinyglobby": "^0.2.12" + }, + "bin": { + "ng-packagr": "src/cli/main.js" + }, "engines": { - "node": ">=18" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "rollup": "^4.24.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^20.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "tslib": "^2.3.0", + "typescript": ">=5.8 <6.0" + }, + "peerDependenciesMeta": { + "tailwindcss": { + "optional": true + } } }, - "node_modules/mini-css-extract-plugin": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", - "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", + "node_modules/ngx-currency": { + "version": "19.0.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.5.0" + }, + "peerDependencies": { + "@angular/common": "^19.0.0", + "@angular/core": "^19.0.0", + "@angular/forms": "^19.0.0" + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "6.1.0", "dev": true, "license": "MIT", + "optional": true + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "license": "MIT", "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" }, "engines": { - "node": ">= 12.13.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" + "url": "https://opencollective.com/node-fetch" } }, - "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==", + "node_modules/node-forge": { + "version": "1.3.3", "dev": true, - "license": "ISC" + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } }, - "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/node-gyp": { + "version": "11.5.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "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" }, - "engines": { - "node": ">=16 || 14 >=14.17" + "bin": { + "node-gyp": "bin/node-gyp.js" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "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/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "node_modules/node-gyp/node_modules/chownr": { + "version": "3.0.0", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=18" } }, - "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==", + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", "dev": true, "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16" } }, - "node_modules/minipass-fetch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "node_modules/node-gyp/node_modules/tar": { + "version": "7.5.2", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" + "node": ">=18" } }, - "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==", + "node_modules/node-gyp/node_modules/which": { + "version": "5.0.0", "dev": true, "license": "ISC", "dependencies": { - "minipass": "^3.0.0" + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": ">= 8" + "node": "^18.17.0 || >=20.5.0" } }, - "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==", + "node_modules/node-gyp/node_modules/yallist": { + "version": "5.0.0", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": ">=8" + "node": ">=18" } }, - "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==", + "node_modules/node-releases": { + "version": "2.0.27", "dev": true, - "license": "ISC" + "license": "MIT" }, - "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==", + "node_modules/nopt": { + "version": "8.1.0", "dev": true, "license": "ISC", "dependencies": { - "minipass": "^3.0.0" + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "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==", + "node_modules/normalize-package-data": { + "version": "2.5.0", "dev": true, - "license": "ISC", + "license": "BSD-2-Clause", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "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==", + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "2.8.9", "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==", + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", "dev": true, "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" + "bin": { + "semver": "bin/semver" } }, - "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==", + "node_modules/normalize-path": { + "version": "3.0.0", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "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": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "node_modules/normalize-range": { + "version": "0.1.2", "dev": true, "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "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==", + "node_modules/npm-bundled": { + "version": "4.0.0", "dev": true, "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "npm-normalize-package-bin": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/minizlib/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/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/npm-force-resolutions": { + "version": "0.0.10", "dev": true, "license": "MIT", "dependencies": { - "minimist": "^1.2.6" + "json-format": "^1.0.1", + "source-map-support": "^0.5.5", + "xmlhttprequest": "^1.8.0" }, "bin": { - "mkdirp": "bin/cmd.js" + "npm-force-resolutions": "index.js" } }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "license": "MIT", - "peer": true, + "node_modules/npm-install-checks": { + "version": "7.1.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, "engines": { - "node": "*" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/mrmime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "node_modules/npm-normalize-package-bin": { + "version": "4.0.0", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=10" + "node": "^18.17.0 || >=20.5.0" } }, - "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==", + "node_modules/npm-package-arg": { + "version": "13.0.0", "dev": true, - "license": "MIT", - "optionalDependencies": { - "msgpackr-extract": "^3.0.2" + "license": "ISC", + "dependencies": { + "hosted-git-info": "^9.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/msgpackr-extract": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", - "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", + "node_modules/npm-packlist": { + "version": "10.0.3", "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, + "license": "ISC", "dependencies": { - "node-gyp-build-optional-packages": "5.2.2" - }, - "bin": { - "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" }, - "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" + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "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==", + "node_modules/npm-packlist/node_modules/proc-log": { + "version": "6.1.0", "dev": true, - "license": "MIT", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "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==", + "node_modules/npm-pick-manifest": { + "version": "10.0.0", "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": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "node_modules/npm-pick-manifest/node_modules/hosted-git-info": { + "version": "8.1.0", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "node_modules/npm-pick-manifest/node_modules/lru-cache": { + "version": "10.4.3", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/needle": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", - "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { + "version": "12.0.2", "dev": true, - "license": "MIT", - "optional": true, + "license": "ISC", "dependencies": { - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" }, - "bin": { - "needle": "bin/needle" + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "18.0.2", + "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": ">= 4.4.x" + "node": "^18.17.0 || >=20.5.0" } }, - "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==", + "node_modules/npm-registry-fetch/node_modules/hosted-git-info": { + "version": "8.1.0", "dev": true, - "license": "MIT", - "optional": true, + "license": "ISC", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "lru-cache": "^10.0.1" }, "engines": { - "node": ">=0.10.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "10.4.3", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } + "license": "ISC" }, - "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==", + "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { + "version": "12.0.2", "dev": true, - "license": "MIT" + "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/ng-packagr": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-18.2.1.tgz", - "integrity": "sha512-dy9ZDpZb3QpAz+Y/m8VAu7ctr2VrnRU3gmQwJagnNybVJtCsKn3lZA3IW7Z7GTLoG5IALSPouiCgiB/C8ozv7w==", + "node_modules/npm-run-all": { + "version": "4.1.5", "dev": true, "license": "MIT", "dependencies": { - "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-node-resolve": "^15.2.3", - "@rollup/wasm-node": "^4.18.0", - "ajv": "^8.12.0", - "ansi-colors": "^4.1.3", - "browserslist": "^4.22.1", - "cacache": "^18.0.0", - "chokidar": "^3.5.3", - "commander": "^12.0.0", - "convert-source-map": "^2.0.0", - "dependency-graph": "^1.0.0", - "esbuild": "^0.23.0", - "fast-glob": "^3.3.1", - "find-cache-dir": "^3.3.2", - "injection-js": "^2.4.0", - "jsonc-parser": "^3.2.0", - "less": "^4.2.0", - "ora": "^5.1.0", - "piscina": "^4.4.0", - "postcss": "^8.4.31", - "rxjs": "^7.8.1", - "sass": "^1.69.5" + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" }, "bin": { - "ng-packagr": "cli/main.js" + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" }, "engines": { - "node": "^18.19.1 || >=20.11.1" - }, - "optionalDependencies": { - "rollup": "^4.18.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^18.0.0 || ^18.2.0-next.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "tslib": "^2.3.0", - "typescript": ">=5.4 <5.6" - }, - "peerDependenciesMeta": { - "tailwindcss": { - "optional": true - } + "node": ">= 4" } }, - "node_modules/ng-packagr/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "node_modules/npm-run-all/node_modules/brace-expansion": { + "version": "1.1.12", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/ng-packagr/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/ng-packagr/node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "node_modules/npm-run-all/node_modules/chalk": { + "version": "2.4.2", "dev": true, "license": "MIT", "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + "node": ">=4" } }, - "node_modules/ng-packagr/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.6", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" }, "engines": { - "node": ">=8" + "node": ">=4.8" } }, - "node_modules/ng-packagr/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/npm-run-all/node_modules/escape-string-regexp": { + "version": "1.0.5", "dev": true, "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, "engines": { - "node": ">=8" + "node": ">=0.8.0" } }, - "node_modules/ng-packagr/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/npm-run-all/node_modules/has-flag": { + "version": "3.0.0", "dev": true, "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/ng-packagr/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/npm-run-all/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "p-try": "^2.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, - "node_modules/ng-packagr/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", "dev": true, "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/ng-packagr/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==", + "node_modules/npm-run-all/node_modules/semver": { + "version": "5.7.2", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/ng-packagr/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^4.0.0" + "shebang-regex": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/ng-packagr/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ngx-currency": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/ngx-currency/-/ngx-currency-18.0.0.tgz", - "integrity": "sha512-+TkZZ3wS9/D8zCFqGeh0DXnd4Ava/YUKVHKOc1xbnSV1CC8j+mJ2AkQCSPy3pN59bJDQtZfNwthWzByCUz8uLQ==", + "node_modules/npm-run-all/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, "license": "MIT", "dependencies": { - "tslib": "^2.5.0" + "has-flag": "^3.0.0" }, - "peerDependencies": { - "@angular/common": "^18.0.0", - "@angular/core": "^18.0.0", - "@angular/forms": "^18.0.0" + "engines": { + "node": ">=4" } }, - "node_modules/ngx-mat-intl-tel-input": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ngx-mat-intl-tel-input/-/ngx-mat-intl-tel-input-5.0.0.tgz", - "integrity": "sha512-3XwA0zzcxBF/p+BQqBuGxPa7Mi+upehbrR6WvgwWcd+T9NcjImNEAf/Pd8R37OarN3fLrxFq/8g6B2zqYZtBCg==", - "license": "MIT", + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", "dependencies": { - "tslib": "^2.x" + "isexe": "^2.0.0" }, - "peerDependencies": { - "@angular/common": ">=14.x", - "@angular/core": ">=14.x", - "@angular/forms": ">=14.x", - "@angular/platform-browser": ">=14.x", - "@angular/platform-browser-dynamic": ">=14.x", - "libphonenumber-js": "^1.10.11" + "bin": { + "which": "bin/which" } }, - "node_modules/nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "node_modules/npm-run-path": { + "version": "2.0.2", "dev": true, - "hasInstallScript": true, "license": "MIT", - "optional": true, - "os": [ - "!win32" - ], "dependencies": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/nice-napi/node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true, - "license": "MIT" - }, - "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==", + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", "dev": true, - "license": "MIT" - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "deprecated": "Use your platform's native DOMException instead", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], "license": "MIT", "engines": { - "node": ">=10.5.0" + "node": ">=4" } }, - "node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "license": "MIT", + "node_modules/nth-check": { + "version": "2.1.1", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "boolbase": "^1.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "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" + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/node-gyp": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.3.1.tgz", - "integrity": "sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ==", + "node_modules/object-assign": { + "version": "4.1.1", "dev": true, "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^13.0.0", - "nopt": "^7.0.0", - "proc-log": "^4.1.0", - "semver": "^7.3.5", - "tar": "^6.2.1", - "which": "^4.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/node-gyp-build": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", - "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "node_modules/object-inspect": { + "version": "1.13.4", "dev": true, "license": "MIT", - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/object-keys": { + "version": "1.1.1", "dev": true, "license": "MIT", - "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" + "engines": { + "node": ">= 0.4" } }, - "node_modules/node-gyp/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==", + "node_modules/object.assign": { + "version": "4.1.7", "dev": true, - "license": "ISC", + "license": "MIT", "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" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/object.entries": { + "version": "1.1.9", "dev": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, "engines": { - "node": ">=16" + "node": ">= 0.4" } }, - "node_modules/node-gyp/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "node_modules/object.fromentries": { + "version": "2.0.8", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true, - "license": "MIT" - }, - "node_modules/nopt": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", - "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "node_modules/object.groupby": { + "version": "1.0.3", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "abbrev": "^2.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 0.4" } }, - "node_modules/normalize-package-data": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "node_modules/object.values": { + "version": "1.2.1", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/obuf": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", "dev": true, "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "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==", + "node_modules/on-headers": { + "version": "1.1.0", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/npm-bundled": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", - "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", + "node_modules/once": { + "version": "1.4.0", "dev": true, "license": "ISC", "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "wrappy": "1" } }, - "node_modules/npm-force-resolutions": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/npm-force-resolutions/-/npm-force-resolutions-0.0.10.tgz", - "integrity": "sha512-Jscex+xIU6tw3VsyrwxM1TeT+dd9Fd3UOMAjy6J1TMpuYeEqg4LQZnATQO5vjPrsARm3und6zc6Dii/GUyRE5A==", + "node_modules/onetime": { + "version": "7.0.0", "dev": true, "license": "MIT", "dependencies": { - "json-format": "^1.0.1", - "source-map-support": "^0.5.5", - "xmlhttprequest": "^1.8.0" + "mimic-function": "^5.0.0" }, - "bin": { - "npm-force-resolutions": "index.js" + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-install-checks": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", - "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/open": { + "version": "10.2.0", + "license": "MIT", "dependencies": { - "semver": "^7.1.1" + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-package-arg": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", - "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", + "node_modules/optionator": { + "version": "0.9.4", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" + "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": "^16.14.0 || >=18.0.0" + "node": ">= 0.8.0" } }, - "node_modules/npm-packlist": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", - "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", + "node_modules/ora": { + "version": "8.2.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "ignore-walk": "^6.0.4" + "chalk": "^5.3.0", + "cli-cursor": "^5.0.0", + "cli-spinners": "^2.9.2", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.0.0", + "log-symbols": "^6.0.0", + "stdin-discarder": "^0.2.2", + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-pick-manifest": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz", - "integrity": "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==", + "node_modules/ordered-binary": { + "version": "1.6.0", "dev": true, - "license": "ISC", + "license": "MIT", + "optional": true + }, + "node_modules/own-keys": { + "version": "1.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^11.0.0", - "semver": "^7.3.5" + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm-registry-fetch": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz", - "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==", + "node_modules/p-finally": { + "version": "1.0.0", "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/redact": "^2.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^13.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minizlib": "^2.1.2", - "npm-package-arg": "^11.0.0", - "proc-log": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "node_modules/p-limit": { + "version": "4.0.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "bin": { - "npm-run-all": "bin/npm-run-all/index.js", - "run-p": "bin/run-p/index.js", - "run-s": "bin/run-s/index.js" + "yocto-queue": "^1.0.0" }, "engines": { - "node": ">= 4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-run-all/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==", + "node_modules/p-locate": { + "version": "6.0.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "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/npm-run-all/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/p-map": { + "version": "7.0.4", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-run-all/node_modules/cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "node_modules/p-retry": { + "version": "6.2.1", "dev": true, "license": "MIT", "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" }, "engines": { - "node": ">=4.8" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-run-all/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", "dev": true, "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">= 4" } }, - "node_modules/npm-run-all/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/package-json-from-dist": { + "version": "1.0.1", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } + "license": "BlueOak-1.0.0" }, - "node_modules/npm-run-all/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/pacote": { + "version": "21.0.0", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "@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": "^10.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": "*" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm-run-all/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "node_modules/pacote/node_modules/hosted-git-info": { + "version": "8.1.0", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, "engines": { - "node": ">=4" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm-run-all/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/pacote/node_modules/lru-cache": { + "version": "10.4.3", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } + "license": "ISC" }, - "node_modules/npm-run-all/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "node_modules/pacote/node_modules/npm-package-arg": { + "version": "12.0.2", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "shebang-regex": "^1.0.0" + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm-run-all/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "node_modules/parent-module": { + "version": "2.0.0", "dev": true, "license": "MIT", + "peer": true, + "dependencies": { + "callsites": "^3.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/npm-run-all/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/parse-json": { + "version": "5.2.0", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@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": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-run-all/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/parse-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "8.0.0", + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" + "entities": "^6.0.0" }, - "bin": { - "which": "bin/which" + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "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==", + "node_modules/parse5-html-rewriting-stream": { + "version": "8.0.0", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "boolbase": "^1.0.0" + "entities": "^6.0.0", + "parse5": "^8.0.0", + "parse5-sax-parser": "^8.0.0" }, "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "url": "https://github.com/inikulin/parse5?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==", + "node_modules/parse5-html-rewriting-stream/node_modules/entities": { + "version": "6.0.1", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "engines": { - "node": ">=0.10.0" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "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==", + "node_modules/parse5-sax-parser": { + "version": "8.0.0", "dev": true, "license": "MIT", + "dependencies": { + "parse5": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "license": "BSD-2-Clause", "engines": { - "node": ">= 0.4" + "node": ">=0.12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "node_modules/parseurl": { + "version": "1.3.3", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">= 0.8" } }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "node_modules/path-exists": { + "version": "5.0.0", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, + "peer": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/object.entries": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "node_modules/path-is-absolute": { + "version": "1.0.1", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.1.1" - }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "node_modules/path-key": { + "version": "3.1.1", "dev": true, "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=16 || 14 >=14.18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "dev": true, + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "8.3.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "node_modules/path-type": { + "version": "3.0.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" + "pify": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=4" } }, - "node_modules/object.values": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "node_modules/pend": { + "version": "1.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "node_modules/pidtree": { + "version": "0.3.1", "dev": true, - "license": "MIT" + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } }, - "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==", + "node_modules/pify": { + "version": "3.0.0", "dev": true, "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "node_modules/on-headers": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", - "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "node_modules/piscina": { + "version": "5.1.3", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=20.x" + }, + "optionalDependencies": { + "@napi-rs/nice": "^1.0.4" } }, - "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==", + "node_modules/pkce-challenge": { + "version": "5.0.1", "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" + "license": "MIT", + "engines": { + "node": ">=16.20.0" } }, - "node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "node_modules/pkg-dir": { + "version": "8.0.0", "dev": true, "license": "MIT", "dependencies": { - "mimic-function": "^5.0.0" + "find-up-simple": "^1.0.0" }, "engines": { "node": ">=18" @@ -17216,1054 +15588,918 @@ "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==", - "license": "MIT", + "node_modules/playwright": { + "version": "1.57.0", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^3.1.0" + "playwright-core": "1.57.0" + }, + "bin": { + "playwright": "cli.js" }, "engines": { "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "fsevents": "2.3.2" } }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "node_modules/playwright-core": { + "version": "1.57.0", "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" + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" }, "engines": { - "node": ">= 0.8.0" + "node": ">=18" } }, - "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==", + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", "dev": true, "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" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "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==", + "node_modules/possible-typed-array-names": { + "version": "1.1.0", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.4" } }, - "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==", + "node_modules/postcss": { + "version": "8.5.6", "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": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^10 || ^12 || >=14" } }, - "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==", + "node_modules/postcss-html": { + "version": "1.8.0", "dev": true, "license": "MIT", "dependencies": { - "restore-cursor": "^3.1.0" + "htmlparser2": "^8.0.0", + "js-tokens": "^9.0.0", + "postcss": "^8.5.0", + "postcss-safe-parser": "^6.0.0" }, "engines": { - "node": ">=8" + "node": "^12 || >=14" } }, - "node_modules/ora/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==", + "node_modules/postcss-html/node_modules/htmlparser2": { + "version": "8.0.2", "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" } }, - "node_modules/ora/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==", + "node_modules/postcss-html/node_modules/js-tokens": { + "version": "9.0.1", "dev": true, "license": "MIT" }, - "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==", + "node_modules/postcss-loader": { + "version": "8.1.1", "dev": true, "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" + "cosmiconfig": "^9.0.0", + "jiti": "^1.20.0", + "semver": "^7.5.4" }, "engines": { - "node": ">=6" + "node": ">= 18.12.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "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/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==", + "node_modules/postcss-loader/node_modules/jiti": { + "version": "1.21.7", "dev": true, "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" + "bin": { + "jiti": "bin/jiti.js" } }, - "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==", + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", "dev": true, - "license": "ISC" + "license": "MIT" }, - "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==", + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", "dev": true, - "license": "MIT" + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", "dev": true, "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "node_modules/postcss-modules-scope": { + "version": "3.2.1", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": ">= 0.4" + "node": "^10 || ^12 || >= 14" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/p-limit": { + "node_modules/postcss-modules-values": { "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", + "license": "ISC", "dependencies": { - "yocto-queue": "^1.0.0" + "icss-utils": "^5.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^10 || ^12 || >= 14" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/p-locate": { + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/postcss-safe-parser": { "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" + "node": ">=12.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "node_modules/postcss-selector-parser": { + "version": "7.1.1", "dev": true, "license": "MIT", "dependencies": { - "aggregate-error": "^3.0.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "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==", + "node_modules/postcss-styled-syntax": { + "version": "0.6.4", "dev": true, "license": "MIT", "dependencies": { - "@types/retry": "0.12.2", - "is-network-error": "^1.0.0", - "retry": "^0.13.1" + "typescript": "^5.3.3" }, "engines": { - "node": ">=16.17" + "node": ">=14.17" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.4.21" } }, - "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==", + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", "dev": true, "license": "MIT", "engines": { - "node": ">= 4" + "node": ">= 0.8.0" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/prettier": { + "version": "3.7.4", "dev": true, "license": "MIT", + "peer": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, "engines": { - "node": ">=6" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "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==", + "node_modules/proc-log": { + "version": "5.0.0", "dev": true, - "license": "BlueOak-1.0.0" + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, - "node_modules/pacote": { - "version": "18.0.6", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz", - "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==", + "node_modules/process-nextick-args": { + "version": "2.0.1", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "@npmcli/git": "^5.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/package-json": "^5.1.0", - "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^8.0.0", - "cacache": "^18.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^11.0.0", - "npm-packlist": "^8.0.0", - "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^17.0.0", - "proc-log": "^4.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^2.2.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" + "err-code": "^2.0.2", + "retry": "^0.12.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/parent-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-2.0.0.tgz", - "integrity": "sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg==", + "node_modules/prop-types": { + "version": "15.8.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "callsites": "^3.1.0" - }, - "engines": { - "node": ">=8" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, - "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==", + "node_modules/proxy-addr": { + "version": "2.0.7", "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" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.10" } }, - "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": { + "node_modules/prr": { "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" - } + "optional": true }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "devOptional": true, + "node_modules/pump": { + "version": "3.0.3", + "dev": true, "license": "MIT", "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "end-of-stream": "^1.1.0", + "once": "^1.3.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==", + "node_modules/punycode": { + "version": "1.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/qified": { + "version": "0.5.2", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "entities": "^4.3.0", - "parse5": "^7.0.0", - "parse5-sax-parser": "^7.0.0" + "hookified": "^1.13.0" }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "engines": { + "node": ">=20" } }, - "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==", + "node_modules/qjobs": { + "version": "1.2.0", "dev": true, "license": "MIT", - "dependencies": { - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "engines": { + "node": ">=0.9" } }, - "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==", - "devOptional": true, - "license": "BSD-2-Clause", + "node_modules/qs": { + "version": "6.14.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, "engines": { - "node": ">=0.12" + "node": ">=0.6" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/queue-microtask": { + "version": "1.2.3", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } + "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/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==", + "node_modules/randombytes": { + "version": "2.1.0", "dev": true, "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "dependencies": { + "safe-buffer": "^5.1.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==", + "node_modules/range-parser": { + "version": "1.2.1", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "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==", + "node_modules/raw-body": { + "version": "3.0.2", "dev": true, "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.10" } }, - "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==", + "node_modules/react-is": { + "version": "16.13.1", "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==", + "node_modules/read-pkg": { + "version": "3.0.0", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" }, "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=4" } }, - "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": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/readable-stream": { + "version": "2.3.8", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "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/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", "dev": true, "license": "MIT" }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "node_modules/readdirp": { + "version": "4.1.2", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 14.18.0" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "node_modules/rechoir": { + "version": "0.6.2", "dev": true, - "license": "MIT", - "bin": { - "pidtree": "bin/pidtree.js" + "dependencies": { + "resolve": "^1.1.6" }, "engines": { - "node": ">=0.10" + "node": ">= 0.10" } }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "node_modules/refa": { + "version": "0.12.1", "dev": true, "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.8.0" + }, "engines": { - "node": ">=4" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/piscina": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.6.1.tgz", - "integrity": "sha512-z30AwWGtQE+Apr+2WBZensP2lIvwoaMcOPkQlIEmSGMJNUvaYACylPYrQM6wSdUNJlnDVMSpLv7xTMJqlVshOA==", + "node_modules/reflect-metadata": { + "version": "0.2.2", "dev": true, - "license": "MIT", - "optionalDependencies": { - "nice-napi": "^1.0.2" - } + "license": "Apache-2.0" }, - "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==", + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^6.3.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" }, "engines": { - "node": ">=14.16" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/regenerate": { + "version": "1.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" + "regenerate": "^1.4.2" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/playwright": { - "version": "1.54.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.54.1.tgz", - "integrity": "sha512-peWpSwIBmSLi6aW2auvrUtf2DqY16YYcCMO8rTVx486jKmDTJg7UAhyrraP98GB8BoPURZP8+nxO7TSd4cPr5g==", + "node_modules/regex-parser": { + "version": "2.3.1", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.54.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } + "license": "MIT" }, - "node_modules/playwright-core": { - "version": "1.54.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.54.1.tgz", - "integrity": "sha512-Nbjs2zjj0htNhzgiy5wu+3w09YetDx5pkrpI/kZotDlDUaYk0HVA5xrBVPdow4SAUIlhgKcJeJg4GRKW6xHusA==", + "node_modules/regexp-ast-analysis": { + "version": "0.7.1", "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.8.0", + "refa": "^0.12.1" }, "engines": { - "node": ">=18" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/playwright/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "node_modules/regexp-to-ast": { + "version": "0.5.0", "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } + "license": "MIT" }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "node_modules/regexpu-core": { + "version": "6.4.0", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "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": "^10 || ^12 || >=14" + "node": ">=4" } }, - "node_modules/postcss-html": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.8.0.tgz", - "integrity": "sha512-5mMeb1TgLWoRKxZ0Xh9RZDfwUUIqRrcxO2uXO+Ezl1N5lqpCiSU5Gk6+1kZediBfBHFtPCdopr2UZ2SgUsKcgQ==", + "node_modules/regjsgen": { + "version": "0.8.0", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.13.0", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "htmlparser2": "^8.0.0", - "js-tokens": "^9.0.0", - "postcss": "^8.5.0", - "postcss-safe-parser": "^6.0.0" + "jsesc": "~3.1.0" }, - "engines": { - "node": "^12 || >=14" + "bin": { + "regjsparser": "bin/parser" } }, - "node_modules/postcss-html/node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "node_modules/require-directory": { + "version": "2.1.1", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "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==", + "node_modules/require-from-string": { + "version": "2.0.2", "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": ">=0.10.0" } }, - "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==", + "node_modules/requireindex": { + "version": "1.2.0", "dev": true, "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" + "engines": { + "node": ">=0.10.5" } }, - "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==", + "node_modules/requires-port": { + "version": "1.0.0", "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==", + "node_modules/resolve": { + "version": "1.22.10", "dev": true, - "license": "ISC", + "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": "^10 || ^12 || >= 14" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.1.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/resolve-from": { + "version": "5.0.0", "dev": true, "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.1.0" - }, + "peer": true, "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">=8" } }, - "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==", + "node_modules/resolve-url-loader": { + "version": "5.0.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^7.0.0" + "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": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">=12" } }, - "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==", + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "icss-utils": "^5.0.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">=8.9.0" } }, - "node_modules/postcss-resolve-nested-selector": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", - "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", "dev": true, - "license": "MIT", - "peer": true + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "node_modules/restore-cursor": { + "version": "5.1.0", "dev": true, "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, "engines": { - "node": ">=12.0" + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.3.3" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/retry": { + "version": "0.12.0", "dev": true, "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, "engines": { - "node": ">=4" + "node": ">= 4" } }, - "node_modules/postcss-styled-syntax": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/postcss-styled-syntax/-/postcss-styled-syntax-0.6.4.tgz", - "integrity": "sha512-uWiLn+9rKgIghUYmTHvXMR6MnyPULMe9Gv3bV537Fg4FH6CA6cn21WMjKss2Qb98LUhT847tKfnRGG3FhSOgUQ==", + "node_modules/reusify": { + "version": "1.1.0", "dev": true, "license": "MIT", - "dependencies": { - "typescript": "^5.3.3" - }, "engines": { - "node": ">=14.17" - }, - "peerDependencies": { - "postcss": "^8.4.21" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "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==", + "node_modules/rfdc": { + "version": "1.4.1", "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==", + "node_modules/rimraf": { + "version": "3.0.2", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/prettier": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "node_modules/rollup": { + "version": "4.52.3", "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "@types/estree": "1.0.8" + }, "bin": { - "prettier": "bin/prettier.cjs" + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=14" + "node": ">=18.0.0", + "npm": ">=8.0.0" }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.52.3", + "@rollup/rollup-android-arm64": "4.52.3", + "@rollup/rollup-darwin-arm64": "4.52.3", + "@rollup/rollup-darwin-x64": "4.52.3", + "@rollup/rollup-freebsd-arm64": "4.52.3", + "@rollup/rollup-freebsd-x64": "4.52.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.3", + "@rollup/rollup-linux-arm-musleabihf": "4.52.3", + "@rollup/rollup-linux-arm64-gnu": "4.52.3", + "@rollup/rollup-linux-arm64-musl": "4.52.3", + "@rollup/rollup-linux-loong64-gnu": "4.52.3", + "@rollup/rollup-linux-ppc64-gnu": "4.52.3", + "@rollup/rollup-linux-riscv64-gnu": "4.52.3", + "@rollup/rollup-linux-riscv64-musl": "4.52.3", + "@rollup/rollup-linux-s390x-gnu": "4.52.3", + "@rollup/rollup-linux-x64-gnu": "4.52.3", + "@rollup/rollup-linux-x64-musl": "4.52.3", + "@rollup/rollup-openharmony-arm64": "4.52.3", + "@rollup/rollup-win32-arm64-msvc": "4.52.3", + "@rollup/rollup-win32-ia32-msvc": "4.52.3", + "@rollup/rollup-win32-x64-gnu": "4.52.3", + "@rollup/rollup-win32-x64-msvc": "4.52.3", + "fsevents": "~2.3.2" } }, - "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-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true, - "license": "ISC" - }, - "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==", + "node_modules/rollup-plugin-dts": { + "version": "6.3.0", "dev": true, - "license": "MIT", + "license": "LGPL-3.0-only", "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" + "magic-string": "^0.30.21" }, "engines": { - "node": ">=10" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/Swatinem" + }, + "optionalDependencies": { + "@babel/code-frame": "^7.27.1" + }, + "peerDependencies": { + "rollup": "^3.29.4 || ^4", + "typescript": "^4.5 || ^5.0" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "node_modules/rollup-plugin-dts/node_modules/magic-string": { + "version": "0.30.21", "dev": true, "license": "MIT", "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, - "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==", + "node_modules/router": { + "version": "2.2.0", "dev": true, "license": "MIT", "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">= 18" } }, - "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, + "node_modules/run-applescript": { + "version": "7.1.0", "license": "MIT", "engines": { - "node": ">= 0.10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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/pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "node_modules/run-parallel": { + "version": "1.2.0", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "queue-microtask": "^1.2.2" } }, - "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/rxjs": { + "version": "7.8.2", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" } }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "node_modules/safe-array-concat": { + "version": "1.1.3", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "side-channel": "^1.0.6" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" }, "engines": { - "node": ">=0.6" + "node": ">=0.4" }, "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==", + "node_modules/safe-buffer": { + "version": "5.2.1", "dev": true, "funding": [ { @@ -18281,3764 +16517,3287 @@ ], "license": "MIT" }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/safe-push-apply": { + "version": "1.0.0", "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "^5.1.0" + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "node_modules/safe-regex-test": { + "version": "1.1.0", "dev": true, "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/safer-buffer": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.90.0", "dev": true, "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" }, "engines": { - "node": ">= 0.8" + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" } }, - "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==", + "node_modules/sass-loader": { + "version": "16.0.5", "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "neo-async": "^2.6.2" }, "engines": { - "node": ">=0.10.0" + "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/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "node_modules/sax": { + "version": "1.4.3", "dev": true, - "license": "MIT" + "license": "BlueOak-1.0.0", + "optional": true }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "node_modules/schema-utils": { + "version": "4.3.3", "dev": true, "license": "MIT", "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">=4" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "node_modules/schema-utils/node_modules/ajv-formats": { + "version": "2.1.1", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/scslre": { + "version": "0.3.0", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "@eslint-community/regexpp": "^4.8.0", + "refa": "^0.12.0", + "regexp-ast-analysis": "^0.7.0" + }, + "engines": { + "node": "^14.0.0 || >=16.0.0" } }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "node_modules/select-hose": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", "dev": true, "license": "MIT", "dependencies": { - "pify": "^3.0.0" + "@types/node-forge": "^1.3.0", + "node-forge": "^1" }, "engines": { - "node": ">=4" + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-dsl": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^5.3.0" } }, - "node_modules/read-pkg/node_modules/semver": { + "node_modules/semver-dsl/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", "bin": { "semver": "bin/semver" } }, - "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==", + "node_modules/send": { + "version": "1.2.0", "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" }, "engines": { - "node": ">= 6" + "node": ">= 18" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/serialize-javascript": { + "version": "6.0.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", "dev": true, "license": "MIT", "dependencies": { - "picomatch": "^2.2.1" + "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": ">=8.10.0" + "node": ">= 0.8.0" } }, - "node_modules/readdirp/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/serve-index/node_modules/accepts": { + "version": "1.3.8", "dev": true, "license": "MIT", - "engines": { - "node": ">=8.6" + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "engines": { + "node": ">= 0.6" } }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", "dev": true, + "license": "MIT", "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" + "ms": "2.0.0" } }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", "dev": true, - "license": "Apache-2.0" + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "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==", + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "node_modules/serve-index/node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/mime-types": { + "version": "2.1.35", "dev": true, "license": "MIT", "dependencies": { - "regenerate": "^1.4.2" + "mime-db": "1.52.0" }, "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "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==", + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", "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==", + "node_modules/serve-index/node_modules/negotiator": { + "version": "0.6.3", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/regexp-to-ast": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz", - "integrity": "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==", + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "node_modules/serve-static": { + "version": "2.2.0", "dev": true, "license": "MIT", "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" }, "engines": { - "node": ">=4" + "node": ">= 18" } }, - "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.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "node_modules/set-function-length": { + "version": "1.2.2", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "jsesc": "~3.0.2" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" }, - "bin": { - "regjsparser": "bin/parser" + "engines": { + "node": ">= 0.4" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "node_modules/set-function-name": { + "version": "2.0.2", "dev": true, "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" }, "engines": { - "node": ">=6" + "node": ">= 0.4" } }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "node_modules/set-proto": { + "version": "1.0.0", "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, "engines": { - "node": ">=0.10" + "node": ">= 0.4" } }, - "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==", + "node_modules/setprototypeof": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", "dev": true, "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "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==", + "node_modules/shebang-command": { + "version": "2.0.0", "dev": true, "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", + "node_modules/shebang-regex": { + "version": "3.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.5" + "node": ">=8" } }, - "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==", + "node_modules/shell-quote": { + "version": "1.8.3", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "node_modules/shelljs": { + "version": "0.9.2", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "execa": "^1.0.0", + "fast-glob": "^3.3.2", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" }, "bin": { - "resolve": "bin/resolve" + "shjs": "bin/shjs" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=18" } }, - "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==", + "node_modules/shx": { + "version": "0.4.0", "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "minimist": "^1.2.8", + "shelljs": "^0.9.2" + }, + "bin": { + "shx": "lib/cli.js" + }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "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==", + "node_modules/side-channel": { + "version": "1.1.0", "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" + "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": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/side-channel-list": { + "version": "1.0.0", "dev": true, "license": "MIT", "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" }, "engines": { - "node": ">=8.9.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/side-channel-map": { + "version": "1.0.1", "dev": true, - "license": "BSD-3-Clause", + "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.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "node_modules/side-channel-weakmap": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" + "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": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "node_modules/signal-exit": { + "version": "4.1.0", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">= 4" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "node_modules/sigstore": { + "version": "3.1.0", "dev": true, - "license": "MIT", + "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": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": "^18.17.0 || >=20.5.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", + "node_modules/slash": { + "version": "3.0.0", "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/rollup": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz", - "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", + "node_modules/slice-ansi": { + "version": "5.0.0", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.5" - }, - "bin": { - "rollup": "dist/bin/rollup" + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" }, "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" + "node": ">=12" }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.22.4", - "@rollup/rollup-android-arm64": "4.22.4", - "@rollup/rollup-darwin-arm64": "4.22.4", - "@rollup/rollup-darwin-x64": "4.22.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", - "@rollup/rollup-linux-arm-musleabihf": "4.22.4", - "@rollup/rollup-linux-arm64-gnu": "4.22.4", - "@rollup/rollup-linux-arm64-musl": "4.22.4", - "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", - "@rollup/rollup-linux-riscv64-gnu": "4.22.4", - "@rollup/rollup-linux-s390x-gnu": "4.22.4", - "@rollup/rollup-linux-x64-gnu": "4.22.4", - "@rollup/rollup-linux-x64-musl": "4.22.4", - "@rollup/rollup-win32-arm64-msvc": "4.22.4", - "@rollup/rollup-win32-ia32-msvc": "4.22.4", - "@rollup/rollup-win32-x64-msvc": "4.22.4", - "fsevents": "~2.3.2" + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/rollup/node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.3", "dev": true, - "license": "MIT" - }, - "node_modules/run-applescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", - "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", "license": "MIT", "engines": { - "node": ">=18" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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==", + "node_modules/smart-buffer": { + "version": "4.2.0", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "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/smol-toml": { + "version": "1.5.2", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" } }, - "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "node_modules/socket.io": { + "version": "4.8.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" + "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": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10.2.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==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "node_modules/socket.io-adapter": { + "version": "2.5.5", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "debug": "~4.3.4", + "ws": "~8.17.1" } }, - "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==", + "node_modules/socket.io-adapter/node_modules/debug": { + "version": "4.3.7", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" + "ms": "^2.1.3" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "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.77.6", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", - "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", + "node_modules/socket.io-parser": { + "version": "4.2.4", "dev": true, "license": "MIT", "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=10.0.0" } }, - "node_modules/sass-loader": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.0.tgz", - "integrity": "sha512-n13Z+3rU9A177dk4888czcVFiC8CL9dii4qpXWUg3YIIgZEvi9TCFKjOQcbK0kJM7DJu9VucrZFddvNfYCPwtw==", + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.7", "dev": true, "license": "MIT", "dependencies": { - "neo-async": "^2.6.2" + "ms": "^2.1.3" }, "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" + "node": ">=6.0" }, "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "webpack": { + "supports-color": { "optional": true } } }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "dev": true, - "license": "ISC", - "optional": true - }, - "node_modules/schema-utils": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", - "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", + "node_modules/socket.io/node_modules/accepts": { + "version": "1.3.8", "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" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">= 0.6" } }, - "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==", + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.7", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^8.0.0" + "ms": "^2.1.3" }, - "peerDependencies": { - "ajv": "^8.0.0" + "engines": { + "node": ">=6.0" }, "peerDependenciesMeta": { - "ajv": { + "supports-color": { "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==", + "node_modules/socket.io/node_modules/mime-db": { + "version": "1.52.0", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "node_modules/socket.io/node_modules/mime-types": { + "version": "2.1.35", "dev": true, "license": "MIT", "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" + "mime-db": "1.52.0" }, "engines": { - "node": ">=10" + "node": ">= 0.6" } }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/socket.io/node_modules/negotiator": { + "version": "0.6.3", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.6" } }, - "node_modules/semver-dsl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", - "integrity": "sha512-e8BOaTo007E3dMuQQTnPdalbKTABKNS7UxoBIDnwOqRa+QwMrCPjynB8zAlPF6xlqUfdLPPLIJ13hJNmhtq8Ng==", + "node_modules/sockjs": { + "version": "0.3.24", "dev": true, "license": "MIT", "dependencies": { - "semver": "^5.3.0" - } - }, - "node_modules/semver-dsl/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", - "bin": { - "semver": "bin/semver" + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" } }, - "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "node_modules/socks": { + "version": "2.8.7", "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" + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 10.0.0", + "npm": ">= 3.0.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==", + "node_modules/socks-proxy-agent": { + "version": "8.0.5", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" } }, - "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==", + "node_modules/source-map": { + "version": "0.7.6", "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, + "license": "BSD-3-Clause", "engines": { - "node": ">=4" + "node": ">= 12" } }, - "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==", + "node_modules/source-map-js": { + "version": "1.2.1", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "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==", + "node_modules/source-map-loader": { + "version": "5.0.0", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "randombytes": "^2.1.0" + "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/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", "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" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=0.10.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==", + "node_modules/source-map-support": { + "version": "0.5.21", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.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==", + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "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==", + "node_modules/spdx-correct": { + "version": "3.2.0", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "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==", + "node_modules/spdx-exceptions": { + "version": "2.5.0", "dev": true, - "license": "ISC" + "license": "CC-BY-3.0" }, - "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==", + "node_modules/spdx-expression-parse": { + "version": "3.0.1", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } }, - "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==", + "node_modules/spdx-license-ids": { + "version": "3.0.22", "dev": true, - "license": "ISC" + "license": "CC0-1.0" }, - "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==", + "node_modules/spdy": { + "version": "4.0.2", "dev": true, "license": "MIT", "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" + "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": ">= 0.8.0" + "node": ">=6.0.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==", + "node_modules/spdy-transport": { + "version": "3.0.0", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.8" + "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/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.2", "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 6" } }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "node_modules/split2": { + "version": "4.2.0", "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, + "license": "ISC", + "peer": true, "engines": { - "node": ">= 0.4" + "node": ">= 10.x" } }, - "node_modules/set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "node_modules/sprintf-js": { + "version": "1.1.3", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause" + }, + "node_modules/ssri": { + "version": "12.0.0", + "dev": true, + "license": "ISC", "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 0.4" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "node_modules/statuses": { + "version": "2.0.2", "dev": true, - "license": "ISC" + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "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==", + "node_modules/stdin-discarder": { + "version": "0.2.2", "dev": true, "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", "dev": true, "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "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==", + "node_modules/streamifier": { + "version": "0.1.1", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10" } }, - "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==", + "node_modules/streamroller": { + "version": "3.1.5", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8.0" } }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "node_modules/streamroller/node_modules/fs-extra": { + "version": "8.1.0", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=4" + "node": ">=6 <7 || >=8" } }, - "node_modules/shx": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz", - "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==", + "node_modules/streamroller/node_modules/jsonfile": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "minimist": "^1.2.3", - "shelljs": "^0.8.5" - }, - "bin": { - "shx": "lib/cli.js" - }, - "engines": { - "node": ">=6" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "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==", + "node_modules/streamroller/node_modules/universalify": { + "version": "0.1.2", "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": ">= 4.0.0" } }, - "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==", + "node_modules/string_decoder": { + "version": "1.1.1", "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" + "safe-buffer": "~5.1.0" } }, - "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==", + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width": { + "version": "7.2.0", "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" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", "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" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "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==", + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8" } }, - "node_modules/sigstore": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", - "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "@sigstore/sign": "^2.3.2", - "@sigstore/tuf": "^2.3.4", - "@sigstore/verify": "^1.2.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } + "license": "MIT" }, - "node_modules/slash": { + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { "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/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==", + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "node": ">=8" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "node_modules/string-width/node_modules/emoji-regex": { + "version": "10.6.0", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } + "license": "MIT" }, - "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==", + "node_modules/string.prototype.includes": { + "version": "2.0.1", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" + "node": ">= 0.4" } }, - "node_modules/smol-toml": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.4.1.tgz", - "integrity": "sha512-CxdwHXyYTONGHThDbq5XdwbFsuY4wlClRGejfE2NtwUtiHYsP1QtNsHb/hnj31jKYSchztJsaA8pSQoVzkfCFg==", + "node_modules/string.prototype.matchall": { + "version": "4.0.12", "dev": true, - "license": "BSD-3-Clause", - "peer": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, "engines": { - "node": ">= 18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/cyyynthia" + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/string.prototype.padend": { + "version": "3.1.6", "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" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "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": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/string.prototype.repeat": { + "version": "1.0.0", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, - "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==", + "node_modules/string.prototype.trim": { + "version": "1.2.10", "dev": true, "license": "MIT", "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { - "node": ">=10.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/string.prototype.trimend": { + "version": "1.0.9", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=6.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=6.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "node_modules/strip-ansi": { + "version": "7.1.2", "dev": true, "license": "MIT", "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/socks": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.6.tgz", - "integrity": "sha512-pe4Y2yzru68lXCb38aAqRf5gvN8YdjP1lok5o0J7BOHljkyCGKVz7H3vpVIXKD27rj2giOJ7DwVyk/GWrPHDWA==", + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", "dev": true, "license": "MIT", "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" + "node": ">=8" } }, - "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==", + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, "engines": { - "node": ">= 14" + "node": ">=8" } }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "node_modules/strip-bom": { + "version": "3.0.0", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=4" } }, - "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==", + "node_modules/strip-eof": { + "version": "1.0.0", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "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==", + "node_modules/strip-json-comments": { + "version": "3.1.1", "dev": true, "license": "MIT", - "dependencies": { - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, "engines": { - "node": ">= 18.12.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.72.1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/stylelint": { + "version": "16.26.1", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], "license": "MIT", + "peer": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-syntax-patches-for-csstree": "^1.0.19", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3", + "@csstools/selector-specificity": "^5.0.0", + "@dual-bundle/import-meta-resolve": "^4.2.1", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.3", + "css-tree": "^3.1.0", + "debug": "^4.4.3", + "fast-glob": "^3.3.3", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^11.1.1", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.3.1", + "ignore": "^7.0.5", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.37.0", + "mathml-tag-names": "^2.1.3", + "meow": "^13.2.0", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.5.6", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-safe-parser": "^7.0.1", + "postcss-selector-parser": "^7.1.0", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "supports-hyperlinks": "^3.2.0", + "svg-tags": "^1.0.0", + "table": "^6.9.0", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "stylelint": "bin/stylelint.mjs" }, "engines": { - "node": ">=0.10.0" + "node": ">=18.12.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==", + "node_modules/stylelint/node_modules/ansi-regex": { + "version": "5.0.1", "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", + "peer": true, "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": ">=8" } }, - "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==", + "node_modules/stylelint/node_modules/balanced-match": { + "version": "2.0.0", "dev": true, "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } + "peer": true }, - "node_modules/spdx-license-ids": { - "version": "3.0.21", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", - "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", + "node_modules/stylelint/node_modules/emoji-regex": { + "version": "8.0.0", "dev": true, - "license": "CC0-1.0" + "license": "MIT", + "peer": true }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "node_modules/stylelint/node_modules/file-entry-cache": { + "version": "11.1.1", "dev": true, "license": "MIT", + "peer": true, "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" + "flat-cache": "^6.1.19" } }, - "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==", + "node_modules/stylelint/node_modules/flat-cache": { + "version": "6.1.19", "dev": true, "license": "MIT", + "peer": true, "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" + "cacheable": "^2.2.0", + "flatted": "^3.3.3", + "hookified": "^1.13.0" } }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "node_modules/stylelint/node_modules/ignore": { + "version": "7.0.5", "dev": true, - "license": "ISC", + "license": "MIT", "peer": true, "engines": { - "node": ">= 10.x" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 4" } }, - "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==", + "node_modules/stylelint/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/stop-iteration-iterator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "node_modules/stylelint/node_modules/meow": { + "version": "13.2.0", "dev": true, "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "internal-slot": "^1.1.0" - }, + "peer": true, "engines": { - "node": ">= 0.4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/streamifier": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/streamifier/-/streamifier-0.1.1.tgz", - "integrity": "sha512-zDgl+muIlWzXNsXeyUfOk9dChMjlpkq0DRsxujtYPgyJ676yQ8jEm6zzaaWHFDg5BNcLuif0eD2MTyJdZqXpdg==", + "node_modules/stylelint/node_modules/postcss-safe-parser": { + "version": "7.0.1", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", + "peer": true, "engines": { - "node": ">=0.10" + "node": ">=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/streamroller": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", - "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "node_modules/stylelint/node_modules/string-width": { + "version": "4.2.3", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=8.0" + "node": ">=8" } }, - "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==", + "node_modules/stylelint/node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "ansi-regex": "^5.0.1" }, "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": ">=8" } }, - "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==", + "node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">= 4.0.0" + "node": ">=8" } }, - "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==", + "node_modules/supports-hyperlinks": { + "version": "3.2.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "safe-buffer": "~5.2.0" + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" } }, - "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==", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", "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" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/svg-tags": { + "version": "1.0.0", "dev": true, - "license": "MIT", + "peer": true + }, + "node_modules/table": { + "version": "6.9.0", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=8" + "node": ">=10.0.0" } }, - "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==", + "node_modules/table/node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" } }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "node_modules/table/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "node_modules/table/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "ansi-regex": "^6.0.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=7.0.0" } }, - "node_modules/string.prototype.includes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", - "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "node_modules/table/node_modules/color-name": { + "version": "1.1.4", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3" - }, + "peer": true + }, + "node_modules/table/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/string.prototype.matchall": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", - "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "node_modules/table/node_modules/slice-ansi": { + "version": "4.0.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "regexp.prototype.flags": "^1.5.3", - "set-function-name": "^2.0.2", - "side-channel": "^1.1.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/string.prototype.padend": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", - "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", + "node_modules/table/node_modules/string-width": { + "version": "4.2.3", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "node_modules/table/node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "node_modules/tapable": { + "version": "2.3.0", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "node_modules/tar": { + "version": "6.2.1", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "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": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "node_modules/tar-stream": { + "version": "1.6.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8.0" } }, - "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==", + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ansi-regex": "^5.0.1" + "minipass": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "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==", + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ansi-regex": "^5.0.1" + "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=4" + "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==", + "node_modules/tar/node_modules/minizlib": { + "version": "2.1.2", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 8" } }, - "node_modules/stylelint": { - "version": "16.22.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.22.0.tgz", - "integrity": "sha512-SVEMTdjKNV4ollUrIY9ordZ36zHv2/PHzPjfPMau370MlL2VYXeLgSNMMiEbLGRO8RmD2R8/BVUeF2DfnfkC0w==", + "node_modules/tar/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" - }, - { - "type": "github", - "url": "https://github.com/sponsors/stylelint" - } - ], - "license": "MIT", - "peer": true, + "license": "ISC", "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/media-query-list-parser": "^4.0.3", - "@csstools/selector-specificity": "^5.0.0", - "@dual-bundle/import-meta-resolve": "^4.1.0", - "balanced-match": "^2.0.0", - "colord": "^2.9.3", - "cosmiconfig": "^9.0.0", - "css-functions-list": "^3.2.3", - "css-tree": "^3.1.0", - "debug": "^4.4.1", - "fast-glob": "^3.3.3", - "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^10.1.1", - "global-modules": "^2.0.0", - "globby": "^11.1.0", - "globjoin": "^0.1.4", - "html-tags": "^3.3.1", - "ignore": "^7.0.5", - "imurmurhash": "^0.1.4", - "is-plain-object": "^5.0.0", - "known-css-properties": "^0.37.0", - "mathml-tag-names": "^2.1.3", - "meow": "^13.2.0", - "micromatch": "^4.0.8", - "normalize-path": "^3.0.0", - "picocolors": "^1.1.1", - "postcss": "^8.5.6", - "postcss-resolve-nested-selector": "^0.1.6", - "postcss-safe-parser": "^7.0.1", - "postcss-selector-parser": "^7.1.0", - "postcss-value-parser": "^4.2.0", - "resolve-from": "^5.0.0", - "string-width": "^4.2.3", - "supports-hyperlinks": "^3.2.0", - "svg-tags": "^1.0.0", - "table": "^6.9.0", - "write-file-atomic": "^5.0.1" - }, - "bin": { - "stylelint": "bin/stylelint.mjs" + "yallist": "^4.0.0" }, "engines": { - "node": ">=18.12.0" + "node": ">=8" } }, - "node_modules/stylelint/node_modules/balanced-match": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", "dev": true, "license": "MIT", - "peer": true + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/stylelint/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==", + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "license": "MIT", - "peer": true + "license": "ISC" }, - "node_modules/stylelint/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==", + "node_modules/terser": { + "version": "5.43.1", "dev": true, - "license": "MIT", - "peer": true, + "license": "BSD-2-Clause", "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" + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.14.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" }, "engines": { - "node": ">=8.6.0" + "node": ">=10" } }, - "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.3.tgz", - "integrity": "sha512-D+w75Ub8T55yor7fPgN06rkCAUbAYw2vpxJmmjv/GDAcvCnv9g7IvHhIZoxzRZThrXPFI2maeY24pPbtyYU7Lg==", + "node_modules/terser-webpack-plugin": { + "version": "5.3.14", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "flat-cache": "^6.1.12" + "@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/stylelint/node_modules/flat-cache": { - "version": "6.1.12", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.12.tgz", - "integrity": "sha512-U+HqqpZPPXP5d24bWuRzjGqVqUcw64k4nZAbruniDwdRg0H10tvN7H6ku1tjhA4rg5B9GS3siEvwO2qjJJ6f8Q==", + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "cacheable": "^1.10.3", - "flatted": "^3.3.3", - "hookified": "^1.10.0" - } + "license": "MIT" }, - "node_modules/stylelint/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==", + "node_modules/text-extensions": { + "version": "2.4.0", "dev": true, - "license": "ISC", + "license": "MIT", "peer": true, - "dependencies": { - "is-glob": "^4.0.1" - }, "engines": { - "node": ">= 6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stylelint/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/thingies": { + "version": "2.5.0", "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">= 4" + "node": ">=10.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "^2" } }, - "node_modules/stylelint/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==", + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/thunky": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.0.2", "dev": true, "license": "MIT", "peer": true, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/stylelint/node_modules/meow": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", - "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "node_modules/tinyglobby": { + "version": "0.2.14", "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, "engines": { - "node": ">=18" + "node": ">=12.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/stylelint/node_modules/postcss-safe-parser": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", - "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", + "node_modules/tinymce": { + "version": "6.8.6", + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.2.5", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", - "peer": true, "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=14.14" } }, - "node_modules/stylelint/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==", + "node_modules/to-buffer": { + "version": "1.2.2", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "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==", + "node_modules/to-regex-range": { + "version": "5.0.1", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "is-number": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=8.0" } }, - "node_modules/supports-hyperlinks": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", - "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", + "node_modules/toidentifier": { + "version": "1.0.1", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, "engines": { - "node": ">=14.18" - }, - "funding": { - "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" + "node": ">=0.6" } }, - "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==", + "node_modules/tree-dump": { + "version": "1.1.0", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": ">= 0.4" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "node_modules/tree-kill": { + "version": "1.2.2", "dev": true, - "peer": true + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } }, - "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==", + "node_modules/ts-api-utils": { + "version": "2.1.0", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10" + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" } }, - "node_modules/table": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", - "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "node_modules/ts-dedent": { + "version": "2.2.0", "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, + "license": "MIT", "engines": { - "node": ">=10.0.0" + "node": ">=6.10" } }, - "node_modules/table/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==", + "node_modules/ts-node": { + "version": "10.9.2", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" }, - "engines": { - "node": ">=8" + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } } }, - "node_modules/table/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==", + "node_modules/tsconfig-paths": { + "version": "4.2.0", "dev": true, "license": "MIT", + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "license": "0BSD" + }, + "node_modules/tslint": { + "version": "5.20.1", + "dev": true, + "license": "Apache-2.0", "peer": true, "dependencies": { - "color-name": "~1.1.4" + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.29.0" + }, + "bin": { + "tslint": "bin/tslint" }, "engines": { - "node": ">=7.0.0" + "node": ">=4.8.0" + }, + "peerDependencies": { + "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" } }, - "node_modules/table/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==", + "node_modules/tslint/node_modules/argparse": { + "version": "1.0.10", "dev": true, "license": "MIT", - "peer": true + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } }, - "node_modules/table/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==", + "node_modules/tslint/node_modules/brace-expansion": { + "version": "1.1.12", "dev": true, "license": "MIT", - "peer": true + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "node_modules/table/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==", + "node_modules/tslint/node_modules/builtin-modules": { + "version": "1.1.1", "dev": true, "license": "MIT", "peer": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/table/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "node_modules/tslint/node_modules/chalk": { + "version": "2.4.2", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "node": ">=4" } }, - "node_modules/table/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==", + "node_modules/tslint/node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/tslint/node_modules/escape-string-regexp": { + "version": "1.0.5", "dev": true, "license": "MIT", "peer": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, "engines": { - "node": ">=8" + "node": ">=0.8.0" } }, - "node_modules/tapable": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", - "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", + "node_modules/tslint/node_modules/has-flag": { + "version": "3.0.0", "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": ">=6" + "node": ">=4" } }, - "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==", + "node_modules/tslint/node_modules/js-yaml": { + "version": "3.14.2", "dev": true, - "license": "ISC", + "license": "MIT", + "peer": true, "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" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=10" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "node_modules/tslint/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "license": "MIT", + "license": "ISC", + "peer": true, "dependencies": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 0.8.0" + "node": "*" } }, - "node_modules/tar-stream/node_modules/bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "node_modules/tslint/node_modules/semver": { + "version": "5.7.2", "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver" } }, - "node_modules/tar-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "node_modules/tslint/node_modules/sprintf-js": { + "version": "1.0.3", "dev": true, - "license": "MIT" + "license": "BSD-3-Clause", + "peer": true }, - "node_modules/tar-stream/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==", + "node_modules/tslint/node_modules/supports-color": { + "version": "5.5.0", "dev": true, "license": "MIT", + "peer": true, "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" + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/tar-stream/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==", + "node_modules/tslint/node_modules/tslib": { + "version": "1.14.1", "dev": true, - "license": "MIT" + "license": "0BSD", + "peer": true }, - "node_modules/tar-stream/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==", + "node_modules/tsutils": { + "version": "2.29.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "safe-buffer": "~5.1.0" + "tslib": "^1.8.1" + }, + "peerDependencies": { + "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" } }, - "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==", + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", "dev": true, - "license": "ISC", + "license": "0BSD", + "peer": true + }, + "node_modules/tuf-js": { + "version": "3.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" + "@tufjs/models": "3.0.1", + "debug": "^4.4.1", + "make-fetch-happen": "^14.0.3" }, "engines": { - "node": ">= 8" + "node": "^18.17.0 || >=20.5.0" } }, - "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==", + "node_modules/type-check": { + "version": "0.4.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "node_modules/type-fest": { + "version": "0.20.2", "dev": true, - "license": "ISC", + "license": "(MIT OR CC0-1.0)", + "peer": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/type-is": { + "version": "2.0.1", "dev": true, "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.6" } }, - "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.31.6", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", - "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", + "node_modules/typed-array-buffer": { + "version": "1.0.3", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "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" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" }, "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "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==", + "node_modules/typed-array-byte-length": { + "version": "1.0.3", "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" + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 0.4" }, "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 - } + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "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==", + "node_modules/typed-array-length": { + "version": "1.0.7", "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "node_modules/typed-assert": { + "version": "1.0.9", "dev": true, "license": "MIT" }, - "node_modules/thingies": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", - "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", + "node_modules/typescript": { + "version": "5.9.3", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.48.1", "dev": true, - "license": "Unlicense", + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.48.1", + "@typescript-eslint/parser": "8.48.1", + "@typescript-eslint/typescript-estree": "8.48.1", + "@typescript-eslint/utils": "8.48.1" + }, "engines": { - "node": ">=10.18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "tslib": "^2" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "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.1", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", - "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", + "node_modules/ua-parser-js": { + "version": "0.7.41", "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", - "peer": true + "bin": { + "ua-parser-js": "script/cli.js" + }, + "engines": { + "node": "*" + } }, - "node_modules/tinyglobby": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", - "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "node_modules/unbox-primitive": { + "version": "1.1.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" }, "engines": { - "node": ">=12.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tinymce": { - "version": "6.8.6", - "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-6.8.6.tgz", - "integrity": "sha512-++XYEs8lKWvZxDCjrr8Baiw7KiikraZ5JkLMg6EdnUVNKJui0IsrAADj5MsyUeFkcEryfn2jd3p09H7REvewyg==", + "node_modules/undici-types": { + "version": "6.21.0", + "dev": true, "license": "MIT" }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", "dev": true, "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, "engines": { - "node": ">=0.6.0" + "node": ">=4" } }, - "node_modules/to-buffer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", - "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", "dev": true, "license": "MIT", "dependencies": { - "isarray": "^2.0.5", - "safe-buffer": "^5.2.1", - "typed-array-buffer": "^1.0.3" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=4" } }, - "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==", + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.1", "dev": true, "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, "engines": { - "node": ">=8.0" + "node": ">=4" } }, - "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==", + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.2.0", "dev": true, "license": "MIT", "engines": { - "node": ">=0.6" + "node": ">=4" } }, - "node_modules/tree-dump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.3.tgz", - "integrity": "sha512-il+Cv80yVHFBwokQSfd4bldvr1Md951DpgAGfmhydt04L+YzHgubm2tQ7zueWDcGENKHq0ZvGFR/hjvNXilHEg==", + "node_modules/unicorn-magic": { + "version": "0.1.0", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "peer": true, "engines": { - "node": ">=10.0" + "node": ">=18" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unique-filename": { + "version": "4.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^5.0.0" }, - "peerDependencies": { - "tslib": "2" + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "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==", + "node_modules/unique-slug": { + "version": "5.0.0", "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/ts-api-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "node_modules/universalify": { + "version": "2.0.1", "dev": true, "license": "MIT", "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" + "node": ">= 10.0.0" } }, - "node_modules/ts-dedent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "node_modules/unpipe": { + "version": "1.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=6.10" + "node": ">= 0.8" } }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "node_modules/update-browserslist-db": { + "version": "1.2.1", "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": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } + "browserslist": ">= 4.21.0" } }, - "node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "node_modules/uri-js": { + "version": "4.4.1", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" + "punycode": "^2.1.0" } }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/tslint": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", - "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - }, - "bin": { - "tslint": "bin/tslint" - }, + "license": "MIT", "engines": { - "node": ">=4.8.0" - }, - "peerDependencies": { - "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" + "node": ">=6" } }, - "node_modules/tslint/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "sprintf-js": "~1.0.2" + "engines": { + "node": ">= 0.4.0" } }, - "node_modules/tslint/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==", + "node_modules/uuid": { + "version": "8.3.2", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/tslint/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } + "license": "MIT" }, - "node_modules/tslint/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==", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", "dev": true, - "license": "MIT", - "peer": true + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } }, - "node_modules/tslint/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/validate-npm-package-name": { + "version": "6.0.2", "dev": true, - "license": "MIT", - "peer": true, + "license": "ISC", "engines": { - "node": ">=0.8.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/tslint/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/vary": { + "version": "1.1.2", "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">=4" + "node": ">= 0.8" } }, - "node_modules/tslint/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/vite": { + "version": "7.1.11", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" }, "bin": { - "js-yaml": "bin/js-yaml.js" + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } } }, - "node_modules/tslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/vite/node_modules/tinyglobby": { + "version": "0.2.15", "dev": true, - "license": "ISC", - "peer": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { - "node": "*" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tslint/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/void-elements": { + "version": "2.0.1", "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/tslint/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "peer": true }, - "node_modules/tslint/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/vscode-uri": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/watchpack": { + "version": "2.4.4", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "has-flag": "^3.0.0" + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" }, "engines": { - "node": ">=4" + "node": ">=10.13.0" } }, - "node_modules/tslint/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD", - "peer": true - }, - "node_modules/tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "node_modules/wbuf": { + "version": "1.7.3", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "tslib": "^1.8.1" - }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" + "minimalistic-assert": "^1.0.0" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/weak-lru-cache": { + "version": "1.2.2", "dev": true, - "license": "0BSD", - "peer": true + "license": "MIT", + "optional": true }, - "node_modules/tuf-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", - "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", - "dev": true, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", "license": "MIT", - "dependencies": { - "@tufjs/models": "2.0.1", - "debug": "^4.3.4", - "make-fetch-happen": "^13.0.1" - }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 8" } }, - "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==", + "node_modules/webpack": { + "version": "5.103.0", "dev": true, "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1" + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.26.3", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.3", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.3.1", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.4", + "webpack-sources": "^3.3.3" + }, + "bin": { + "webpack": "bin/webpack.js" }, "engines": { - "node": ">= 0.8.0" + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/webpack-dev-middleware": { + "version": "7.4.2", "dev": true, - "license": "(MIT OR CC0-1.0)", + "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": ">=10" + "node": ">= 18.12.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } } }, - "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==", + "node_modules/webpack-dev-middleware/node_modules/mime-db": { + "version": "1.52.0", "dev": true, "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, "engines": { "node": ">= 0.6" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "node_modules/webpack-dev-middleware/node_modules/mime-types": { + "version": "2.1.35", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" + "mime-db": "1.52.0" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.6" } }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "node_modules/webpack-dev-server": { + "version": "5.2.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" + "@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": ">= 0.4" + "node": ">= 18.12.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "webpack": "^5.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } } }, - "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "node_modules/webpack-dev-server/node_modules/accepts": { + "version": "1.3.8", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { - "node": ">=14.17" + "node": ">= 0.6" } }, - "node_modules/ua-parser-js": { - "version": "0.7.40", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.40.tgz", - "integrity": "sha512-us1E3K+3jJppDBa3Tl0L3MOJiGhe1C6P0+nIvQAFYbxlMAx0h81eOwLmU57xgqToduDDPx3y5QsdjPfDu+FgOQ==", + "node_modules/webpack-dev-server/node_modules/body-parser": { + "version": "1.20.4", "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" + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" }, "engines": { - "node": "*" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "3.6.0", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" + "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": ">= 0.4" + "node": ">= 8.10.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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" + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "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==", + "node_modules/webpack-dev-server/node_modules/content-disposition": { + "version": "0.5.4", "dev": true, "license": "MIT", "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" + "safe-buffer": "5.2.1" }, "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "node_modules/webpack-dev-server/node_modules/cookie-signature": { + "version": "1.0.7", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } + "license": "MIT" }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "node_modules/webpack-dev-server/node_modules/debug": { + "version": "2.6.9", "dev": true, "license": "MIT", - "engines": { - "node": ">=4" + "dependencies": { + "ms": "2.0.0" } }, - "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==", + "node_modules/webpack-dev-server/node_modules/debug/node_modules/ms": { + "version": "2.0.0", "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "node_modules/webpack-dev-server/node_modules/express": { + "version": "4.22.1", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "unique-slug": "^4.0.0" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "node_modules/webpack-dev-server/node_modules/finalhandler": { + "version": "1.3.2", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "imurmurhash": "^0.1.4" + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 0.8" } }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/webpack-dev-server/node_modules/fresh": { + "version": "0.5.2", "dev": true, "license": "MIT", "engines": { - "node": ">= 10.0.0" + "node": ">= 0.6" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "5.1.2", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, "engines": { - "node": ">= 0.8" + "node": ">= 6" } }, - "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { + "version": "2.0.9", "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" + "@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" }, - "bin": { - "update-browserslist-db": "cli.js" + "engines": { + "node": ">=12.0.0" }, "peerDependencies": { - "browserslist": ">= 4.21.0" + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/webpack-dev-server/node_modules/iconv-lite": { + "version": "0.4.24", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "punycode": "^2.1.0" + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.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==", + "node_modules/webpack-dev-server/node_modules/ipaddr.js": { + "version": "2.3.0", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 10" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "node_modules/webpack-dev-server/node_modules/media-typer": { + "version": "0.3.0", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4.0" + "node": ">= 0.6" } }, - "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==", + "node_modules/webpack-dev-server/node_modules/merge-descriptors": { + "version": "1.0.3", "dev": true, "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "license": "MIT" - }, - "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" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/validate-npm-package-name": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "node_modules/webpack-dev-server/node_modules/mime": { + "version": "1.6.0", "dev": true, - "license": "ISC", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=4" } }, - "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==", + "node_modules/webpack-dev-server/node_modules/mime-db": { + "version": "1.52.0", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, - "node_modules/vite": { - "version": "5.4.19", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", - "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", + "node_modules/webpack-dev-server/node_modules/mime-types": { + "version": "2.1.35", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" + "mime-db": "1.52.0" }, "engines": { - "node": "^18.0.0 || >=20.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", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "node": ">= 0.6" } }, - "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==", + "node_modules/webpack-dev-server/node_modules/negotiator": { + "version": "0.6.3", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", - "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "node_modules/webpack-dev-server/node_modules/path-to-regexp": { + "version": "0.1.12", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, - "node_modules/vscode-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", - "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "node_modules/webpack-dev-server/node_modules/picomatch": { + "version": "2.3.1", "dev": true, "license": "MIT", - "peer": true + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "node_modules/watchpack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", - "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "node_modules/webpack-dev-server/node_modules/raw-body": { + "version": "2.5.3", "dev": true, "license": "MIT", "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.8" } }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "3.6.0", "dev": true, "license": "MIT", "dependencies": { - "minimalistic-assert": "^1.0.0" + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "node_modules/webpack-dev-server/node_modules/send": { + "version": "0.19.1", "dev": true, "license": "MIT", "dependencies": { - "defaults": "^1.0.3" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.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/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==", + "node_modules/webpack-dev-server/node_modules/send/node_modules/http-errors": { + "version": "2.0.0", "dev": true, - "license": "MIT" + "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/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "node_modules/webpack-dev-server/node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "dev": true, "license": "MIT", "engines": { - "node": ">= 8" + "node": ">= 0.8" } }, - "node_modules/webpack": { - "version": "5.100.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.100.2.tgz", - "integrity": "sha512-QaNKAvGCDRh3wW1dsDjeMdDXwZm2vqq3zn6Pvq4rHOEOGSaUMgOOjG2Y9ZbIGzpfkJk9ZYTHpDqgDfeBDcnLaw==", + "node_modules/webpack-dev-server/node_modules/serve-static": { + "version": "1.16.2", "dev": true, "license": "MIT", "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.8", - "@types/json-schema": "^7.0.15", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.15.0", - "acorn-import-phases": "^1.0.3", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.2", - "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.2", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.1", - "webpack-sources": "^3.3.3" - }, - "bin": { - "webpack": "bin/webpack.js" + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" }, "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } + "node": ">= 0.8.0" } }, - "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==", + "node_modules/webpack-dev-server/node_modules/serve-static/node_modules/http-errors": { + "version": "2.0.0", "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" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } + "node": ">= 0.8" } }, - "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==", + "node_modules/webpack-dev-server/node_modules/serve-static/node_modules/send": { + "version": "0.19.0", "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" + "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": ">= 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": ">= 0.8.0" } }, - "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==", + "node_modules/webpack-dev-server/node_modules/serve-static/node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webpack-dev-server/node_modules/serve-static/node_modules/statuses": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webpack-dev-server/node_modules/type-is": { + "version": "1.6.18", "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" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" }, "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } + "node": ">= 0.6" } }, "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": { @@ -22058,24 +19817,20 @@ } }, "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "version": "6.0.1", "dev": true, "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", - "wildcard": "^2.0.0" + "wildcard": "^2.0.1" }, "engines": { - "node": ">=10.0.0" + "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": { @@ -22084,8 +19839,6 @@ }, "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": { @@ -22106,8 +19859,6 @@ }, "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": { @@ -22120,8 +19871,6 @@ }, "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": { @@ -22130,15 +19879,30 @@ }, "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/webpack/node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "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": { @@ -22152,8 +19916,6 @@ }, "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": { @@ -22162,8 +19924,6 @@ }, "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": { @@ -22178,8 +19938,6 @@ }, "node_modules/which-boxed-primitive": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "license": "MIT", "dependencies": { @@ -22198,8 +19956,6 @@ }, "node_modules/which-builtin-type": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -22226,8 +19982,6 @@ }, "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { @@ -22245,8 +19999,6 @@ }, "node_modules/which-typed-array": { "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, "license": "MIT", "dependencies": { @@ -22267,15 +20019,11 @@ }, "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/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": { @@ -22284,8 +20032,6 @@ }, "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": { @@ -22300,8 +20046,6 @@ "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": { @@ -22316,10 +20060,16 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "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": { @@ -22334,8 +20084,6 @@ }, "node_modules/wrap-ansi-cjs/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -22347,22 +20095,16 @@ }, "node_modules/wrap-ansi-cjs/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/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": { @@ -22371,8 +20113,6 @@ }, "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": { @@ -22384,10 +20124,27 @@ "node": ">=8" } }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "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", + "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": { @@ -22402,8 +20159,6 @@ }, "node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -22415,22 +20170,16 @@ }, "node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/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": { @@ -22439,8 +20188,6 @@ }, "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": { @@ -22452,17 +20199,24 @@ "node": ">=8" } }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "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/write-file-atomic": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "license": "ISC", "peer": true, @@ -22476,8 +20230,6 @@ }, "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": { @@ -22496,10 +20248,21 @@ } } }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/xdg-basedir": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", "dev": true, "license": "MIT", "peer": true, @@ -22512,8 +20275,6 @@ }, "node_modules/xmlhttprequest": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==", "dev": true, "license": "MIT", "engines": { @@ -22522,8 +20283,6 @@ }, "node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, "license": "MIT", "engines": { @@ -22532,8 +20291,6 @@ }, "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": { @@ -22542,15 +20299,11 @@ }, "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.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", - "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "version": "2.8.2", "dev": true, "license": "ISC", "peer": true, @@ -22559,73 +20312,37 @@ }, "engines": { "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "18.0.0", "dev": true, "license": "MIT", "dependencies": { - "cliui": "^8.0.1", + "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^7.2.0", "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "yargs-parser": "^22.0.0" }, "engines": { - "node": ">=12" + "node": "^20.19.0 || ^22.12.0 || >=23" } }, "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==", + "version": "22.0.0", "dev": true, "license": "ISC", "engines": { - "node": ">=12" - } - }, - "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": "^20.19.0 || ^22.12.0 || >=23" } }, "node_modules/yazl": { "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", "dev": true, "license": "MIT", "dependencies": { @@ -22634,8 +20351,6 @@ }, "node_modules/yn": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, "license": "MIT", "engines": { @@ -22643,11 +20358,10 @@ } }, "node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "version": "1.2.2", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12.20" }, @@ -22656,9 +20370,7 @@ } }, "node_modules/yoctocolors-cjs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", - "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "version": "2.1.3", "dev": true, "license": "MIT", "engines": { @@ -22668,10 +20380,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zod": { + "version": "4.1.13", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.0", + "dev": true, + "license": "ISC", + "peerDependencies": { + "zod": "^3.25 || ^4" + } + }, "node_modules/zone.js": { - "version": "0.14.10", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.10.tgz", - "integrity": "sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==", + "version": "0.15.1", "license": "MIT" } } diff --git a/package.json b/package.json index 6e67e24e..449decca 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@pega/angular-sdk-components", - "version": "24.2.12", + "version": "25.1.11", "description": "Angular SDK packaging: bridge and components, overrides", "main": "index.ts", "private": true, @@ -17,10 +17,10 @@ "build:dev": "run-p -l lint build-angularsdk", "build:dev:ci": "npm run clean && npm install && npm run build:dev", "lint": "run-p -cl lint:*", - "lint:es": "eslint --color --cache --cache-location node_modules/.cache/eslint/ \"projects/angular-test-app/src/**\" \"packages/angular-sdk-components/src/**\"", + "lint:es": "eslint --color --cache --cache-location node_modules/.cache/eslint/ \"projects/angular-test-app/src/**\" \"packages/angular-sdk-components/src/**\" --max-warnings=0", "lint:format": "prettier --log-level warn -c .", "fix": "run-s -cl fix:*", - "fix:es": "eslint --color --fix --cache --cache-location node_modules/.cache/eslint/ \"projects/angular-test-app/src/**\" \"packages/angular-sdk-components/src/**\"", + "fix:es": "eslint --color --fix --cache --cache-location node_modules/.cache/eslint/ \"projects/angular-test-app/src/**\" \"packages/angular-sdk-components/src/**\" --max-warnings=0", "fix:format": "prettier --log-level warn -w .", "start-dev": "ng serve --port 3500", "start-dev-https": "ng serve --port 3500 --ssl --ssl-key ./keys/sdk-a.key --ssl-cert ./keys/sdk-a.crt", @@ -32,7 +32,7 @@ "prebuild-overrides": "shx rm -rf ./packages/angular-sdk-overrides/lib && shx cp -r ./packages/angular-sdk-components/src/lib/_components ./packages/angular-sdk-overrides/lib", "build-overrides": "node scripts/build-overrides", "postbuild-overrides": "node ./scripts/copy-npm-assets-to-overrides.js && echo build-overrides completed", - "compile-ts": "ngc -b tsconfig.build.json", + "compile-ts": "ngc -p tsconfig.build.json", "delete-tsbuildinfo": "rm -f projects/angular-test-app/*.*.tsbuildinfo", "ci": "npm run clean && npm install", "clean": "npx shx --yes rm -rf ./node_modules ./.angular/cache && npm run clear-dist && npm run clear-lib", @@ -49,26 +49,28 @@ "build-angular-sdk-components": "ng build angular-sdk-components && node scripts/copy-map.js && node ./scripts/copy-npm-assets-to-components.js", "prod-build-angularsdk": "shx rm -rf ./dist && npm run prod-build && npm run copy-index && npm run make-mashup-dir && npm run compress-angularsdk", "start": "npm run ng serve", + "create_and_install_sdk_packages": "node scripts/update-dependencies.js", "_comment_2": "Commands related to running tests against the Angular SDK", "test": "node ./scripts/playwright-message.js && playwright test --project=chromium MediaCo/portal MediaCo/embedded", "test:headed": "playwright test --headed --project=chromium MediaCo/portal MediaCo/embedded", "test-report": "playwright show-report" }, "dependencies": { - "@angular/animations": "^18.2.12", - "@angular/cdk": "^18.2.13", - "@angular/common": "^18.2.12", - "@angular/compiler": "^18.2.12", - "@angular/core": "^18.2.12", - "@angular/forms": "^18.2.12", - "@angular/material": "^18.2.13", - "@angular/material-experimental": "^18.2.13", - "@angular/material-moment-adapter": "^18.2.13", - "@angular/platform-browser": "^18.2.12", - "@angular/platform-browser-dynamic": "^18.2.12", - "@angular/router": "^18.2.12", - "@danielmoncada/angular-datetime-picker": "^18.1.0", - "@pega/auth": "~0.2.28", + "@angular/animations": "^20.3.15", + "@angular/cdk": "^20.2.14", + "@angular/common": "^20.3.15", + "@angular/compiler": "^20.3.15", + "@angular/core": "^20.3.15", + "@angular/forms": "^20.3.15", + "@angular/google-maps": "^20.2.14", + "@angular/material": "^20.2.14", + "@angular/material-experimental": "^20.2.14", + "@angular/material-moment-adapter": "^20.2.14", + "@angular/platform-browser": "^20.3.15", + "@angular/platform-browser-dynamic": "^20.3.15", + "@angular/router": "^20.3.15", + "@danielmoncada/angular-datetime-picker": "^20.0.1", + "@pega/auth": "~0.2.34", "@tinymce/tinymce-angular": "^8.0.1", "core-js": "^3.39.0", "dayjs": "^1.11.13", @@ -76,38 +78,38 @@ "fast-deep-equal": "^3.1.3", "libphonenumber-js": "^1.10.53", "lodash.clonedeep": "^4.5.0", - "ngx-currency": "^18.0.0", - "ngx-mat-intl-tel-input": "^5.0.0", + "mat-tel-input": "19.0.5-0", + "ngx-currency": "^19.0.0", "rxjs": "^7.8.1", "tslib": "^2.8.1", - "zone.js": "~0.14.10" + "zone.js": "~0.15.1" }, "devDependencies": { - "@angular-builders/custom-webpack": "^18.0.0", - "@angular-devkit/build-angular": "^18.2.12", - "@angular-devkit/core": "^18.2.12", - "@angular-eslint/eslint-plugin": "^18.4.0", - "@angular-eslint/eslint-plugin-template": "^18.4.0", - "@angular-eslint/template-parser": "^18.4.1", - "@angular/cli": "^18.2.12", - "@angular/compiler-cli": "^18.2.12", - "@angular/language-service": "^18.2.12", - "@pega/configs": "^0.16.2", - "@pega/constellationjs": "~24.2.2", - "@pega/pcore-pconnect-typedefs": "~3.2.2", - "@playwright/test": "^1.40.1", + "@angular-builders/custom-webpack": "^20.0.0", + "@angular-devkit/build-angular": "^20.3.13", + "@angular-devkit/core": "^20.3.13", + "@angular-eslint/eslint-plugin": "^20.7.0", + "@angular-eslint/eslint-plugin-template": "^20.7.0", + "@angular-eslint/template-parser": "^20.7.0", + "@angular/cli": "^20.3.13", + "@angular/compiler-cli": "^20.3.3", + "@angular/language-service": "^20.3.15", + "@pega/configs": "^0.16.3", + "@pega/constellationjs": "~25.1.0", + "@pega/pcore-pconnect-typedefs": "~4.1.0", + "@playwright/test": "^1.54.2", "@types/jasmine": "~5.1.4", "@types/jasminewd2": "~2.0.13", "@types/node": "^20.10.8", - "@typescript-eslint/eslint-plugin": "^7.18.0", - "@typescript-eslint/parser": "^7.18.0", "brotli": "^1.3.3", "codelyzer": "^6.0.2", "compressing": "^1.10.1", - "copy-webpack-plugin": "^12.0.2", - "eslint": "^8.56.0", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jest": "^28.9.0", + "copy-webpack-plugin": "^13.0.1", + "eslint": "^9.36.0", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jest": "^29.0.1", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-sonarjs": "^3.0.5", "fs-extra": "^11.2.0", "jasmine-core": "~5.1.1", "karma": "~6.4.2", @@ -116,18 +118,30 @@ "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "^2.1.0", "md5-file": "^5.0.0", - "ng-packagr": "^18.2.1", + "ng-packagr": "^20.3.0", "npm-force-resolutions": "0.0.10", "npm-run-all": "^4.1.5", "postcss": "^8.4.49", - "shx": "^0.3.4", + "shx": "^0.4.0", "tinymce": "^6.8.6", "ts-node": "~10.9.2", - "typescript": "^5.4.5", - "webpack": "^5.96.1" + "typescript": "^5.9.3", + "typescript-eslint": "^8.48.1", + "webpack": "^5.101.2" }, "overrides": { - "@angular/core": "^18.2.12", - "esbuild": "^0.25.0" + "@angular/common": "^20.3.15", + "@angular/core": "^20.3.15", + "@angular/forms": "^20.3.15", + "@angular/material": "^20.2.14", + "rxjs": "^7.8.1", + "mat-tel-input": { + "@angular/platform-browser": "^20.3.15", + "@angular/platform-browser-dynamic": "^20.3.15", + "@angular/core": "^20.3.15", + "@angular/common": "^20.3.15", + "@angular/forms": "^20.3.15", + "@angular/material": "^20.2.14" + } } } diff --git a/packages/angular-sdk-components/package.json b/packages/angular-sdk-components/package.json index 6c173c08..d908fb37 100644 --- a/packages/angular-sdk-components/package.json +++ b/packages/angular-sdk-components/package.json @@ -1,12 +1,29 @@ { "name": "@pega/angular-sdk-components", - "version": "24.2.12", + "version": "25.1.11", "peerDependencies": { - "@angular/common": "^18.2.12", - "@angular/core": "^18.2.12" + "@angular/animations": "^20.3.15", + "@angular/cdk": "^20.2.14", + "@angular/common": "^20.3.15", + "@angular/core": "^20.3.15", + "@angular/forms": "^20.3.15", + "@angular/google-maps": "^20.2.14", + "@angular/material": "^20.2.14", + "@angular/material-experimental": "^20.2.14", + "@angular/material-moment-adapter": "^20.2.14", + "@danielmoncada/angular-datetime-picker": "^20.0.1", + "@pega/auth": "^0.2.0", + "@tinymce/tinymce-angular": "^8.0.1", + "dayjs": "^1.11.13", + "downloadjs": "^1.4.7", + "fast-deep-equal": "^3.1.3", + "libphonenumber-js": "^1.10.53", + "lodash.clonedeep": "^4.5.0", + "mat-tel-input": "19.0.5-0", + "ngx-currency": "^19.0.0" }, "dependencies": { - "tslib": "^2.6.2" + "tslib": "^2.8.1" }, "sideEffects": false } diff --git a/packages/angular-sdk-components/src/lib/_bridge/angular-pconnect.ts b/packages/angular-sdk-components/src/lib/_bridge/angular-pconnect.ts index 7d557824..5ac15a64 100644 --- a/packages/angular-sdk-components/src/lib/_bridge/angular-pconnect.ts +++ b/packages/angular-sdk-components/src/lib/_bridge/angular-pconnect.ts @@ -35,7 +35,7 @@ export class AngularPConnectService { * anything added by populateAdditionalProps. * Each entry is: { __componentID__: _the component's most recent props_ } */ - private componentPropsArr: Object[] = []; + private componentPropsArr: object[] = []; /* Used to toggle some class-wide logging */ private static bLogging = false; @@ -88,7 +88,17 @@ export class AngularPConnectService { let fnUnsubscribe; // console.log( `Bridge subscribing: ${theCompName} `); if (inComp) { - fnUnsubscribe = this.getStore().subscribe(inCallback); + let bSubscribed = true; + const wrappedCallback = () => { + if (bSubscribed && inCallback) { + inCallback(); + } + }; + const storeUnsubscribe = this.getStore().subscribe(wrappedCallback); + fnUnsubscribe = () => { + bSubscribed = false; + storeUnsubscribe(); + }; } return fnUnsubscribe; } @@ -98,7 +108,7 @@ export class AngularPConnectService { // and (b) to determine whether the component should update itself (re-render) * @param inComp The component whose properties are being obtained */ - private getComponentProps(inComp: any = null): Object { + private getComponentProps(inComp: any = null): object { let compProps: any = {}; let addProps = {}; @@ -283,6 +293,28 @@ export class AngularPConnectService { if (inComp.pConn$?.removeFormField) { inComp.pConn$?.removeFormField(); } + + const contextName = inComp.pConn$.getContextName(); + const pageReference = inComp.pConn$.getPageReference(); + const rawConfig = inComp.pConn$._rawConfig; + const index = inComp.pConn$.index; + + if (Object.hasOwn(rawConfig?.config ?? {}, 'value') && inComp.pConn$._type !== 'Address') { + PCore.getContextTreeManager().removeFieldNode( + contextName, + pageReference, + inComp.pConn$.viewName || '', + inComp.pConn$._getPropertyName(), + index as number + ); + } else if (inComp.pConn$._type === 'Address' && rawConfig?.config?.associatedView) { + // remove address node and its children + PCore.getContextTreeManager().removeViewNode(contextName, pageReference, rawConfig.config.associatedView, index as number); + } else { + // remove view node and its children + const pageRef = rawConfig?.config?.context ? `${pageReference}${rawConfig?.config.context}` : pageReference; + PCore.getContextTreeManager().removeViewNode(contextName, pageRef, rawConfig?.config?.name || rawConfig?.config?.id || '', index); + } } // Returns true if the component's entry in ___componentPropsArr___ is diff --git a/packages/angular-sdk-components/src/lib/_bridge/component-mapper/component-mapper.component.ts b/packages/angular-sdk-components/src/lib/_bridge/component-mapper/component-mapper.component.ts index 3ba9910b..875cd296 100644 --- a/packages/angular-sdk-components/src/lib/_bridge/component-mapper/component-mapper.component.ts +++ b/packages/angular-sdk-components/src/lib/_bridge/component-mapper/component-mapper.component.ts @@ -9,7 +9,6 @@ const componentsRequireDisplayOnlyFAProp: string[] = ['HybridViewContainer', 'Mo selector: 'component-mapper', templateUrl: './component-mapper.component.html', styleUrls: ['./component-mapper.component.scss'], - standalone: true, imports: [CommonModule] }) export class ComponentMapperComponent implements OnInit, OnDestroy, OnChanges { @@ -19,7 +18,7 @@ export class ComponentMapperComponent implements OnInit, OnDestroy, OnChanges { public componentRef: ComponentRef | undefined; public isInitialized = false; - @Input() name = ''; + @Input() name?: string = ''; @Input() props: any; @Input() errorMsg = ''; @Input() outputEvents: any; @@ -44,7 +43,7 @@ export class ComponentMapperComponent implements OnInit, OnDestroy, OnChanges { } loadComponent() { - const component = getComponentFromMap(this.name); + const component = getComponentFromMap(this.name || ''); if (this.dynamicComponent) { this.dynamicComponent.clear(); @@ -68,8 +67,7 @@ export class ComponentMapperComponent implements OnInit, OnDestroy, OnChanges { if (propsValues[i] !== undefined) { // We'll set 'displayOnlyFA$' prop only to the components which really need it // Eventual plan is to get rid of this particular prop - if (propsKeys[i] === 'displayOnlyFA$' && !componentsRequireDisplayOnlyFAProp.includes(this.name)) { - // eslint-disable-next-line no-continue + if (propsKeys[i] === 'displayOnlyFA$' && !componentsRequireDisplayOnlyFAProp.includes(this.name || '')) { continue; } this.componentRef?.setInput(propsKeys[i], propsValues[i]); diff --git a/packages/angular-sdk-components/src/lib/_bridge/helpers/sdk-pega-component-map.ts b/packages/angular-sdk-components/src/lib/_bridge/helpers/sdk-pega-component-map.ts index ba595e9d..e0bab3b2 100644 --- a/packages/angular-sdk-components/src/lib/_bridge/helpers/sdk-pega-component-map.ts +++ b/packages/angular-sdk-components/src/lib/_bridge/helpers/sdk-pega-component-map.ts @@ -30,6 +30,8 @@ import { EmailComponent } from '../../_components/field/email/email.component'; import { GroupComponent } from '../../_components/field/group/group.component'; import { IntegerComponent } from '../../_components/field/integer/integer.component'; import { ListViewActionButtonsComponent } from '../../_components/field/list-view-action-buttons/list-view-action-buttons.component'; +import { LocationComponent } from '../../_components/field/location/location.component'; +import { ObjectReferenceComponent } from '../../_components/field/object-reference/object-reference.component'; import { PercentageComponent } from '../../_components/field/percentage/percentage.component'; import { PhoneComponent } from '../../_components/field/phone/phone.component'; import { RadioButtonsComponent } from '../../_components/field/radio-buttons/radio-buttons.component'; @@ -42,9 +44,12 @@ import { TimeComponent } from '../../_components/field/time/time.component'; import { UrlComponent } from '../../_components/field/url/url.component'; import { UserReferenceComponent } from '../../_components/field/user-reference/user-reference.component'; import { ScalarListComponent } from '../../_components/field/scalar-list/scalar-list.component'; +import { SearchFormComponent } from '../../_components/template/data-reference/search-form/search-form.component'; +import { SelectableCardComponent } from '../../_components/field/selectable-card/selectable-card.component'; import { RichTextComponent } from '../../_components/field/rich-text/rich-text.component'; // Template components +import { AdvancedSearchComponent } from '../../_components/template/advanced-search/advanced-search.component'; import { AppShellComponent } from '../../_components/template/app-shell/app-shell.component'; import { BannerPageComponent } from '../../_components/template/banner-page/banner-page.component'; import { CaseSummaryComponent } from '../../_components/template/case-summary/case-summary.component'; @@ -52,6 +57,7 @@ import { CaseViewComponent } from '../../_components/template/case-view/case-vie import { ConfirmationComponent } from '../../_components/template/confirmation/confirmation.component'; import { DataReferenceComponent } from '../../_components/template/data-reference/data-reference.component'; import { DefaultFormComponent } from '../../_components/template/default-form/default-form.component'; +import { DefaultPageComponent } from '../../_components/template/default-page/default-page.component'; import { DetailsComponent } from '../../_components/template/details/details.component'; import { DetailsNarrowWideComponent } from '../../_components/template/details-narrow-wide/details-narrow-wide.component'; import { DetailsOneColumnComponent } from '../../_components/template/details-one-column/details-one-column.component'; @@ -70,11 +76,14 @@ import { ListViewComponent } from '../../_components/template/list-view/list-vie import { MultiReferenceReadonlyComponent } from '../../_components/template/multi-reference-readonly/multi-reference-readonly.component'; import { MultiselectComponent } from '../../_components/field/multiselect/multiselect.component'; import { NarrowWideFormComponent } from '../../_components/template/narrow-wide-form/narrow-wide-form.component'; +import { ObjectPageComponent } from '../../_components/template/object-page/object-page.component'; import { OneColumnComponent } from '../../_components/template/one-column/one-column.component'; import { OneColumnPageComponent } from '../../_components/template/one-column-page/one-column-page.component'; import { OneColumnTabComponent } from '../../_components/template/one-column-tab/one-column-tab.component'; import { PageComponent } from '../../_components/template/page/page.component'; import { PromotedFiltersComponent } from '../../_components/template/promoted-filters/promoted-filters.component'; +import { SearchGroupsComponent } from '../../_components/template/advanced-search/search-groups/search-groups.component'; +import { SelfServiceCaseViewComponent } from '../../_components/template/self-service-case-view/self-service-case-view.component'; import { SimpleTableComponent } from '../../_components/template/simple-table/simple-table.component'; import { SimpleTableManualComponent } from '../../_components/template/simple-table-manual/simple-table-manual.component'; import { SimpleTableSelectComponent } from '../../_components/template/simple-table-select/simple-table-select.component'; @@ -126,6 +135,7 @@ import { WssQuickCreateComponent } from '../../_components/designSystemExtension // Also, note that "Checkbox" component is named/exported as CheckboxComponent const pegaSdkComponentMap = { + AdvancedSearch: AdvancedSearchComponent, ActionButtons: ActionButtonsComponent, Alert: AlertComponent, AlertBanner: AlertBannerComponent, @@ -154,6 +164,7 @@ const pegaSdkComponentMap = { DateTime: DateTimeComponent, Decimal: DecimalComponent, DefaultForm: DefaultFormComponent, + DefaultPage: DefaultPageComponent, DeferLoad: DeferLoadComponent, Details: DetailsComponent, DetailsFields: MaterialDetailsFieldsComponent, @@ -182,6 +193,7 @@ const pegaSdkComponentMap = { ListUtility: ListUtilityComponent, ListView: ListViewComponent, ListViewActionButtons: ListViewActionButtonsComponent, + Location: LocationComponent, MaterialDetails: MaterialDetailsComponent, MaterialUtility: MaterialUtilityComponent, ModalViewContainer: ModalViewContainerComponent, @@ -193,6 +205,8 @@ const pegaSdkComponentMap = { NarrowWideForm: NarrowWideFormComponent, // 'NarrowWidePage': NarrowWidePage, NavBar: NavbarComponent, + ObjectPage: ObjectPageComponent, + ObjectReference: ObjectReferenceComponent, OneColumn: OneColumnComponent, OneColumnPage: OneColumnPageComponent, OneColumnTab: OneColumnTabComponent, @@ -210,6 +224,10 @@ const pegaSdkComponentMap = { RichTextEditor: RichTextEditorComponent, RootContainer: RootContainerComponent, ScalarList: ScalarListComponent, + SearchForm: SearchFormComponent, + SearchGroups: SearchGroupsComponent, + SelectableCard: SelectableCardComponent, + SelfServiceCaseView: SelfServiceCaseViewComponent, SemanticLink: SemanticLinkComponent, SimpleTable: SimpleTableComponent, SimpleTableManual: SimpleTableManualComponent, diff --git a/packages/angular-sdk-components/src/lib/_bridge/helpers/sdk_component_map.ts b/packages/angular-sdk-components/src/lib/_bridge/helpers/sdk_component_map.ts index e9110825..e4d89ced 100644 --- a/packages/angular-sdk-components/src/lib/_bridge/helpers/sdk_component_map.ts +++ b/packages/angular-sdk-components/src/lib/_bridge/helpers/sdk_component_map.ts @@ -8,13 +8,13 @@ import pegaSdkComponentMap from './sdk-pega-component-map'; // Create a singleton for this class (with async loading of components map file) and export it // Note: Initializing SdkComponentMap to null seems to cause lots of compile issues with references // within other components and the value potentially being null (so try to leave it undefined) -// eslint-disable-next-line import/no-mutable-exports + export let SdkComponentMap; let SdkComponentMapCreateInProgress = false; interface ISdkComponentMap { - localComponentMap: Object; - pegaProvidedComponentMap: Object; + localComponentMap: object; + pegaProvidedComponentMap: object; } class ComponentMap { @@ -137,7 +137,6 @@ export async function getSdkComponentMap(inLocalComponentMap = {}) { idNextCheck = setInterval(fnCheckForConfig, 500); }; if (SdkComponentMap) { - // eslint-disable-next-line no-promise-executor-return return resolve(SdkComponentMap.sdkComponentMap); } idNextCheck = setInterval(fnCheckForConfig, 500); diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/alert-banner/alert-banner.component.ts b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/alert-banner/alert-banner.component.ts index 5268dc17..dc70a269 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/alert-banner/alert-banner.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/alert-banner/alert-banner.component.ts @@ -6,7 +6,6 @@ import { ComponentMapperComponent } from '../../../_bridge/component-mapper/comp selector: 'app-alert-banner', templateUrl: './alert-banner.component.html', styleUrls: ['./alert-banner.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class AlertBannerComponent { diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/alert/alert.component.scss b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/alert/alert.component.scss index 201c2f30..5b1f6ede 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/alert/alert.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/alert/alert.component.scss @@ -14,10 +14,10 @@ } .psdk-alert-error { - color: var(--app-alert-error-color); - border: 1px solid var(--app-alert-error-border-color); + color: var(--mat-sys-error); + border: 1px solid var(--mat-sys-error); .mat-icon { - color: var(--app-alert-error-border-color); + color: var(--mat-sys-error); } } diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/alert/alert.component.ts b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/alert/alert.component.ts index 6fff7226..fdcd70b4 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/alert/alert.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/alert/alert.component.ts @@ -6,7 +6,6 @@ import { MatIconModule } from '@angular/material/icon'; selector: 'app-alert', templateUrl: './alert.component.html', styleUrls: ['./alert.component.scss'], - standalone: true, imports: [CommonModule, MatIconModule] }) export class AlertComponent { diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/banner/banner.component.html b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/banner/banner.component.html index bbe3435a..5c831870 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/banner/banner.component.html +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/banner/banner.component.html @@ -9,7 +9,7 @@

{{ title }}

*:nth-child(1) { + min-width: 0; + } } .psdk-grid-filter-narrow-wide { @@ -21,6 +32,10 @@ column-gap: calc(2 * 0.5rem); row-gap: calc(2 * 0.5rem); align-items: start; + + & > *:nth-child(2) { + min-width: 0; + } } .background-image-style { @@ -33,7 +48,6 @@ .background-style { background-color: transparent; - color: var(--app-inverse-form-color); width: 100%; height: 100%; text-align: center; diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/banner/banner.component.ts b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/banner/banner.component.ts index cbeb54d8..7ffc1519 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/banner/banner.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/banner/banner.component.ts @@ -7,7 +7,6 @@ import { ComponentMapperComponent } from '../../../_bridge/component-mapper/comp selector: 'app-banner', templateUrl: './banner.component.html', styleUrls: ['./banner.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class BannerComponent { diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/case-create-stage/case-create-stage.component.ts b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/case-create-stage/case-create-stage.component.ts index 0e93b90c..5b2f52f1 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/case-create-stage/case-create-stage.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/case-create-stage/case-create-stage.component.ts @@ -8,7 +8,6 @@ import { ComponentMapperComponent } from '../../../_bridge/component-mapper/comp selector: 'app-case-create-stage', templateUrl: './case-create-stage.component.html', styleUrls: ['./case-create-stage.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class CaseCreateStageComponent implements OnInit, OnDestroy { diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/field-group/field-group.component.ts b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/field-group/field-group.component.ts index 893a652e..83dc7c86 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/field-group/field-group.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/field-group/field-group.component.ts @@ -7,7 +7,6 @@ import { MatIconModule } from '@angular/material/icon'; selector: 'app-field-group', templateUrl: './field-group.component.html', styleUrls: ['./field-group.component.scss'], - standalone: true, imports: [CommonModule, MatGridListModule, MatIconModule] }) export class FieldGroupComponent { diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.html b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.html index 96ef171a..640a0c7f 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.html +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.html @@ -14,8 +14,8 @@
{{ field.config.value }} {{ field.config.value }} - {{ field.config.value }} - {{ field.config.value }} + {{ field.config.value }} + {{ field.config.value }} {{ field.config.value }} {{ field.config.value }} @@ -35,7 +35,10 @@ else hasSecondaryValue " > - +
diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.scss b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.scss index 43bbbd58..2b41143f 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.scss @@ -18,36 +18,6 @@ margin-bottom: 0.75rem; } -.psdk-case-summary-status-data { - display: block; - background-color: var(--app-primary-lightest-color); - color: var(--app-primary-color); - padding: 0rem 0.625rem; - display: inline; - font-size: 0.75rem; - font-weight: 700; - text-transform: uppercase; - line-height: 1.5rem; -} - -.psdk-case-summary-primary .label { - font-weight: 600; -} - -.psdk-case-summary-primary .data { - font-weight: 600; - font-size: 1.625rem; -} - -.psdk-case-summary-secondary .label { - font-weight: 600; -} -.psdk-case-summary-secondary .data { - font-weight: 600; - // color: $app-primary-color; - padding-left: 1.25rem; -} - .psdk-case-summary-fields { // padding: calc(2 * 0.5rem); display: grid; @@ -74,7 +44,6 @@ max-width: max-content; font-size: 0.8125rem; font-weight: 400; - color: var(--app-field-header-color); } .psdk-csf-primary-field-data { @@ -106,7 +75,6 @@ max-width: max-content; font-size: 0.8125rem; font-weight: 400; - color: var(--app-field-header-color); align-items: center; display: flex; } @@ -124,9 +92,8 @@ span.psdk-csf-text-style { } span.psdk-csf-status-style { - background-color: var(--app-details-status-background); + background-color: var(--mat-sys-surface-container-highest); border-radius: calc(0.25 * 0.5rem); - color: var(--app-details-status-color); display: inline-block; font-size: 0.75rem; font-weight: bold; @@ -139,3 +106,7 @@ span.psdk-csf-status-style { .psdk-secondary-value { font-size: 1rem; } + +.psdk-primary-color { + color: var(--mat-sys-primary); +} diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.ts b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.ts index 7e922d7e..1c5bdc25 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.ts @@ -7,7 +7,6 @@ import { ComponentMapperComponent } from '../../../_bridge/component-mapper/comp selector: 'app-material-case-summary', templateUrl: './material-case-summary.component.html', styleUrls: ['./material-case-summary.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class MaterialCaseSummaryComponent implements OnInit, OnChanges { diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.html b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.html index 85ee8855..33629e34 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.html +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.html @@ -17,8 +17,8 @@
{{ _getValue(field.config.value) }} {{ _getValue(field.config.value) }} - {{ _getValue(field.config.value) }} - {{ _getValue(field.config.value) }} + {{ _getValue(field.config.value) }} + {{ _getValue(field.config.value) }} {{ _formatDate(field.config.value, field.type) }} {{ _getValue(field.config.value, field) }} diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.scss b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.scss index 2e0d63ed..52ec46f4 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.scss @@ -1,5 +1,4 @@ .psdk-details-fields-label { - color: var(--app-label-color); margin: 8px 0px; } @@ -8,9 +7,7 @@ span.psdk-details-text-style-hf { } span.psdk-details-status-style-hf { - background-color: var(--app-details-status-background); border-radius: calc(0.25 * 0.5rem); - color: var(--app-details-status-color); display: inline-block; font-size: 0.75rem; font-weight: bold; @@ -31,3 +28,7 @@ span.psdk-details-status-style-hf { .psdk-csf-primary-field-value { margin: 8px 0; } + +.psdk-primary-color { + color: var(--mat-sys-primary); +} diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.ts b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.ts index b98f2591..4c6048e0 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.ts @@ -7,7 +7,6 @@ import { ComponentMapperComponent } from '../../../_bridge/component-mapper/comp selector: 'app-material-details-fields', templateUrl: './material-details-fields.component.html', styleUrls: ['./material-details-fields.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class MaterialDetailsFieldsComponent { diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details/material-details.component.scss b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details/material-details.component.scss index 781e72ea..4de79a86 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details/material-details.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details/material-details.component.scss @@ -23,7 +23,6 @@ } .psdk-details-fields-label { - color: var(--app-label-color); margin: 8px 0px; } @@ -43,9 +42,7 @@ span.psdk-details-text-style { } span.psdk-details-status-style { - background-color: var(--app-details-status-background); border-radius: calc(0.25 * 0.5rem); - color: var(--app-details-status-color); display: inline-block; font-size: 0.75rem; font-weight: bold; @@ -68,9 +65,7 @@ span.psdk-details-status-style { } span.psdk-details-status-style-hf { - background-color: var(--app-details-status-background); border-radius: calc(0.25 * 0.5rem); - color: var(--app-details-status-color); display: inline-block; font-size: 1.25rem; font-weight: 500; diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details/material-details.component.ts b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details/material-details.component.ts index 83f49329..56578cf9 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details/material-details.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details/material-details.component.ts @@ -7,7 +7,6 @@ import { ComponentMapperComponent } from '../../../_bridge/component-mapper/comp selector: 'app-material-details', templateUrl: './material-details.component.html', styleUrls: ['./material-details.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class MaterialDetailsComponent { diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-summary-item/material-summary-item.component.scss b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-summary-item/material-summary-item.component.scss index 3efb4626..efb32532 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-summary-item/material-summary-item.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-summary-item/material-summary-item.component.scss @@ -4,7 +4,7 @@ } .psdk-utility-divider { - border-bottom: 0.0625rem solid var(--app-neutral-light-color); + border-bottom: 0.0625rem solid var(--mat-sys-outline-variant); } .psdk-utility-view-all { @@ -13,20 +13,6 @@ justify-content: center; } -.psdk-utility-count { - background: var(--app-primary-light-color); - border-radius: calc(1.125 * 0.5rem); - color: var(--app-inverse-form-color); - display: inline-block; - font-size: 0.75rem; - font-weight: bold; - text-align: center; - width: 1.125rem; - - vertical-align: top; - margin: 0 0 0.313rem 1rem; -} - .psdk-utility .header-text { font-size: 1rem; font-weight: bold; @@ -43,7 +29,6 @@ width: 100%; padding: 0.625rem 0rem; text-align: left; - background-color: var(--app-form-color); border-radius: 0.6125rem; margin: 0.3125rem 0rem; } @@ -77,6 +62,7 @@ .psdk-utility-card-icon { flex-grow: 1; max-width: 2.813rem; + filter: var(--app-primary-color-filter); } .psdk-utility-card-svg-icon { @@ -90,7 +76,6 @@ } .psdk-utility-card-main-primary-url { - color: var(--app-primary-color); } .psdk-utility-card-main-primary-url .mat-mdc-button.mat-primary { @@ -109,6 +94,7 @@ .psdk-utility-card-action-svg-icon { width: 1.4rem; display: inline-block; + filter: var(--app-primary-color-filter); } .psdk-utility-card-actions-svg-icon { @@ -122,4 +108,5 @@ width: 1.4rem; display: inline-block; vertical-align: bottom; + filter: var(--app-primary-color-filter); } diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-summary-item/material-summary-item.component.ts b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-summary-item/material-summary-item.component.ts index ac7dc7e3..325cadc7 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-summary-item/material-summary-item.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-summary-item/material-summary-item.component.ts @@ -8,7 +8,6 @@ import { Utils } from '../../../_helpers/utils'; selector: 'app-material-summary-item', templateUrl: './material-summary-item.component.html', styleUrls: ['./material-summary-item.component.scss'], - standalone: true, imports: [CommonModule, MatButtonModule, MatMenuModule] }) export class MaterialSummaryItemComponent implements OnInit { diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-summary-list/material-summary-list.component.ts b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-summary-list/material-summary-list.component.ts index 01b157d6..396220c2 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-summary-list/material-summary-list.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-summary-list/material-summary-list.component.ts @@ -6,7 +6,6 @@ import { ComponentMapperComponent } from '../../../_bridge/component-mapper/comp selector: 'app-material-summary-list', templateUrl: './material-summary-list.component.html', styleUrls: ['./material-summary-list.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class MaterialSummaryListComponent { diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-utility/material-utility.component.scss b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-utility/material-utility.component.scss index bcb65dd4..cb89af08 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-utility/material-utility.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-utility/material-utility.component.scss @@ -4,7 +4,7 @@ } .psdk-case-view-divider { - border-bottom: 0.0625rem solid var(--app-neutral-light-color); + border-bottom: 0.0625rem solid var(--mat-sys-outline-variant); } .psdk-utility .header-text { @@ -24,7 +24,6 @@ height: 6.25rem; padding: 0.625rem 0rem; text-align: left; - background-color: var(--app-form-color); border-radius: 0.6125rem; margin: 0.3125rem 0rem; } diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.scss b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.scss index 1cabbfe2..a2041a49 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.scss @@ -9,7 +9,7 @@ mat-button-toggle-group ::ng-deep .mat-button-toggle-appearance-standard { mat-button-toggle-group ::ng-deep .mat-button-toggle.mat-button-toggle-checked.mat-button-toggle-appearance-standard { background-color: transparent; - border-right: 0.1875rem solid var(--app-primary-color); + border-right: 0.1875rem solid var(--mat-sys-primary); } mat-button-toggle-group ::ng-deep .mat-button-toggle.mat-focus-indicator.mat-button-toggle-appearance-standard { diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.ts b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.ts index 4a0476d9..2196cf9d 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.ts @@ -7,7 +7,6 @@ import { MatButtonToggleModule } from '@angular/material/button-toggle'; selector: 'app-material-vertical-tabs', templateUrl: './material-vertical-tabs.component.html', styleUrls: ['./material-vertical-tabs.component.scss'], - standalone: true, imports: [CommonModule, MatButtonToggleModule, MatBadgeModule] }) export class MaterialVerticalTabsComponent implements OnInit { diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/operator/operator.component.html b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/operator/operator.component.html index b219611e..46b6309f 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/operator/operator.component.html +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/operator/operator.component.html @@ -12,7 +12,7 @@
-
{{ field.name }}
+
{{ field.name }}
{{ field.value }}
diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/operator/operator.component.scss b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/operator/operator.component.scss index 6d4ecda7..6f6a7dac 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/operator/operator.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/operator/operator.component.scss @@ -2,7 +2,6 @@ display: flex; flex-direction: column; font-size: 0.8rem; - color: var(--app-neutral-color); padding-left: 0.625rem; margin: 16px 0 8px 0; } @@ -19,22 +18,17 @@ display: table; margin: auto; min-width: 100px; - background-color: var(--app-form-color); - border: 1px solid var(--app-inverse-form-color); + background-color: var(--mat-sys-surface); + border: 1px solid var(--mat-sys-outline-variant); border-radius: 10px; padding: 20px; - box-shadow: 0 0 10px 3px var(--app-box-shadow-color); + box-shadow: 0 0 10px 3px var(--mat-sys-level3); position: absolute; z-index: 99; } -.psdk-operator-name { - color: var(--app-neutral-color); -} - .psdk-operator-value { padding-left: 5px; - color: var(--app-neutral-dark-color); margin: 0px; } @@ -85,5 +79,4 @@ dd { word-break: break-word; grid-column-start: 1; max-width: max-content; - color: var(--app-field-header-color); } diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/operator/operator.component.ts b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/operator/operator.component.ts index f009154d..9f91f9d8 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/operator/operator.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/operator/operator.component.ts @@ -7,7 +7,6 @@ import { Utils } from '../../../_helpers/utils'; selector: 'app-operator', templateUrl: './operator.component.html', styleUrls: ['./operator.component.scss'], - standalone: true, imports: [CommonModule, MatButtonModule] }) export class OperatorComponent implements OnInit, OnChanges, OnDestroy { @@ -46,7 +45,6 @@ export class OperatorComponent implements OnInit, OnChanges, OnDestroy { } } - // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method ngOnDestroy(): void { // Ref: https://medium.com/@kamil.galek/mythical-angular-component-styles-cleanup-in-angular-17-f799a08b2abc // Commenting the below line as it is causing the Operator component's styles not getting applied. diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/pulse/pulse.component.scss b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/pulse/pulse.component.scss index fb6a035f..73851a7c 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/pulse/pulse.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/pulse/pulse.component.scss @@ -3,6 +3,6 @@ margin: 1rem; border-radius: 0.6125rem; border-left: 6px solid; - border-left-color: var(--app-primary-color); - background-color: var(--app-form-color); + border-left-color: var(--mat-sys-primary); + background-color: var(--mat-sys-surface-container); } diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/pulse/pulse.component.ts b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/pulse/pulse.component.ts index b2eccc9a..18e03df0 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/pulse/pulse.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/pulse/pulse.component.ts @@ -10,7 +10,6 @@ interface PulseProps { selector: 'app-pulse', templateUrl: './pulse.component.html', styleUrls: ['./pulse.component.scss'], - standalone: true, imports: [forwardRef(() => ComponentMapperComponent)] }) export class PulseComponent implements OnInit { diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/rich-text-editor/rich-text-editor.component.html b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/rich-text-editor/rich-text-editor.component.html index 5e38c850..68056957 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/rich-text-editor/rich-text-editor.component.html +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/rich-text-editor/rich-text-editor.component.html @@ -1,32 +1,19 @@
+
+

{{ info }}

+
diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/rich-text-editor/rich-text-editor.component.scss b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/rich-text-editor/rich-text-editor.component.scss index 0954fafa..6e04f160 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/rich-text-editor/rich-text-editor.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/rich-text-editor/rich-text-editor.component.scss @@ -11,7 +11,6 @@ display: inline; content: ' *'; vertical-align: top; - color: var(--app-neutral-dark-color); } .text-editor-error { diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/rich-text-editor/rich-text-editor.component.ts b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/rich-text-editor/rich-text-editor.component.ts index d17e78c2..f0db17ff 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/rich-text-editor/rich-text-editor.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/rich-text-editor/rich-text-editor.component.ts @@ -9,7 +9,6 @@ declare let tinymce: any; selector: 'app-rich-text-editor', templateUrl: './rich-text-editor.component.html', styleUrls: ['./rich-text-editor.component.scss'], - standalone: true, imports: [CommonModule, EditorModule, ReactiveFormsModule], providers: [{ provide: TINYMCE_SCRIPT_SRC, useValue: 'tinymce/tinymce.min.js' }] }) @@ -28,6 +27,7 @@ export class RichTextEditorComponent implements OnChanges { @Output() onChange: EventEmitter = new EventEmitter(); richText = new FormControl(); + editorConfig: any = {}; ngOnChanges() { if (this.required) { @@ -43,6 +43,35 @@ export class RichTextEditorComponent implements OnChanges { if (this.value) { this.richText.setValue(this.value); } + + const themeElement = document.querySelector('.dark') || document.body; + let textColor = getComputedStyle(themeElement).getPropertyValue('--mat-sys-on-surface').trim(); + if (!textColor) textColor = '#000000'; + + this.editorConfig = { + base_url: '/tinymce', + suffix: '.min', + menubar: false, + placeholder: this.placeholder, + statusbar: false, + min_height: 130, + plugins: ['lists', 'advlist', 'autolink', 'image', 'link', 'autoresize'], + autoresize_bottom_margin: 0, + toolbar: this.disabled ? false : 'blocks | bold italic strikethrough | bullist numlist outdent indent | link image', + toolbar_location: 'bottom', + content_style: ` + body { + font-family: Helvetica, Arial, sans-serif; + font-size: 14px; + color: ${textColor} !important; + background: transparent !important; + } + `, + branding: false, + paste_data_images: true, + file_picker_types: 'image', + file_picker_callback: this.filePickerCallback + }; } filePickerCallback = cb => { diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/wss-quick-create/wss-quick-create.component.scss b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/wss-quick-create/wss-quick-create.component.scss index b263698b..254290d9 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/wss-quick-create/wss-quick-create.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/wss-quick-create/wss-quick-create.component.scss @@ -1,24 +1,31 @@ +.quick-link-button:hover .quick-link-icon { + transform: scale(1.2) rotateZ(10deg); +} + +.wss-quick-create-header { + background-color: var(--mat-sys-surface-container); +} + .quick-link-ul-list { list-style: none; padding: 0; - grid-template-columns: repeat(auto-fill, minmax(min(40ch, 100%), 1fr)); + grid-template-columns: repeat(auto-fill, minmax(min(20ch, 100%), 1fr)); display: grid; gap: calc(1rem); } .quick-link-list { - background-color: var(--app-primary-color); - color: var(--app-form-color); - border-radius: 8px; + background-color: var(--mat-sys-surface-container); + border-radius: 16px; + border: 1px solid var(--mat-sys-primary); } .quick-link-button { text-transform: capitalize !important; font-size: 16px !important; - color: var(--app-form-color) !important; cursor: pointer; padding: calc(0.5rem * 2) !important; - height: 6rem; + height: 10rem; width: 100%; justify-content: start !important; background-color: transparent; @@ -26,14 +33,14 @@ } .quick-link-icon { - width: 1em; - height: 1em; + width: 3em; + height: 3em; flex-shrink: 0; - filter: invert(100%); } .quick-link-button-span { display: flex; + flex-direction: column; align-items: center; gap: 0.5rem; } diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/wss-quick-create/wss-quick-create.component.ts b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/wss-quick-create/wss-quick-create.component.ts index 95ac8c92..b048b2e2 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/wss-quick-create/wss-quick-create.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/wss-quick-create/wss-quick-create.component.ts @@ -6,7 +6,6 @@ import { Component, Input } from '@angular/core'; selector: 'wss-quick-create', templateUrl: './wss-quick-create.component.html', styleUrls: ['./wss-quick-create.component.scss'], - standalone: true, imports: [CommonModule] }) export class WssQuickCreateComponent { diff --git a/packages/angular-sdk-components/src/lib/_components/field/auto-complete/auto-complete.component.html b/packages/angular-sdk-components/src/lib/_components/field/auto-complete/auto-complete.component.html index c703cac0..73858a15 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/auto-complete/auto-complete.component.html +++ b/packages/angular-sdk-components/src/lib/_components/field/auto-complete/auto-complete.component.html @@ -14,7 +14,6 @@ [required]="bRequired$" [matAutocomplete]="auto" (input)="fieldOnChange($event)" - (blur)="fieldOnBlur($event)" /> diff --git a/packages/angular-sdk-components/src/lib/_components/field/auto-complete/auto-complete.component.ts b/packages/angular-sdk-components/src/lib/_components/field/auto-complete/auto-complete.component.ts index b48014a1..9c37343d 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/auto-complete/auto-complete.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/auto-complete/auto-complete.component.ts @@ -1,14 +1,14 @@ -import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core'; +import { Component, EventEmitter, OnInit, Output, forwardRef, inject } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatOptionModule } from '@angular/material/core'; import { MatAutocompleteModule } from '@angular/material/autocomplete'; import { MatInputModule } from '@angular/material/input'; import { MatFormFieldModule } from '@angular/material/form-field'; -import { interval, Observable } from 'rxjs'; +import { Observable } from 'rxjs'; import { map, startWith } from 'rxjs/operators'; -import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; -import { Utils } from '../../../_helpers/utils'; + +import { FieldBase } from '../field.base'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; import { DatapageService } from '../../../_services/datapage.service'; import { handleEvent } from '../../../_helpers/event-util'; @@ -34,7 +34,6 @@ interface AutoCompleteProps extends PConnFieldProps { selector: 'app-auto-complete', templateUrl: './auto-complete.component.html', styleUrls: ['./auto-complete.component.scss'], - standalone: true, imports: [ CommonModule, ReactiveFormsModule, @@ -43,68 +42,26 @@ interface AutoCompleteProps extends PConnFieldProps { MatAutocompleteModule, MatOptionModule, forwardRef(() => ComponentMapperComponent) - ] + ], + providers: [DatapageService] }) -export class AutoCompleteComponent implements OnInit, OnDestroy { - @Input() pConn$: typeof PConnect; - @Input() formGroup$: FormGroup; +export class AutoCompleteComponent extends FieldBase implements OnInit { + protected dataPageService = inject(DatapageService); + + @Output() onRecordChange: EventEmitter = new EventEmitter(); - // Used with AngularPConnect - angularPConnectData: AngularPConnectData = {}; configProps$: AutoCompleteProps; - label$ = ''; - value$ = ''; - bRequired$ = false; - bReadonly$ = false; - bDisabled$ = false; - bVisible$ = true; - displayMode$?: string = ''; - controlName$: string; - bHasForm$ = true; options$: any[]; - componentReference = ''; - testId: string; listType: string; columns = []; - helperText: string; - placeholder: string; - - fieldControl = new FormControl('', null); parameters: {}; - hideLabel: boolean; filteredOptions: Observable; filterValue = ''; - actionsApi: Object; - propName: string; - - constructor( - private angularPConnect: AngularPConnectService, - private cdRef: ChangeDetectorRef, - private utils: Utils, - private dataPageService: DatapageService - ) {} - - async ngOnInit(): Promise { - // First thing in initialization is registering and subscribing to the AngularPConnect service - this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - this.controlName$ = this.angularPConnect.getComponentID(this); - - // Then, continue on with other initialization - // call updateSelf when initializing - // this.updateSelf(); - await this.checkAndUpdate(); - - if (this.formGroup$) { - // add control to formGroup - this.formGroup$.addControl(this.controlName$, this.fieldControl); - this.fieldControl.setValue(this.value$); - this.bHasForm$ = true; - } else { - this.bReadonly$ = true; - this.bHasForm$ = false; - } + // Override ngOnInit method + override async ngOnInit(): Promise { + super.ngOnInit(); this.filteredOptions = this.fieldControl.valueChanges.pipe( startWith(''), @@ -119,54 +76,32 @@ export class AutoCompleteComponent implements OnInit, OnDestroy { this.fieldControl.setValue(this.value$); } - ngOnDestroy(): void { - if (this.formGroup$) { - this.formGroup$.removeControl(this.controlName$); - } - - if (this.angularPConnectData.unsubscribeFn) { - this.angularPConnectData.unsubscribeFn(); - } - } - private _filter(value: string): string[] { const filterVal = (value || this.filterValue).toLowerCase(); return this.options$?.filter(option => option.value?.toLowerCase().includes(filterVal)); } - // Callback passed when subscribing to store change - async onStateChange() { - await this.checkAndUpdate(); - } - - async checkAndUpdate() { - // Should always check the bridge to see if the component should - // update itself (re-render) - const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); - - // ONLY call updateSelf when the component should update - if (bUpdateSelf) { - await this.updateSelf(); - } - } + /** + * Updates the component when there are changes in the state. + */ + override async updateSelf(): Promise { + // Resolve configuration properties + this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as AutoCompleteProps; - // updateSelf - async updateSelf(): Promise { - // starting very simple... + // Update component common properties + this.updateComponentCommonProperties(this.configProps$); - // moved this from ngOnInit() and call this from there instead... - this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as AutoCompleteProps; + // Set component specific properties + const { value, listType, parameters } = this.configProps$; - if (this.configProps$.value != undefined) { - const index = this.options$?.findIndex(element => element.key === this.configProps$.value); - this.value$ = index > -1 ? this.options$[index].value : this.configProps$.value; + if (value != undefined) { + const index = this.options$?.findIndex(element => element.key === value); + this.value$ = index > -1 ? this.options$[index].value : value; this.fieldControl.setValue(this.value$); } - this.setPropertyValuesFromProps(); - - this.actionsApi = this.pConn$.getActionsApi(); - this.propName = this.pConn$.getStateProps().value; + this.listType = listType; + this.parameters = parameters; const context = this.pConn$.getContextName(); const { columns, datasource } = this.generateColumnsAndDataSource(); @@ -174,34 +109,7 @@ export class AutoCompleteComponent implements OnInit, OnDestroy { if (columns) { this.columns = this.preProcessColumns(columns); } - // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError - setTimeout(() => { - if (this.configProps$.required != null) { - this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required); - } - this.cdRef.detectChanges(); - }); - - if (this.configProps$.visibility != null) { - this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility); - } - - // disabled - if (this.configProps$.disabled != undefined) { - this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled); - } - if (this.bDisabled$) { - this.fieldControl.disable(); - } else { - this.fieldControl.enable(); - } - - if (this.configProps$.readOnly != null) { - this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly); - } - - this.componentReference = this.pConn$.getStateProps().value; if (this.listType === 'associated') { const optionsList = this.utils.getOptionList(this.configProps$, this.pConn$.getDataObject('')); // 1st arg empty string until typedef marked correctly this.setOptions(optionsList); @@ -211,27 +119,6 @@ export class AutoCompleteComponent implements OnInit, OnDestroy { const results = await this.dataPageService.getDataPageData(datasource, this.parameters, context); this.fillOptions(results); } - - // trigger display of error message with field control - if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') { - const timer = interval(100).subscribe(() => { - this.fieldControl.setErrors({ message: true }); - this.fieldControl.markAsTouched(); - - timer.unsubscribe(); - }); - } - } - - setPropertyValuesFromProps() { - this.testId = this.configProps$.testId; - this.label$ = this.configProps$.label; - this.placeholder = this.configProps$.placeholder || ''; - this.displayMode$ = this.configProps$.displayMode; - this.listType = this.configProps$.listType; - this.hideLabel = this.configProps$.hideLabel; - this.helperText = this.configProps$.helperText; - this.parameters = this.configProps$?.parameters; } generateColumnsAndDataSource() { @@ -313,49 +200,24 @@ export class AutoCompleteComponent implements OnInit, OnDestroy { } fieldOnChange(event: Event) { - // this works - this.pConn$.setValue( this.componentReference, `property: ${this.componentReference}`); - // this works - this.pConn$.setValue( this.componentReference, this.fieldControl.value); - // PConnect wants to use changeHandler for onChange - // this.angularPConnect.changeHandler( this, event); const value = (event.target as HTMLInputElement).value; this.filterValue = value; handleEvent(this.actionsApi, 'change', this.propName, value); } optionChanged(event: any) { - const value = event?.option?.value; - handleEvent(this.actionsApi, 'change', this.propName, value); - } + const val = event?.option?.value; - fieldOnBlur(event: Event) { let key = ''; - const el = event?.target as HTMLInputElement; - if (el?.value) { - const index = this.options$?.findIndex(element => element.value === el.value); - key = index > -1 ? (key = this.options$[index].key) : el.value; + if (val) { + const index = this.options$?.findIndex(element => element.value === val); + key = index > -1 ? (key = this.options$[index].key) : val; } const value = key; handleEvent(this.actionsApi, 'changeNblur', this.propName, value); - if (this.configProps$?.onRecordChange) { - el.value = value; - this.configProps$.onRecordChange(event); - } - } - - getErrorMessage() { - let errMessage = ''; - // look for validation messages for json, pre-defined or just an error pushed from workitem (400) - if (this.fieldControl.hasError('message')) { - errMessage = this.angularPConnectData.validateMessage ?? ''; - return errMessage; + if (this.onRecordChange) { + this.onRecordChange.emit(value); } - if (this.fieldControl.hasError('required')) { - errMessage = 'You must enter a value'; - } else if (this.fieldControl.errors) { - errMessage = this.fieldControl.errors.toString(); - } - - return errMessage; } } diff --git a/packages/angular-sdk-components/src/lib/_components/field/cancel-alert/cancel-alert.component.html b/packages/angular-sdk-components/src/lib/_components/field/cancel-alert/cancel-alert.component.html index bd446143..148c3140 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/cancel-alert/cancel-alert.component.html +++ b/packages/angular-sdk-components/src/lib/_components/field/cancel-alert/cancel-alert.component.html @@ -1,18 +1,14 @@
-

{{ heading$ }}

+

{{ localizedVal('Discard unsaved changes?', localeCategory) }}

-

{{ body1$ }}

-

{{ body2$ }}

+

{{ localizedVal('You have unsaved changes. You can discard them or go back to keep working.', localeCategory) }}

- - - - - - - - - +
diff --git a/packages/angular-sdk-components/src/lib/_components/field/cancel-alert/cancel-alert.component.scss b/packages/angular-sdk-components/src/lib/_components/field/cancel-alert/cancel-alert.component.scss index 67f04861..16ff14d5 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/cancel-alert/cancel-alert.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/field/cancel-alert/cancel-alert.component.scss @@ -5,20 +5,19 @@ align-items: center; height: 100%; width: 100%; - background-color: var(--app-dialog-background-color); position: fixed; z-index: 9999; top: 0px; left: 0px; + background: rgba(0, 0, 0, 0.5); } .psdk-cancel-alert-top { - display: table; margin: auto; min-width: 550px; - background-color: var(--app-form-color); border: 1px solid var(--app-inverse-form-color); border-radius: 10px; padding: 20px; box-shadow: 0 0 10px 3px var(--app-box-shadow-color); + background-color: var(--mat-sys-surface-container); } diff --git a/packages/angular-sdk-components/src/lib/_components/field/cancel-alert/cancel-alert.component.ts b/packages/angular-sdk-components/src/lib/_components/field/cancel-alert/cancel-alert.component.ts index 08f7e78c..afda0cd6 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/cancel-alert/cancel-alert.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/cancel-alert/cancel-alert.component.ts @@ -1,54 +1,44 @@ -import { Component, Input, Output, EventEmitter, OnChanges } from '@angular/core'; +import { Component, Input, Output, EventEmitter, OnChanges, forwardRef } from '@angular/core'; import { CommonModule } from '@angular/common'; import { MatButtonModule } from '@angular/material/button'; import { MatGridListModule } from '@angular/material/grid-list'; import { ProgressSpinnerService } from '../../../_messages/progress-spinner.service'; +import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; @Component({ selector: 'app-cancel-alert', templateUrl: './cancel-alert.component.html', styleUrls: ['./cancel-alert.component.scss'], - standalone: true, - imports: [CommonModule, MatGridListModule, MatButtonModule] + imports: [CommonModule, MatGridListModule, MatButtonModule, forwardRef(() => ComponentMapperComponent)] }) export class CancelAlertComponent implements OnChanges { @Input() pConn$: typeof PConnect; @Input() bShowAlert$: boolean; @Output() onAlertState$: EventEmitter = new EventEmitter(); - heading$: string; - body1$: string; - body2$: string; itemKey: string; localizedVal: Function; localeCategory = 'ModalContainer'; + discardButton: any; + goBackButton: any; constructor(private psService: ProgressSpinnerService) {} ngOnChanges() { if (this.bShowAlert$) { this.psService.sendMessage(false); - const contextName = this.pConn$.getContextName(); - const caseInfo = this.pConn$.getCaseInfo(); - const caseName = caseInfo.getName(); - const ID = caseInfo.getID(); this.localizedVal = PCore.getLocaleUtils().getLocaleValue; - this.itemKey = contextName; - this.heading$ = `Delete ${caseName} (${ID})`; - this.body1$ = `${this.localizedVal('Are you sure you want to delete ', this.localeCategory) + caseName} (${ID})?`; - this.body2$ = this.localizedVal('Alternatively, you can continue working or save your work for later.', this.localeCategory); - - // this.onAlertState$.emit(true); + this.createCancelAlertButtons(); } } - dismissAlert() { + dismissAlertOnly() { this.bShowAlert$ = false; this.onAlertState$.emit(false); } - dismissAlertOnly() { + dismissAlert() { this.bShowAlert$ = false; this.onAlertState$.emit(true); } @@ -57,31 +47,28 @@ export class CancelAlertComponent implements OnChanges { alert(sMessage); } - buttonClick(sAction) { + createCancelAlertButtons() { + this.discardButton = { + actionID: 'discard', + jsAction: 'discard', + name: this.pConn$.getLocalizedValue('Discard', '', '') + }; + this.goBackButton = { + actionID: 'continue', + jsAction: 'continue', + name: this.pConn$.getLocalizedValue('Go back', '', '') + }; + } + + buttonClick({ action }) { const actionsAPI = this.pConn$.getActionsApi(); this.localizedVal = PCore.getLocaleUtils().getLocaleValue; - switch (sAction) { - case 'save': - this.psService.sendMessage(true); - // eslint-disable-next-line no-case-declarations - const savePromise = actionsAPI.saveAndClose(this.itemKey); - savePromise - .then(() => { - this.psService.sendMessage(false); - this.dismissAlert(); - - PCore.getPubSubUtils().publish(PCore.getConstants().PUB_SUB_EVENTS.CASE_EVENTS.CASE_CREATED); - }) - .catch(() => { - this.psService.sendMessage(false); - this.sendMessage(this.localizedVal('Save failed', this.localeCategory)); - }); - break; + switch (action) { case 'continue': this.dismissAlertOnly(); break; - case 'delete': + case 'discard': this.psService.sendMessage(true); // eslint-disable-next-line no-case-declarations diff --git a/packages/angular-sdk-components/src/lib/_components/field/check-box/check-box.component.html b/packages/angular-sdk-components/src/lib/_components/field/check-box/check-box.component.html index cf41a983..3ab25ba9 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/check-box/check-box.component.html +++ b/packages/angular-sdk-components/src/lib/_components/field/check-box/check-box.component.html @@ -1,16 +1,20 @@ -
- +
+
+ +
- +
@@ -18,7 +22,6 @@ {{ caption$ }}{{ caption$ }}

{{ helperText }}

- {{ getErrorMessage() }} + {{ getErrorMessage() }}
+ +

{{ label$ }}

+
+ +
+
diff --git a/packages/angular-sdk-components/src/lib/_components/field/check-box/check-box.component.scss b/packages/angular-sdk-components/src/lib/_components/field/check-box/check-box.component.scss index 4abc8a90..46b5cdff 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/check-box/check-box.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/field/check-box/check-box.component.scss @@ -11,7 +11,6 @@ transform: translateY(-1.28125em) scale(0.75) perspective(100px) translateZ(0.001px); -ms-transform: translateY(-1.28125em) scale(0.75); width: 133.33333%; - color: rgba(0, 0, 0, 0.6); } .psdk-data-readonly { @@ -35,3 +34,9 @@ mat-checkbox { .mat-mdc-option { margin-left: -16px; } + +.label-required::after { + display: inline; + content: ' *'; + vertical-align: top; +} diff --git a/packages/angular-sdk-components/src/lib/_components/field/check-box/check-box.component.ts b/packages/angular-sdk-components/src/lib/_components/field/check-box/check-box.component.ts index de2e3c23..f1a900c4 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/check-box/check-box.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/check-box/check-box.component.ts @@ -1,12 +1,11 @@ -import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core'; +import { Component, OnInit, forwardRef, OnDestroy } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatOptionModule } from '@angular/material/core'; -import { interval } from 'rxjs'; -import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; -import { Utils } from '../../../_helpers/utils'; + +import { FieldBase } from '../field.base'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; import { PConnFieldProps } from '../../../_types/PConnProps.interface'; import { deleteInstruction, insertInstruction, updateNewInstructions } from '../../../_helpers/instructions-utils'; @@ -26,38 +25,22 @@ interface CheckboxProps extends Omit { primaryField: string; readonlyContextList: any; referenceList: string; + variant?: string; + renderMode: string; } @Component({ selector: 'app-check-box', templateUrl: './check-box.component.html', styleUrls: ['./check-box.component.scss'], - standalone: true, imports: [CommonModule, ReactiveFormsModule, MatCheckboxModule, MatFormFieldModule, MatOptionModule, forwardRef(() => ComponentMapperComponent)] }) -export class CheckBoxComponent implements OnInit, OnDestroy { - @Input() pConn$: typeof PConnect; - @Input() formGroup$: FormGroup; - - // Used with AngularPConnect - angularPConnectData: AngularPConnectData = {}; +export class CheckBoxComponent extends FieldBase implements OnInit, OnDestroy { configProps$: CheckboxProps; - label$ = ''; - value$: any = ''; caption$?: string = ''; - testId = ''; showLabel$ = false; isChecked$ = false; - bRequired$ = false; - bReadonly$ = false; - bDisabled$ = false; - bVisible$ = true; - displayMode$?: string = ''; - controlName$: string; - bHasForm$ = true; - componentReference = ''; - helperText: string; trueLabel$?: string; falseLabel$?: string; @@ -69,84 +52,35 @@ export class CheckBoxComponent implements OnInit, OnDestroy { selectedvalues: any; referenceList: string; listOfCheckboxes: any[] = []; - actionsApi: Object; - propName: string; - - fieldControl = new FormControl('', null); - - constructor( - private angularPConnect: AngularPConnectService, - private cdRef: ChangeDetectorRef, - private utils: Utils - ) {} - - ngOnInit(): void { - // First thing in initialization is registering and subscribing to the AngularPConnect service - this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - this.controlName$ = this.angularPConnect.getComponentID(this); - - // Then, continue on with other initialization + variant?: string; - // call updateSelf when initializing - // this.updateSelf(); - this.checkAndUpdate(); + // Override ngOnInit method + override ngOnInit(): void { + super.ngOnInit(); - if (this.selectionMode === 'multi' && this.referenceList?.length > 0) { + if (this.selectionMode === 'multi' && this.referenceList?.length > 0 && !this.bReadonly$) { this.pConn$.setReferenceList(this.selectionList); updateNewInstructions(this.pConn$, this.selectionList); } - - if (this.formGroup$) { - // add control to formGroup - this.formGroup$.addControl(this.controlName$, this.fieldControl); - this.fieldControl.setValue(this.value$); - this.bHasForm$ = true; - } else { - this.bReadonly$ = true; - this.bHasForm$ = false; - } - } - - ngOnDestroy(): void { - if (this.formGroup$) { - this.formGroup$.removeControl(this.controlName$); - } - - if (this.angularPConnectData.unsubscribeFn) { - this.angularPConnectData.unsubscribeFn(); - } } - // Callback passed when subscribing to store change - onStateChange() { - this.checkAndUpdate(); - } - - checkAndUpdate() { - // Should always check the bridge to see if the component should - // update itself (re-render) - const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); - - // ONLY call updateSelf when the component should update - if (bUpdateSelf) { - this.updateSelf(); - } - } - - // updateSelf - updateSelf(): void { + /** + * Updates the component when there are changes in the state. + */ + override updateSelf(): void { // moved this from ngOnInit() and call this from there instead... this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as CheckboxProps; - this.testId = this.configProps$.testId; - this.displayMode$ = this.configProps$.displayMode; - this.label$ = this.configProps$.label; + // Update component common properties + this.updateComponentCommonProperties(this.configProps$); + if (this.label$ != '') { this.showLabel$ = true; } - - this.actionsApi = this.pConn$.getActionsApi(); - this.propName = this.pConn$.getStateProps().value; + this.variant = this.configProps$.variant; + if (this.bReadonly$) { + this.fieldControl?.disable(); + } // multi case this.selectionMode = this.configProps$.selectionMode; @@ -155,6 +89,7 @@ export class CheckBoxComponent implements OnInit, OnDestroy { this.selectionList = this.configProps$.selectionList; this.selectedvalues = this.configProps$.readonlyContextList; this.primaryField = this.configProps$.primaryField; + this.bReadonly$ = this.configProps$.renderMode === 'ReadOnly' || this.displayMode$ === 'DISPLAY_ONLY' || this.configProps$.readOnly; this.datasource = this.configProps$.datasource; this.selectionKey = this.configProps$.selectionKey; @@ -172,54 +107,10 @@ export class CheckBoxComponent implements OnInit, OnDestroy { } this.caption$ = this.configProps$.caption; - this.helperText = this.configProps$.helperText; this.trueLabel$ = this.configProps$.trueLabel || 'Yes'; this.falseLabel$ = this.configProps$.falseLabel || 'No'; - // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError - setTimeout(() => { - if (this.configProps$.required != null) { - this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required); - } - this.cdRef.detectChanges(); - }); - - if (this.configProps$.visibility != null) { - this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility); - } - - // disabled - if (this.configProps$.disabled != undefined) { - this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled); - } - - if (this.configProps$.readOnly != null) { - this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly); - } - - if (this.bDisabled$ || this.bReadonly$) { - this.fieldControl.disable(); - } else { - this.fieldControl.enable(); - } - - this.componentReference = this.pConn$.getStateProps().value; - - // eslint-disable-next-line sonarjs/no-redundant-boolean - if (this.value$ === 'true' || this.value$ == true) { - this.isChecked$ = true; - } else { - this.isChecked$ = false; - } - // trigger display of error message with field control - if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') { - const timer = interval(100).subscribe(() => { - this.fieldControl.setErrors({ message: true }); - this.fieldControl.markAsTouched(); - - timer.unsubscribe(); - }); - } + this.isChecked$ = this.value$ === 'true' || this.value$ == true; } } @@ -257,21 +148,4 @@ export class CheckBoxComponent implements OnInit, OnDestroy { context: '' }); } - - getErrorMessage() { - let errMessage = ''; - - // look for validation messages for json, pre-defined or just an error pushed from workitem (400) - if (this.fieldControl.hasError('message')) { - errMessage = this.angularPConnectData.validateMessage ?? ''; - return errMessage; - } - if (this.fieldControl.hasError('required')) { - errMessage = 'You must enter a value'; - } else if (this.fieldControl.errors) { - errMessage = this.fieldControl.errors.toString(); - } - - return errMessage; - } } diff --git a/packages/angular-sdk-components/src/lib/_components/field/currency/currency.component.ts b/packages/angular-sdk-components/src/lib/_components/field/currency/currency.component.ts index c2d9776c..8af1ba2e 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/currency/currency.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/currency/currency.component.ts @@ -1,17 +1,16 @@ -import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core'; +import { Component, forwardRef } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { FormControl, ReactiveFormsModule } from '@angular/forms'; import { MatInputModule } from '@angular/material/input'; import { MatFormFieldModule } from '@angular/material/form-field'; -import { interval } from 'rxjs'; import { NgxCurrencyDirective, NgxCurrencyInputMode } from 'ngx-currency'; -import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; -import { Utils } from '../../../_helpers/utils'; + +import { FieldBase } from '../field.base'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; import { handleEvent } from '../../../_helpers/event-util'; import { getCurrencyCharacters, getCurrencyOptions } from '../../../_helpers/currency-utils'; -import { PConnFieldProps } from '../../../_types/PConnProps.interface'; import { format } from '../../../_helpers/formatters'; +import { PConnFieldProps } from '../../../_types/PConnProps.interface'; interface CurrrencyProps extends PConnFieldProps { // If any, enter additional props that only exist on Currency here @@ -24,176 +23,61 @@ interface CurrrencyProps extends PConnFieldProps { selector: 'app-currency', templateUrl: './currency.component.html', styleUrls: ['./currency.component.scss'], - standalone: true, imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, NgxCurrencyDirective, forwardRef(() => ComponentMapperComponent)] }) -export class CurrencyComponent implements OnInit, OnDestroy { - @Input() pConn$: typeof PConnect; - @Input() formGroup$: FormGroup; - - // Used with AngularPConnect - angularPConnectData: AngularPConnectData = {}; +export class CurrencyComponent extends FieldBase { configProps$: CurrrencyProps; + override fieldControl = new FormControl(null, { updateOn: 'blur' }); - label$ = ''; - value$: any; - bRequired$ = false; - bReadonly$ = false; - bDisabled$ = false; - bVisible$ = true; - displayMode$?: string = ''; - controlName$: string; - bHasForm$ = true; - componentReference = ''; - testId: string; - helperText: string; - placeholder: string; - currencyISOCode = 'USD'; - currencyOptions: Object = {}; - - fieldControl = new FormControl(null, { updateOn: 'blur' }); + currencyOptions: object = {}; currencySymbol: string; thousandSeparator: string; decimalSeparator: string; - inputMode: any; decimalPrecision: number | undefined; formattedValue: string; formatter; + inputMode = NgxCurrencyInputMode.Natural; - constructor( - private angularPConnect: AngularPConnectService, - private cdRef: ChangeDetectorRef, - private utils: Utils - ) {} - - ngOnInit(): void { - // First thing in initialization is registering and subscribing to the AngularPConnect service - this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - this.controlName$ = this.angularPConnect.getComponentID(this); - - // Then, continue on with other initialization + /** + * Updates the component when there are changes in the state. + */ + override updateSelf(): void { + // Resolve configuration properties + this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as CurrrencyProps; - // call updateSelf when initializing - // this.updateSelf(); - this.checkAndUpdate(); + // Update component common properties + this.updateComponentCommonProperties(this.configProps$); - if (this.formGroup$) { - // add control to formGroup - this.formGroup$.addControl(this.controlName$, this.fieldControl); + // Extract and normalize the value property + const { value } = this.configProps$; + if (value) { + this.value$ = typeof value === 'string' ? parseFloat(value) : value; this.fieldControl.setValue(this.value$); - this.bHasForm$ = true; - } else { - this.bReadonly$ = true; - this.bHasForm$ = false; - } - } - - ngOnDestroy(): void { - if (this.formGroup$) { - this.formGroup$.removeControl(this.controlName$); - } - - if (this.angularPConnectData.unsubscribeFn) { - this.angularPConnectData.unsubscribeFn(); } - } - - // Callback passed when subscribing to store change - onStateChange() { - this.checkAndUpdate(); - } - - checkAndUpdate() { - // Should always check the bridge to see if the component should - // update itself (re-render) - const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); - // ONLY call updateSelf when the component should update - if (bUpdateSelf) { - this.updateSelf(); - } + // update currency properties + this.updateCurrencyProperties(this.configProps$); } - // updateSelf - updateSelf(): void { - // starting very simple... - - // moved this from ngOnInit() and call this from there instead... - this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as CurrrencyProps; - this.testId = this.configProps$.testId; - this.label$ = this.configProps$.label; - this.displayMode$ = this.configProps$.displayMode; - this.inputMode = NgxCurrencyInputMode.Natural; - let nValue: any = this.configProps$.value; - if (nValue) { - if (typeof nValue === 'string') { - nValue = parseFloat(nValue); - } - this.value$ = nValue; - this.fieldControl.setValue(this.value$); - } - this.helperText = this.configProps$.helperText; - this.placeholder = this.configProps$.placeholder || ''; - const currencyISOCode = this.configProps$?.currencyISOCode ?? ''; + /** + * Updates the currency properties + * + * @param {Object} configProps - Configuration properties. + * @param {boolean} configProps.allowDecimals - Whether to allow decimal values. + * @param {string} configProps.currencyISOCode - The ISO code of the currency. + * @param {string} configProps.formatter - The formatter type (e.g., 'currency'). + */ + protected updateCurrencyProperties(configProps): void { + const { allowDecimals, currencyISOCode = 'USD', formatter } = configProps; const theSymbols = getCurrencyCharacters(currencyISOCode); this.currencySymbol = theSymbols.theCurrencySymbol; this.thousandSeparator = theSymbols.theDigitGroupSeparator; this.decimalSeparator = theSymbols.theDecimalIndicator; - this.formatter = this.configProps$.formatter; + this.decimalPrecision = allowDecimals ? 2 : 0; - if (this.displayMode$ === 'DISPLAY_ONLY' || this.displayMode$ === 'STACKED_LARGE_VAL') { - const theCurrencyOptions = getCurrencyOptions(currencyISOCode); - if (this.formatter) { - this.formattedValue = format(this.value$, this.formatter.toLowerCase(), theCurrencyOptions); - } else { - this.formattedValue = format(this.value$, 'currency', theCurrencyOptions); - } - } - - // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError - setTimeout(() => { - if (this.configProps$.required != null) { - this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required); - } - this.cdRef.detectChanges(); - }); - - if (this.configProps$.visibility != null) { - this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility); - } - - // disabled - if (this.configProps$.disabled != undefined) { - this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled); - } - - if (this.bDisabled$) { - this.fieldControl.disable(); - } else { - this.fieldControl.enable(); - } - - if (this.configProps$.readOnly != null) { - this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly); - } - - if (this.configProps$.currencyISOCode != null) { - this.currencyISOCode = this.configProps$.currencyISOCode; - } - - this.decimalPrecision = this.configProps$?.allowDecimals ? 2 : 0; - - this.componentReference = this.pConn$.getStateProps().value; - - // trigger display of error message with field control - if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') { - const timer = interval(100).subscribe(() => { - this.fieldControl.setErrors({ message: true }); - this.fieldControl.markAsTouched(); - - timer.unsubscribe(); - }); + if (['DISPLAY_ONLY', 'STACKED_LARGE_VAL'].includes(this.displayMode$)) { + this.formattedValue = format(this.value$, formatter ? formatter.toLowerCase() : 'currency', getCurrencyOptions(currencyISOCode)); } } @@ -218,21 +102,4 @@ export class CurrencyComponent implements OnInit, OnDestroy { handleEvent(actionsApi, 'changeNblur', propName, value); } } - - getErrorMessage() { - let errMessage = ''; - - // look for validation messages for json, pre-defined or just an error pushed from workitem (400) - if (this.fieldControl.hasError('message')) { - errMessage = this.angularPConnectData.validateMessage ?? ''; - return errMessage; - } - if (this.fieldControl.hasError('required')) { - errMessage = 'You must enter a value'; - } else if (this.fieldControl.errors) { - errMessage = this.fieldControl.errors.toString(); - } - - return errMessage; - } } diff --git a/packages/angular-sdk-components/src/lib/_components/field/date-time/date-time.component.html b/packages/angular-sdk-components/src/lib/_components/field/date-time/date-time.component.html index 8e99825e..b890ef6d 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/date-time/date-time.component.html +++ b/packages/angular-sdk-components/src/lib/_components/field/date-time/date-time.component.html @@ -17,7 +17,7 @@ [readonly]="bDisabled$" /> - + {{ getErrorMessage() }}
diff --git a/packages/angular-sdk-components/src/lib/_components/field/date-time/date-time.component.ts b/packages/angular-sdk-components/src/lib/_components/field/date-time/date-time.component.ts index 827e2c25..4c91c6cd 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/date-time/date-time.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/date-time/date-time.component.ts @@ -1,20 +1,19 @@ -import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core'; +import { Component, OnInit, forwardRef, OnDestroy, inject } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatInputModule } from '@angular/material/input'; import { MatFormFieldModule } from '@angular/material/form-field'; +import { ScrollStrategyOptions } from '@angular/cdk/overlay'; import { OwlDateTimeModule, OwlNativeDateTimeModule } from '@danielmoncada/angular-datetime-picker'; -import { interval } from 'rxjs'; import dayjs from 'dayjs'; -import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; -import { Utils } from '../../../_helpers/utils'; + +import { FieldBase } from '../field.base'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; -import { dateFormatInfoDefault, getDateFormatInfo } from '../../../_helpers/date-format-utils'; -import { PConnFieldProps } from '../../../_types/PConnProps.interface'; +import { getDateFormatInfo } from '../../../_helpers/date-format-utils'; import { handleEvent } from '../../../_helpers/event-util'; -import { format } from '../../../_helpers/formatters'; import { DateFormatters } from '../../../_helpers/formatters/date'; +import { PConnFieldProps } from '../../../_types/PConnProps.interface'; interface DateTimeProps extends PConnFieldProps { // If any, enter additional props that only exist on DateTime here @@ -24,7 +23,6 @@ interface DateTimeProps extends PConnFieldProps { selector: 'app-date-time', templateUrl: './date-time.component.html', styleUrls: ['./date-time.component.scss'], - standalone: true, imports: [ CommonModule, ReactiveFormsModule, @@ -36,162 +34,64 @@ interface DateTimeProps extends PConnFieldProps { forwardRef(() => ComponentMapperComponent) ] }) -export class DateTimeComponent implements OnInit, OnDestroy { - @Input() pConn$: typeof PConnect; - @Input() formGroup$: FormGroup; - - // Used with AngularPConnect - angularPConnectData: AngularPConnectData = {}; +export class DateTimeComponent extends FieldBase implements OnInit, OnDestroy { configProps$: DateTimeProps; - label$ = ''; - value$: any; - bRequired$ = false; - bReadonly$ = false; - bDisabled$ = false; - bVisible$ = true; - displayMode$?: string = ''; - controlName$: string; - bHasForm$ = true; - componentReference = ''; - testId = ''; - helperText: string; - - fieldControl = new FormControl('', null); stepHour = 1; stepMinute = 1; stepSecond = 1; public color = 'primary'; - // Start with default dateFormatInfo - dateFormatInfo = dateFormatInfoDefault; - // and then update, as needed, based on locale, etc. - theDateFormat = getDateFormatInfo(); - placeholder: string; - actionsApi: Object; - propName: string; formattedValue$: any; + theDateFormat = getDateFormatInfo(); timezone = PCore.getEnvironmentInfo()?.getTimeZone(); + override placeholder = `${this.theDateFormat.dateFormatStringLC}, hh:mm A`; - constructor( - private angularPConnect: AngularPConnectService, - private cdRef: ChangeDetectorRef, - private utils: Utils - ) {} + private sso = inject(ScrollStrategyOptions); + scrollStrategy = this.sso.reposition(); - ngOnInit(): void { - this.placeholder = `${this.theDateFormat.dateFormatStringLC}, hh:mm A`; - // First thing in initialization is registering and subscribing to the AngularPConnect service - this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - this.controlName$ = this.angularPConnect.getComponentID(this); - // Then, continue on with other initialization - // call updateSelf when initializing - // this.updateSelf(); - this.checkAndUpdate(); + override ngOnInit(): void { + super.ngOnInit(); if (this.formGroup$) { - // add control to formGroup - this.formGroup$.addControl(this.controlName$, this.fieldControl); let dateTimeValue = this.value$ ?? ''; if (this.value$) { dateTimeValue = dayjs(DateFormatters?.convertToTimezone(this.value$, { timezone: this.timezone }))?.toISOString(); } this.fieldControl.setValue(dateTimeValue); - this.bHasForm$ = true; - } else { - this.bReadonly$ = true; - this.bHasForm$ = false; - } - } - - ngOnDestroy(): void { - if (this.formGroup$) { - this.formGroup$.removeControl(this.controlName$); - } - if (this.angularPConnectData.unsubscribeFn) { - this.angularPConnectData.unsubscribeFn(); } } - // Callback passed when subscribing to store change - onStateChange() { - this.checkAndUpdate(); - } - - checkAndUpdate() { - // Should always check the bridge to see if the component should - // update itself (re-render) - const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); + /** + * Updates the component when there are changes in the state. + */ + override updateSelf(): void { + // Resolve config properties + this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as DateTimeProps; - // ONLY call updateSelf when the component should update - if (bUpdateSelf) { - this.updateSelf(); - } - } + // Update component common properties + this.updateComponentCommonProperties(this.configProps$); - // updateSelf - updateSelf(): void { - // starting very simple... - // moved this from ngOnInit() and call this from there instead... - this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as DateTimeProps; + // Extract the value property + const { value } = this.configProps$; - this.label$ = this.configProps$.label; - this.displayMode$ = this.configProps$.displayMode; - this.testId = this.configProps$.testId; - this.helperText = this.configProps$.helperText; - this.value$ = this.configProps$?.value; - let dateTimeValue = this.configProps$?.value ?? ''; + // Update component properties + this.value$ = value; + let dateTimeValue = value ?? ''; if (this.value$) { dateTimeValue = dayjs(DateFormatters?.convertToTimezone(this.value$, { timezone: this.timezone }))?.toISOString(); } this.fieldControl.setValue(dateTimeValue); - // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError - setTimeout(() => { - if (this.configProps$.required != null) { - this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required); - } - this.cdRef.detectChanges(); - }); - - if (this.displayMode$ === 'DISPLAY_ONLY' || this.displayMode$ === 'STACKED_LARGE_VAL') { - this.formattedValue$ = format(this.value$, 'datetime', { - format: `${this.theDateFormat.dateFormatString} hh:mm A` - }); - } - - if (this.configProps$.visibility != null) { - this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility); - } - - // disabled - if (this.configProps$.disabled != undefined) { - this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled); - } - - if (this.bDisabled$) { - this.fieldControl.disable(); - } else { - this.fieldControl.enable(); - } - if (this.configProps$.readOnly != null) { - this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly); + if (['DISPLAY_ONLY', 'STACKED_LARGE_VAL'].includes(this.displayMode$)) { + this.formattedValue$ = this.generateDateTime(this.value$); } + } - this.componentReference = this.pConn$.getStateProps().value; - - this.actionsApi = this.pConn$.getActionsApi(); - this.propName = this.pConn$.getStateProps().value; - - // trigger display of error message with field control - if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') { - const timer = interval(100).subscribe(() => { - this.fieldControl.setErrors({ message: true }); - this.fieldControl.markAsTouched(); - - timer.unsubscribe(); - }); - } + generateDateTime(sVal): string { + if (!sVal) return ''; + if (sVal.length === 10) return this.utils.generateDate(sVal, 'Date-Long-Custom-YYYY'); + return this.utils.generateDateTime(sVal, 'DateTime-Long-YYYY-Custom'); } fieldOnDateChange(event: any) { @@ -204,19 +104,4 @@ export class DateTimeComponent implements OnInit, OnDestroy { } handleEvent(this.actionsApi, 'changeNblur', this.propName, event.value); } - - getErrorMessage() { - let errMessage = ''; - // look for validation messages for json, pre-defined or just an error pushed from workitem (400) - if (this.fieldControl.hasError('message')) { - errMessage = this.angularPConnectData.validateMessage ?? ''; - return errMessage; - } - if (this.fieldControl.hasError('required')) { - errMessage = 'You must enter a value'; - } else if (this.fieldControl.errors) { - errMessage = this.fieldControl.errors.toString(); - } - return errMessage; - } } diff --git a/packages/angular-sdk-components/src/lib/_components/field/date/date.component.html b/packages/angular-sdk-components/src/lib/_components/field/date/date.component.html index 968e5be0..f4420633 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/date/date.component.html +++ b/packages/angular-sdk-components/src/lib/_components/field/date/date.component.html @@ -11,7 +11,7 @@ #dateInput [attr.data-test-id]="testId" [matDatepicker]="pegadate" - [placeholder]="dateFormatInfo.dateFormatStringLC" + [placeholder]="theDateFormat.dateFormatStringLC" type="text" [value]="value$" [required]="bRequired$" @@ -20,7 +20,7 @@ (dateChange)="fieldOnDateChange($event)" /> - + {{ getErrorMessage() }}
diff --git a/packages/angular-sdk-components/src/lib/_components/field/date/date.component.ts b/packages/angular-sdk-components/src/lib/_components/field/date/date.component.ts index 0242b9ff..cb8dba1c 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/date/date.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/date/date.component.ts @@ -1,20 +1,19 @@ -import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, Inject, OnDestroy } from '@angular/core'; +import { Component, OnInit, forwardRef, OnDestroy } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatNativeDateModule } from '@angular/material/core'; import { MatInputModule } from '@angular/material/input'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MAT_DATE_FORMATS } from '@angular/material/core'; import { MomentDateModule } from '@angular/material-moment-adapter'; -import { interval } from 'rxjs'; -import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; -import { Utils } from '../../../_helpers/utils'; + +import { FieldBase } from '../field.base'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; -import { dateFormatInfoDefault, getDateFormatInfo } from '../../../_helpers/date-format-utils'; -import { PConnFieldProps } from '../../../_types/PConnProps.interface'; +import { getDateFormatInfo } from '../../../_helpers/date-format-utils'; import { format } from '../../../_helpers/formatters'; import { handleEvent } from '../../../_helpers/event-util'; +import { PConnFieldProps } from '../../../_types/PConnProps.interface'; interface DateProps extends PConnFieldProps { // If any, enter additional props that only exist on Date here @@ -43,7 +42,6 @@ class MyFormat { selector: 'app-date', templateUrl: './date.component.html', styleUrls: ['./date.component.scss'], - standalone: true, imports: [ CommonModule, ReactiveFormsModule, @@ -56,153 +54,32 @@ class MyFormat { ], providers: [{ provide: MAT_DATE_FORMATS, useClass: MyFormat }] }) -export class DateComponent implements OnInit, OnDestroy { - @Input() pConn$: typeof PConnect; - @Input() formGroup$: FormGroup; - - // Used with AngularPConnect - angularPConnectData: AngularPConnectData = {}; +export class DateComponent extends FieldBase implements OnInit, OnDestroy { configProps$: DateProps; - label$ = ''; - value$: any; - bRequired$ = false; - bReadonly$ = false; - bDisabled$ = false; - bVisible$ = true; - displayMode$?: string = ''; - controlName$: string; - bHasForm$ = true; - componentReference = ''; - testId = ''; - helperText: string; - placeholder: string; - - fieldControl = new FormControl('', null); - - // Start with default dateFormatInfo - dateFormatInfo = dateFormatInfoDefault; - // and then update, as needed, based on locale, etc. theDateFormat = getDateFormatInfo(); - actionsApi: Object; - propName: string; formattedValue$: any; - constructor( - private angularPConnect: AngularPConnectService, - private cdRef: ChangeDetectorRef, - private utils: Utils, - @Inject(MAT_DATE_FORMATS) private config: MyFormat - ) {} - - ngOnInit(): void { - this.dateFormatInfo = this.theDateFormat; - // First thing in initialization is registering and subscribing to the AngularPConnect service - this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - this.controlName$ = this.angularPConnect.getComponentID(this); - - // Then, continue on with other initialization - // call updateSelf when initializing - // this.updateSelf(); - this.checkAndUpdate(); - - if (this.formGroup$) { - // add control to formGroup - this.formGroup$.addControl(this.controlName$, this.fieldControl); - this.fieldControl.setValue(this.value$); - this.bHasForm$ = true; - } else { - this.bReadonly$ = true; - this.bHasForm$ = false; - } - } - - ngOnDestroy(): void { - if (this.formGroup$) { - this.formGroup$.removeControl(this.controlName$); - } - - if (this.angularPConnectData.unsubscribeFn) { - this.angularPConnectData.unsubscribeFn(); - } - } - - // Callback passed when subscribing to store change - onStateChange() { - this.checkAndUpdate(); - } - - checkAndUpdate() { - // Should always check the bridge to see if the component should - // update itself (re-render) - const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); - - // ONLY call updateSelf when the component should update - if (bUpdateSelf) { - this.updateSelf(); - } - } - - // updateSelf - updateSelf(): void { - // starting very simple... - // moved this from ngOnInit() and call this from there instead... + /** + * Updates the component when there are changes in the state. + */ + override updateSelf(): void { + // Resolve config properties this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as DateProps; - this.value$ = this.configProps$.value; - this.testId = this.configProps$.testId; - this.label$ = this.configProps$.label; - this.displayMode$ = this.configProps$.displayMode; - this.helperText = this.configProps$.helperText; - this.placeholder = this.configProps$.placeholder || ''; - - this.actionsApi = this.pConn$.getActionsApi(); - this.propName = this.pConn$.getStateProps().value; - - // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError - setTimeout(() => { - if (this.configProps$.required != null) { - this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required); - } - this.cdRef.detectChanges(); - }); + // Update component common properties + this.updateComponentCommonProperties(this.configProps$); - if (this.displayMode$ === 'DISPLAY_ONLY' || this.displayMode$ === 'STACKED_LARGE_VAL') { + // Extract and normalize the value property + const { value } = this.configProps$; + this.value$ = value; + + // Format value for display modes + if (['DISPLAY_ONLY', 'STACKED_LARGE_VAL'].includes(this.displayMode$)) { this.formattedValue$ = format(this.value$, 'date', { format: this.theDateFormat.dateFormatString }); } - - if (this.configProps$.visibility != null) { - this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility); - } - - // disabled - if (this.configProps$.disabled != undefined) { - this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled); - } - - if (this.bDisabled$) { - this.fieldControl.disable(); - } else { - this.fieldControl.enable(); - } - - if (this.configProps$.readOnly != null) { - this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly); - } - - this.componentReference = this.pConn$.getStateProps().value; - - // trigger display of error message with field control - if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') { - const timer = interval(100).subscribe(() => { - this.fieldControl.setErrors({ message: true }); - this.fieldControl.markAsTouched(); - - timer.unsubscribe(); - }); - } } fieldOnDateChange(event: any) { @@ -218,18 +95,20 @@ export class DateComponent implements OnInit, OnDestroy { return this.fieldControl.status === 'INVALID'; } - getErrorMessage() { - let errMessage = ''; + override getErrorMessage() { // look for validation messages for json, pre-defined or just an error pushed from workitem (400) if (this.fieldControl.hasError('message')) { - errMessage = this.angularPConnectData.validateMessage ?? ''; - return errMessage; + return this.angularPConnectData.validateMessage ?? ''; } + if (this.fieldControl.hasError('required')) { - errMessage = 'You must enter a value'; - } else if (this.fieldControl.errors) { - errMessage = `${this.fieldControl.errors['matDatepickerParse'].text} is not a valid date value`; + return 'You must enter a value'; + } + + if (this.fieldControl.errors) { + return `${this.fieldControl.errors['matDatepickerParse'].text} is not a valid date value`; } - return errMessage; + + return ''; } } diff --git a/packages/angular-sdk-components/src/lib/_components/field/decimal/decimal.component.ts b/packages/angular-sdk-components/src/lib/_components/field/decimal/decimal.component.ts index c1acc404..7b9e2a70 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/decimal/decimal.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/decimal/decimal.component.ts @@ -1,17 +1,16 @@ -import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core'; +import { Component, forwardRef } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { MatInputModule } from '@angular/material/input'; import { MatFormFieldModule } from '@angular/material/form-field'; import { NgxCurrencyDirective, NgxCurrencyInputMode } from 'ngx-currency'; -import { interval } from 'rxjs'; -import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; -import { Utils } from '../../../_helpers/utils'; + +import { FieldBase } from '../field.base'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; import { handleEvent } from '../../../_helpers/event-util'; import { getCurrencyCharacters, getCurrencyOptions } from '../../../_helpers/currency-utils'; -import { PConnFieldProps } from '../../../_types/PConnProps.interface'; import { format } from '../../../_helpers/formatters'; +import { PConnFieldProps } from '../../../_types/PConnProps.interface'; interface DecimalProps extends PConnFieldProps { // If any, enter additional props that only exist on Decimal here @@ -25,7 +24,6 @@ interface DecimalProps extends PConnFieldProps { selector: 'app-decimal', templateUrl: './decimal.component.html', styleUrls: ['./decimal.component.scss'], - standalone: true, imports: [ CommonModule, ReactiveFormsModule, @@ -36,176 +34,69 @@ interface DecimalProps extends PConnFieldProps { forwardRef(() => ComponentMapperComponent) ] }) -export class DecimalComponent implements OnInit, OnDestroy { - @Input() pConn$: typeof PConnect; - @Input() formGroup$: FormGroup; - - // Used with AngularPConnect - angularPConnectData: AngularPConnectData = {}; +export class DecimalComponent extends FieldBase { configProps$: DecimalProps; + override fieldControl = new FormControl(null, null); - label$ = ''; - value$: any; - bRequired$ = false; - bReadonly$ = false; - bDisabled$ = false; - bVisible$ = true; - displayMode$?: string = ''; - controlName$: string; - bHasForm$ = true; - componentReference = ''; - testId: string; - helperText: string; - placeholder: string; - - fieldControl = new FormControl(null, null); decimalSeparator: string; thousandSeparator: string; currencySymbol = ''; decimalPrecision: number | undefined; formatter; formattedValue: any; - inputMode: any; + inputMode: any = NgxCurrencyInputMode.Natural; suffix = ''; - constructor( - private angularPConnect: AngularPConnectService, - private cdRef: ChangeDetectorRef, - private utils: Utils - ) {} - - ngOnInit(): void { - // First thing in initialization is registering and subscribing to the AngularPConnect service - this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - this.controlName$ = this.angularPConnect.getComponentID(this); - - // Then, continue on with other initialization + /** + * Updates the component when there are changes in the state. + */ + override updateSelf(): void { + // Resolve config properties + this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as DecimalProps; - // call updateSelf when initializing - // this.updateSelf(); - this.checkAndUpdate(); + // Update common properties + this.updateComponentCommonProperties(this.configProps$); - if (this.formGroup$) { - // add control to formGroup - this.formGroup$.addControl(this.controlName$, this.fieldControl); + // Extract and normalize the value property + const { value } = this.configProps$; + if (value) { + this.value$ = typeof value === 'string' ? parseFloat(value) : value; this.fieldControl.setValue(this.value$); - this.bHasForm$ = true; - } else { - this.bReadonly$ = true; - this.bHasForm$ = false; - } - } - - ngOnDestroy(): void { - if (this.formGroup$) { - this.formGroup$.removeControl(this.controlName$); } - if (this.angularPConnectData.unsubscribeFn) { - this.angularPConnectData.unsubscribeFn(); - } + // updates decimal properties + this.updateDecimalProperties(this.configProps$); } - // Callback passed when subscribing to store change - onStateChange() { - this.checkAndUpdate(); - } - - checkAndUpdate() { - // Should always check the bridge to see if the component should - // update itself (re-render) - const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); - - // ONLY call updateSelf when the component should update - if (bUpdateSelf) { - this.updateSelf(); - } - } - - // updateSelf - updateSelf(): void { - // starting very simple... - - // moved this from ngOnInit() and call this from there instead... - this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as DecimalProps; - this.testId = this.configProps$.testId; - this.label$ = this.configProps$.label; - this.displayMode$ = this.configProps$.displayMode; - this.inputMode = NgxCurrencyInputMode.Natural; - let nValue: any = this.configProps$.value; - if (nValue) { - if (typeof nValue === 'string') { - nValue = parseFloat(nValue); - } - this.value$ = nValue; - this.fieldControl.setValue(this.value$); - } - this.helperText = this.configProps$.helperText; - this.placeholder = this.configProps$.placeholder || ''; - const showGroupSeparators = this.configProps$.showGroupSeparators; - const currencyISOCode = this.configProps$?.currencyISOCode ?? ''; - + /** + * Updates decimal properties based on the provided configuration. + * + * @param {Object} configProps - Configuration properties. + * @param {string} configProps.currencyISOCode - ISO code of the currency. + * @param {string} configProps.formatter - Formatter type (e.g., 'decimal', 'currency'). + * @param {boolean} configProps.showGroupSeparators - Whether to show group separators. + */ + protected updateDecimalProperties(configProps): void { + const { currencyISOCode = '', formatter, showGroupSeparators } = configProps; + + // Extract currency symbols and options const theSymbols = getCurrencyCharacters(currencyISOCode); this.decimalSeparator = theSymbols.theDecimalIndicator; this.thousandSeparator = showGroupSeparators ? theSymbols.theDigitGroupSeparator : ''; const theCurrencyOptions = getCurrencyOptions(currencyISOCode); - this.formatter = this.configProps$.formatter; + const formatterLower = formatter?.toLowerCase() || 'decimal'; + this.formattedValue = format(this.value$, formatterLower, theCurrencyOptions); - if (this.formatter) { - this.formattedValue = format(this.value$, this.formatter.toLowerCase(), theCurrencyOptions); - } else { - this.formattedValue = format(this.value$, 'decimal', theCurrencyOptions); - } - - // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError - setTimeout(() => { - if (this.configProps$.required != null) { - this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required); - } - this.cdRef.detectChanges(); - }); - - if (this.configProps$.visibility != null) { - this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility); - } - - if (this.configProps$.readOnly != null) { - this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly); - } - - // disabled - if (this.configProps$.disabled != undefined) { - this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled); - } - - if (this.bDisabled$) { - this.fieldControl.disable(); - } else { - this.fieldControl.enable(); - } - - if (this.bReadonly$ && this.formatter === 'Currency') { + if (this.bReadonly$ && formatter === 'Currency') { this.currencySymbol = theSymbols.theCurrencySymbol; } - if (this.bReadonly$ && this.formatter === 'Percentage') { + if (this.bReadonly$ && formatter === 'Percentage') { this.suffix = '%'; } this.decimalPrecision = this.configProps$?.decimalPrecision ?? 2; - - this.componentReference = this.pConn$.getStateProps().value; - - // trigger display of error message with field control - if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') { - const timer = interval(100).subscribe(() => { - this.fieldControl.setErrors({ message: true }); - this.fieldControl.markAsTouched(); - - timer.unsubscribe(); - }); - } } fieldOnBlur(event: any) { @@ -230,21 +121,4 @@ export class DecimalComponent implements OnInit, OnDestroy { handleEvent(actionsApi, 'changeNblur', propName, value); } } - - getErrorMessage() { - let errMessage = ''; - - // look for validation messages for json, pre-defined or just an error pushed from workitem (400) - if (this.fieldControl.hasError('message')) { - errMessage = this.angularPConnectData.validateMessage ?? ''; - return errMessage; - } - if (this.fieldControl.hasError('required')) { - errMessage = 'You must enter a value'; - } else if (this.fieldControl.errors) { - errMessage = this.fieldControl.errors.toString(); - } - - return errMessage; - } } diff --git a/packages/angular-sdk-components/src/lib/_components/field/dropdown/dropdown.component.ts b/packages/angular-sdk-components/src/lib/_components/field/dropdown/dropdown.component.ts index e631b093..ff208304 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/dropdown/dropdown.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/dropdown/dropdown.component.ts @@ -1,14 +1,12 @@ -import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core'; +import { Component, OnInit, forwardRef, OnDestroy, Output, EventEmitter } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatOptionModule } from '@angular/material/core'; import { MatSelectModule } from '@angular/material/select'; import { MatFormFieldModule } from '@angular/material/form-field'; -import { interval } from 'rxjs'; import isEqual from 'fast-deep-equal'; -import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; -import { DatapageService } from '../../../_services/datapage.service'; -import { Utils } from '../../../_helpers/utils'; + +import { FieldBase } from '../field.base'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; import { handleEvent } from '../../../_helpers/event-util'; import { PConnFieldProps } from '../../../_types/PConnProps.interface'; @@ -68,70 +66,20 @@ interface DropdownProps extends PConnFieldProps { selector: 'app-dropdown', templateUrl: './dropdown.component.html', styleUrls: ['./dropdown.component.scss'], - standalone: true, imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatSelectModule, MatOptionModule, forwardRef(() => ComponentMapperComponent)] }) -export class DropdownComponent implements OnInit, OnDestroy { - @Input() pConn$: typeof PConnect; - @Input() formGroup$: FormGroup; +export class DropdownComponent extends FieldBase implements OnInit, OnDestroy { + @Output() onRecordChange: EventEmitter = new EventEmitter(); - // Used with AngularPConnect - angularPConnectData: AngularPConnectData = {}; configProps$: DropdownProps; - label$ = ''; - value$ = ''; - bRequired$ = false; - bReadonly$ = false; - bDisabled$ = false; - bVisible$ = true; - displayMode$?: string = ''; - controlName$: string; - bHasForm$ = true; options$: IOption[]; - componentReference = ''; - testId = ''; - helperText: string; - hideLabel: any; theDatasource: any[] | null; - fieldControl = new FormControl('', null); - fieldMetadata: any[]; localeContext = ''; localeClass = ''; localeName = ''; localePath = ''; localizedValue = ''; - actionsApi: Object; - propName: string; - - constructor( - private angularPConnect: AngularPConnectService, - private cdRef: ChangeDetectorRef, - private utils: Utils, - private dataPageService: DatapageService - ) {} - - ngOnInit(): void { - // First thing in initialization is registering and subscribing to the AngularPConnect service - this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - this.controlName$ = this.angularPConnect.getComponentID(this); - - // Then, continue on with other initialization - - // call updateSelf when initializing - this.checkAndUpdate(); - // this should get called afer checkAndUpdate - - if (this.formGroup$) { - // add control to formGroup - this.formGroup$.addControl(this.controlName$, this.fieldControl); - this.fieldControl.setValue(this.value$); - this.bHasForm$ = true; - } else { - this.bReadonly$ = true; - this.bHasForm$ = false; - } - } set options(options: IOption[]) { this.options$ = options; @@ -145,80 +93,34 @@ export class DropdownComponent implements OnInit, OnDestroy { } } - ngOnDestroy(): void { - if (this.formGroup$) { - this.formGroup$.removeControl(this.controlName$); - } - - if (this.angularPConnectData.unsubscribeFn) { - this.angularPConnectData.unsubscribeFn(); - } - } - - // Callback passed when subscribing to store change - onStateChange() { - this.checkAndUpdate(); - } + /** + * Updates the component when there are changes in the state. + */ + override updateSelf(): void { + // Resolve configuration properties + this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as DropdownProps; - checkAndUpdate() { - // Should always check the bridge to see if the component should - // update itself (re-render) - const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); + // Update component common properties + this.updateComponentCommonProperties(this.configProps$); - // ONLY call updateSelf when the component should update - if (bUpdateSelf) { - this.updateSelf(); - } + // Set component specific properties + this.updateDropdownProperties(this.configProps$); } - // updateSelf - updateSelf(): void { - // moved this from ngOnInit() and call this from there instead... - this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as DropdownProps; - if (this.configProps$.value != undefined) { - this.value$ = this.configProps$.value; - } + /** + * Updates dropdown properties based on the provided configuration. + * @param configProps - Configuration properties + */ + updateDropdownProperties(configProps) { + const { value, fieldMetadata, datasource } = configProps; - this.testId = this.configProps$.testId; - this.displayMode$ = this.configProps$.displayMode; - this.label$ = this.configProps$.label; - this.helperText = this.configProps$.helperText; - this.hideLabel = this.configProps$.hideLabel; - const datasource = this.configProps$.datasource; - // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError - setTimeout(() => { - if (this.configProps$.required != null) { - this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required); - } - this.cdRef.detectChanges(); - }); + this.value$ = value; if (!isEqual(datasource, this.theDatasource)) { // inbound datasource is different, so update theDatasource this.theDatasource = datasource || null; } - if (this.configProps$.visibility != null) { - this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility); - } - - // disabled - if (this.configProps$.disabled != undefined) { - this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled); - } - - if (this.bDisabled$) { - this.fieldControl.disable(); - } else { - this.fieldControl.enable(); - } - - if (this.configProps$.readOnly != null) { - this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly); - } - - this.componentReference = this.pConn$.getStateProps().value; - if (this.value$ === '' && !this.bReadonly$) { this.value$ = 'Select'; } @@ -235,8 +137,7 @@ export class DropdownComponent implements OnInit, OnDestroy { const className = this.pConn$.getCaseInfo().getClassName(); const refName = this.propName?.slice(this.propName.lastIndexOf('.') + 1); - this.fieldMetadata = this.configProps$.fieldMetadata; - const metaData = Array.isArray(this.fieldMetadata) ? this.fieldMetadata.filter(field => field?.classID === className)[0] : this.fieldMetadata; + const metaData = Array.isArray(fieldMetadata) ? fieldMetadata.filter(field => field?.classID === className)[0] : fieldMetadata; let displayName = metaData?.datasource?.propertyForDisplayText; displayName = displayName?.slice(displayName.lastIndexOf('.') + 1); @@ -252,16 +153,8 @@ export class DropdownComponent implements OnInit, OnDestroy { ); this.localizedValue = this.options$?.find(opt => opt.key === this.value$)?.value || this.localizedValue; - this.getDatapageData(); - // trigger display of error message with field control - if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') { - const timer = interval(100).subscribe(() => { - this.fieldControl.setErrors({ message: true }); - this.fieldControl.markAsTouched(); - timer.unsubscribe(); - }); - } + this.getDatapageData(); } getDatapageData() { @@ -337,12 +230,13 @@ export class DropdownComponent implements OnInit, OnDestroy { event.value = ''; } handleEvent(this.actionsApi, 'changeNblur', this.propName, event.value); - if (this.configProps$?.onRecordChange) { - this.configProps$.onRecordChange(event); - } + this.pConn$.clearErrorMessages({ property: this.propName }); + if (this.onRecordChange) { + this.onRecordChange.emit(event.value); + } } getLocalizedOptionValue(opt: IOption) { @@ -352,21 +246,4 @@ export class DropdownComponent implements OnInit, OnDestroy { this.pConn$.getLocaleRuleNameFromKeys(this.localeClass, this.localeContext, this.localeName) ); } - - getErrorMessage() { - let errMessage = ''; - - // look for validation messages for json, pre-defined or just an error pushed from workitem (400) - if (this.fieldControl.hasError('message')) { - errMessage = this.angularPConnectData.validateMessage ?? ''; - return errMessage; - } - if (this.fieldControl.hasError('required')) { - errMessage = 'You must enter a value'; - } else if (this.fieldControl.errors) { - errMessage = this.fieldControl.errors.toString(); - } - - return errMessage; - } } diff --git a/packages/angular-sdk-components/src/lib/_components/field/email/email.component.ts b/packages/angular-sdk-components/src/lib/_components/field/email/email.component.ts index c6e97e47..2fe5787b 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/email/email.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/email/email.component.ts @@ -1,14 +1,13 @@ -import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core'; +import { Component, OnInit, forwardRef, OnDestroy } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatInputModule } from '@angular/material/input'; import { MatFormFieldModule } from '@angular/material/form-field'; -import { interval } from 'rxjs'; -import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; -import { Utils } from '../../../_helpers/utils'; + +import { FieldBase } from '../field.base'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; -import { PConnFieldProps } from '../../../_types/PConnProps.interface'; import { handleEvent } from '../../../_helpers/event-util'; +import { PConnFieldProps } from '../../../_types/PConnProps.interface'; interface EmailProps extends PConnFieldProps { // If any, enter additional props that only exist on Email here @@ -18,144 +17,24 @@ interface EmailProps extends PConnFieldProps { selector: 'app-email', templateUrl: './email.component.html', styleUrls: ['./email.component.scss'], - standalone: true, imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, forwardRef(() => ComponentMapperComponent)] }) -export class EmailComponent implements OnInit, OnDestroy { - @Input() pConn$: typeof PConnect; - @Input() formGroup$: FormGroup; - - // Used with AngularPConnect - angularPConnectData: AngularPConnectData = {}; +export class EmailComponent extends FieldBase implements OnInit, OnDestroy { configProps$: EmailProps; - label$ = ''; - value$: string; - bRequired$ = false; - bReadonly$ = false; - bDisabled$ = false; - bVisible$ = true; - displayMode$?: string = ''; - controlName$: string; - bHasForm$ = true; - componentReference = ''; - testId: string; - helperText: string; - placeholder: string; - - fieldControl = new FormControl('', null); - actionsApi: Object; - propName: string; - - constructor( - private angularPConnect: AngularPConnectService, - private cdRef: ChangeDetectorRef, - private utils: Utils - ) {} - - ngOnInit(): void { - // First thing in initialization is registering and subscribing to the AngularPConnect service - this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - this.controlName$ = this.angularPConnect.getComponentID(this); - - // Then, continue on with other initialization - - // call updateSelf when initializing - // this.updateSelf(); - this.checkAndUpdate(); - - if (this.formGroup$) { - // add control to formGroup - this.formGroup$.addControl(this.controlName$, this.fieldControl); - this.fieldControl.setValue(this.value$); - this.bHasForm$ = true; - } else { - this.bReadonly$ = true; - this.bHasForm$ = false; - } - } - - ngOnDestroy(): void { - if (this.formGroup$) { - this.formGroup$.removeControl(this.controlName$); - } - - if (this.angularPConnectData.unsubscribeFn) { - this.angularPConnectData.unsubscribeFn(); - } - } - - // Callback passed when subscribing to store change - onStateChange() { - this.checkAndUpdate(); - } - - checkAndUpdate() { - // Should always check the bridge to see if the component should - // update itself (re-render) - const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); - - // ONLY call updateSelf when the component should update - if (bUpdateSelf) { - this.updateSelf(); - } - } - - // updateSelf - updateSelf(): void { - // moved this from ngOnInit() and call this from there instead... + /** + * Updates the component when there are changes in the state. + */ + override updateSelf(): void { + // Resolve configuration properties this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as EmailProps; - this.testId = this.configProps$.testId; - this.label$ = this.configProps$.label; - this.displayMode$ = this.configProps$.displayMode; - if (this.configProps$.value != undefined) { - this.value$ = this.configProps$.value; - } - this.helperText = this.configProps$.helperText; - this.placeholder = this.configProps$.placeholder || ''; - - // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError - setTimeout(() => { - if (this.configProps$.required != null) { - this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required); - } - this.cdRef.detectChanges(); - }); - - if (this.configProps$.visibility != null) { - this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility); - } - - // disabled - if (this.configProps$.disabled != undefined) { - this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled); - } - - if (this.bDisabled$) { - this.fieldControl.disable(); - } else { - this.fieldControl.enable(); - } - - if (this.configProps$.readOnly != null) { - this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly); - } - - this.actionsApi = this.pConn$.getActionsApi(); - this.propName = this.pConn$.getStateProps().value; - - this.componentReference = this.pConn$.getStateProps().value; + // Update component common properties + this.updateComponentCommonProperties(this.configProps$); - // trigger display of error message with field control - if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') { - const timer = interval(100).subscribe(() => { - this.fieldControl.setErrors({ message: true }); - this.fieldControl.markAsTouched(); - - timer.unsubscribe(); - }); - } + // Set component specific properties + const { value } = this.configProps$; + this.value$ = value; } fieldOnChange(event: any) { @@ -163,8 +42,6 @@ export class EmailComponent implements OnInit, OnDestroy { const isValueChanged = event.target.value.toString() !== oldVal.toString(); if (isValueChanged) { - const value = event?.target?.value; - handleEvent(this.actionsApi, 'changeNblur', this.propName, value); this.pConn$.clearErrorMessages({ property: this.propName }); @@ -180,21 +57,4 @@ export class EmailComponent implements OnInit, OnDestroy { handleEvent(this.actionsApi, 'changeNblur', this.propName, value); } } - - getErrorMessage() { - let errMessage = ''; - - // look for validation messages for json, pre-defined or just an error pushed from workitem (400) - if (this.fieldControl.hasError('message')) { - errMessage = this.angularPConnectData.validateMessage ?? ''; - return errMessage; - } - if (this.fieldControl.hasError('required')) { - errMessage = 'You must enter a value'; - } else if (this.fieldControl.errors) { - errMessage = this.fieldControl.errors.toString(); - } - - return errMessage; - } } diff --git a/packages/angular-sdk-components/src/lib/_components/field/field.base.ts b/packages/angular-sdk-components/src/lib/_components/field/field.base.ts new file mode 100644 index 00000000..50103609 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/field/field.base.ts @@ -0,0 +1,149 @@ +import { Directive, inject, Input, OnDestroy, OnInit } from '@angular/core'; +import { FormControl, FormGroup } from '@angular/forms'; + +import { AngularPConnectData, AngularPConnectService } from '../../_bridge/angular-pconnect'; +import { Utils } from '../../_helpers/utils'; + +@Directive() +export class FieldBase implements OnInit, OnDestroy { + @Input() pConn$: typeof PConnect; + @Input() formGroup$: FormGroup; + + protected angularPConnect = inject(AngularPConnectService); + protected utils = inject(Utils); + + protected angularPConnectData: AngularPConnectData = {}; + + fieldControl: FormControl = new FormControl('', null); + controlName$: string; + actionsApi: object; + propName: string; + + bHasForm$ = true; + testId: string; + helperText: string; + placeholder: string; + value$: any = ''; + label$ = ''; + hideLabel = false; + bRequired$ = false; + bReadonly$ = false; + bDisabled$ = false; + bVisible$ = true; + displayMode$ = ''; + + /** + * Initializes the component, registers with AngularPConnect, and sets up form control. + */ + ngOnInit(): void { + // First thing in initialization is registering and subscribing to the AngularPConnect service + this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange.bind(this)); + this.controlName$ = this.angularPConnect.getComponentID(this); + + // call checkAndUpdate + this.checkAndUpdate(); + + if (this.formGroup$) { + this.formGroup$.addControl(this.controlName$, this.fieldControl); + this.fieldControl.setValue(this.value$); + this.bHasForm$ = true; + } else { + this.bReadonly$ = true; + this.bHasForm$ = false; + } + + this.actionsApi = this.pConn$.getActionsApi(); + this.propName = this.pConn$.getStateProps().value; + } + + /** + * Cleans up the component by removing it from the form group and unsubscribing from any observables. + */ + ngOnDestroy(): void { + if (this.formGroup$) { + this.formGroup$.removeControl(this.controlName$); + } + + if (this.angularPConnectData.unsubscribeFn) { + this.angularPConnectData.unsubscribeFn(); + } + } + + // Callback passed when subscribing to store change + onStateChange() { + this.checkAndUpdate(); + } + + // Should always check the bridge to see if the component should update itself (re-render) + checkAndUpdate() { + const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); + + // ONLY call updateSelf when the component should update + if (bUpdateSelf) { + this.updateSelf(); + } + } + + // will be overriden by child components + updateSelf(): void {} + + /** + * Updates the component's common properties based on the provided configuration. + * + * @param configProps The configuration properties to update. + */ + protected updateComponentCommonProperties(configProps) { + // Extract properties from config + const { testId, label, hideLabel, displayMode = '', helperText, placeholder, required, visibility = true, disabled, readOnly } = configProps; + + // Update component properties + this.testId = testId; + this.label$ = label; + this.hideLabel = hideLabel; + this.displayMode$ = displayMode; + this.helperText = helperText; + this.placeholder = placeholder || ''; + + // Convert boolean properties + this.bVisible$ = this.utils.getBooleanValue(visibility); + this.bRequired$ = this.utils.getBooleanValue(required); + this.bDisabled$ = this.utils.getBooleanValue(disabled); + this.bReadonly$ = this.utils.getBooleanValue(readOnly); + + // Enable or disable field control + this.fieldControl[this.bDisabled$ ? 'disable' : 'enable'](); + + // Display error message if validation message exists + this.displayValidationMessage(); + } + + /** + * Displays the validation message if it exists. + */ + private displayValidationMessage(): void { + if (this.angularPConnectData.validateMessage) { + setTimeout(() => { + this.fieldControl.setErrors({ message: true }); + this.fieldControl.markAsTouched(); + }, 100); + } + } + + /** + * Retrieves the error message for the current field control. + * + * @returns The error message, or an empty string if no error is found. + */ + getErrorMessage() { + // look for validation messages for json, pre-defined or just an error pushed from workitem (400) + if (this.fieldControl.hasError('message')) { + return this.angularPConnectData.validateMessage ?? ''; + } + + if (this.fieldControl.hasError('required')) { + return 'You must enter a value'; + } + + return this.fieldControl.errors?.toString() ?? ''; + } +} diff --git a/packages/angular-sdk-components/src/lib/_components/field/group/group.component.ts b/packages/angular-sdk-components/src/lib/_components/field/group/group.component.ts index 851d88dd..4561d949 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/group/group.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/group/group.component.ts @@ -18,13 +18,16 @@ interface GroupProps extends PConnFieldProps { selector: 'app-group', templateUrl: './group.component.html', styleUrls: ['./group.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class GroupComponent implements OnInit { @Input() pConn$: typeof PConnect; @Input() formGroup$: FormGroup; + // Used with AngularPConnect + angularPConnectData: AngularPConnectData = {}; + configProps$: GroupProps; + arChildren$: any[]; visibility$?: boolean; showHeading$?: boolean; @@ -32,10 +35,6 @@ export class GroupComponent implements OnInit { instructions$: string; collapsible$: boolean; - // Used with AngularPConnect - angularPConnectData: AngularPConnectData = {}; - configProps$: GroupProps; - constructor(private angularPConnect: AngularPConnectService) {} ngOnInit(): void { @@ -60,6 +59,9 @@ export class GroupComponent implements OnInit { } } + /** + * Updates the component when there are changes in the state. + */ updateSelf(): void { this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as GroupProps; this.arChildren$ = ReferenceComponent.normalizePConnArray(this.pConn$.getChildren()); diff --git a/packages/angular-sdk-components/src/lib/_components/field/integer/integer.component.ts b/packages/angular-sdk-components/src/lib/_components/field/integer/integer.component.ts index a7e1852f..60b81cce 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/integer/integer.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/integer/integer.component.ts @@ -1,14 +1,13 @@ -import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core'; +import { Component, forwardRef } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { FormControl, ReactiveFormsModule } from '@angular/forms'; import { MatInputModule } from '@angular/material/input'; import { MatFormFieldModule } from '@angular/material/form-field'; -import { interval } from 'rxjs'; -import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; -import { Utils } from '../../../_helpers/utils'; + +import { FieldBase } from '../field.base'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; -import { PConnFieldProps } from '../../../_types/PConnProps.interface'; import { handleEvent } from '../../../_helpers/event-util'; +import { PConnFieldProps } from '../../../_types/PConnProps.interface'; interface IntegerProps extends PConnFieldProps { // If any, enter additional props that only exist on Integer here @@ -18,146 +17,26 @@ interface IntegerProps extends PConnFieldProps { selector: 'app-integer', templateUrl: './integer.component.html', styleUrls: ['./integer.component.scss'], - standalone: true, imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, forwardRef(() => ComponentMapperComponent)] }) -export class IntegerComponent implements OnInit, OnDestroy { - @Input() pConn$: typeof PConnect; - @Input() formGroup$: FormGroup; - - // Used with AngularPConnect - angularPConnectData: AngularPConnectData = {}; +export class IntegerComponent extends FieldBase { configProps$: IntegerProps; + override fieldControl = new FormControl(null, null); - label$ = ''; - value$: number; - bRequired$ = false; - bReadonly$ = false; - bDisabled$ = false; - bVisible$ = true; - displayMode$?: string = ''; - controlName$: string; - bHasForm$ = true; - componentReference = ''; - testId: string; - helperText: string; - placeholder: string; - - fieldControl = new FormControl(null, null); - actionsApi: Object; - propName: string; - - constructor( - private angularPConnect: AngularPConnectService, - private cdRef: ChangeDetectorRef, - private utils: Utils - ) {} - - ngOnInit(): void { - // First thing in initialization is registering and subscribing to the AngularPConnect service - this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - this.controlName$ = this.angularPConnect.getComponentID(this); - - // Then, continue on with other initialization - - // call updateSelf when initializing - // this.updateSelf(); - this.checkAndUpdate(); - - if (this.formGroup$) { - // add control to formGroup - this.formGroup$.addControl(this.controlName$, this.fieldControl); - this.fieldControl.setValue(this.value$); - this.bHasForm$ = true; - } else { - this.bReadonly$ = true; - this.bHasForm$ = false; - } - } - - ngOnDestroy(): void { - if (this.formGroup$) { - this.formGroup$.removeControl(this.controlName$); - } - - if (this.angularPConnectData.unsubscribeFn) { - this.angularPConnectData.unsubscribeFn(); - } - } - - // Callback passed when subscribing to store change - onStateChange() { - this.checkAndUpdate(); - } - - checkAndUpdate() { - // Should always check the bridge to see if the component should - // update itself (re-render) - const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); - - // ONLY call updateSelf when the component should update - if (bUpdateSelf) { - this.updateSelf(); - } - } - - // updateSelf - updateSelf(): void { - // moved this from ngOnInit() and call this from there instead... + /** + * Updates the component when there are changes in the state. + */ + override updateSelf(): void { + // Resolve configuration properties this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as IntegerProps; - this.testId = this.configProps$.testId; - this.label$ = this.configProps$.label; - this.displayMode$ = this.configProps$.displayMode; - let nValue: any = this.configProps$.value; - if (nValue) { - if (typeof nValue === 'string') { - nValue = parseInt(nValue, 10); - } - this.value$ = nValue; - } - this.helperText = this.configProps$.helperText; - this.placeholder = this.configProps$.placeholder || ''; - - this.actionsApi = this.pConn$.getActionsApi(); - this.propName = this.pConn$.getStateProps().value; - - // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError - setTimeout(() => { - if (this.configProps$.required != null) { - this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required); - } - this.cdRef.detectChanges(); - }); - - if (this.configProps$.visibility != null) { - this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility); - } - - // disabled - if (this.configProps$.disabled != undefined) { - this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled); - } - - if (this.bDisabled$) { - this.fieldControl.disable(); - } else { - this.fieldControl.enable(); - } - if (this.configProps$.readOnly != null) { - this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly); - } - - this.componentReference = this.pConn$.getStateProps().value; - - // trigger display of error message with field control - if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') { - const timer = interval(100).subscribe(() => { - this.fieldControl.setErrors({ message: true }); - this.fieldControl.markAsTouched(); + // Update component common properties + this.updateComponentCommonProperties(this.configProps$); - timer.unsubscribe(); - }); + // Extract and normalize the value property + const { value } = this.configProps$; + if (value) { + this.value$ = typeof value === 'string' ? parseInt(value, 10) : value; } } @@ -181,23 +60,4 @@ export class IntegerComponent implements OnInit, OnDestroy { handleEvent(this.actionsApi, 'changeNblur', this.propName, value); } } - - getErrorMessage() { - // field control gets error message from here - - let errMessage = ''; - - // look for validation messages for json, pre-defined or just an error pushed from workitem (400) - if (this.fieldControl.hasError('message')) { - errMessage = this.angularPConnectData.validateMessage ?? ''; - return errMessage; - } - if (this.fieldControl.hasError('required')) { - errMessage = 'You must enter a value'; - } else if (this.fieldControl.errors) { - errMessage = this.fieldControl.errors.toString(); - } - - return errMessage; - } } diff --git a/packages/angular-sdk-components/src/lib/_components/field/list-view-action-buttons/list-view-action-buttons.component.ts b/packages/angular-sdk-components/src/lib/_components/field/list-view-action-buttons/list-view-action-buttons.component.ts index bb930c42..58d76f64 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/list-view-action-buttons/list-view-action-buttons.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/list-view-action-buttons/list-view-action-buttons.component.ts @@ -7,7 +7,6 @@ import { MatGridListModule } from '@angular/material/grid-list'; selector: 'app-list-view-action-buttons', templateUrl: './list-view-action-buttons.component.html', styleUrls: ['./list-view-action-buttons.component.scss'], - standalone: true, imports: [CommonModule, MatGridListModule, MatButtonModule] }) export class ListViewActionButtonsComponent { diff --git a/packages/angular-sdk-components/src/lib/_components/field/location/config-ext.json b/packages/angular-sdk-components/src/lib/_components/field/location/config-ext.json new file mode 100644 index 00000000..a12a9efc --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/field/location/config-ext.json @@ -0,0 +1,8 @@ +{ + "name": "Location", + "label": "Location", + "description": "Location", + "type": "Field", + "subtype": "Location", + "properties": [] +} diff --git a/packages/angular-sdk-components/src/lib/_components/field/location/location.component.html b/packages/angular-sdk-components/src/lib/_components/field/location/location.component.html new file mode 100644 index 00000000..112d9f76 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/field/location/location.component.html @@ -0,0 +1,46 @@ +
+ + + {{ label$ }} + + {{ getErrorMessage() }} + + + + + {{ option }} + + + + +
+ + + +
+
+
diff --git a/packages/angular-sdk-components/src/lib/_components/field/location/location.component.scss b/packages/angular-sdk-components/src/lib/_components/field/location/location.component.scss new file mode 100644 index 00000000..aaecc8e8 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/field/location/location.component.scss @@ -0,0 +1,18 @@ +.psdk-full-width { + width: 100%; +} + +.map-wrapper { + position: relative; +} + +.map-blocker { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: transparent; + z-index: 10; + cursor: not-allowed; +} diff --git a/packages/angular-sdk-components/src/lib/_components/field/location/location.component.spec.ts b/packages/angular-sdk-components/src/lib/_components/field/location/location.component.spec.ts new file mode 100644 index 00000000..f92c95fb --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/field/location/location.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LocationComponent } from './location.component'; + +describe('LocationComponent', () => { + let component: LocationComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [LocationComponent] + }).compileComponents(); + + fixture = TestBed.createComponent(LocationComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/angular-sdk-components/src/lib/_components/field/location/location.component.ts b/packages/angular-sdk-components/src/lib/_components/field/location/location.component.ts new file mode 100644 index 00000000..9fa47f6f --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/field/location/location.component.ts @@ -0,0 +1,280 @@ +import { Component, inject } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInputModule } from '@angular/material/input'; +import { MatAutocompleteModule } from '@angular/material/autocomplete'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; +import { MatIconModule } from '@angular/material/icon'; +import { MatButtonModule } from '@angular/material/button'; +import { GoogleMapsModule } from '@angular/google-maps'; +import { debounceTime, from, of, switchMap } from 'rxjs'; + +import { FieldBase } from '../field.base'; +import { GoogleMapsLoaderService } from '../../../_services/google-maps-loader.service'; +import { handleEvent } from '../../../_helpers/event-util'; + +import { PConnFieldProps } from '../../../_types/PConnProps.interface'; + +interface LocationProps extends PConnFieldProps { + coordinates: string; + showMap: boolean; + onlyCoordinates: boolean; + showMapReadOnly: boolean; +} + +@Component({ + selector: 'app-location', + imports: [ + CommonModule, + GoogleMapsModule, + MatAutocompleteModule, + MatButtonModule, + MatFormFieldModule, + MatIconModule, + MatInputModule, + MatProgressSpinnerModule, + ReactiveFormsModule + ], + templateUrl: './location.component.html', + styleUrl: './location.component.scss' +}) +export class LocationComponent extends FieldBase { + private loader = inject(GoogleMapsLoaderService); + + private autocompleteService!: google.maps.places.AutocompleteService; + private geocoder!: google.maps.Geocoder; + + // Dom variables + mapReady = false; + isLocating = false; + showMap = true; + filteredOptions: string[] = []; + center: google.maps.LatLngLiteral; + markerPosition: google.maps.LatLngLiteral | null = null; + + configProps$: LocationProps; + onlyCoordinates: boolean; + coordinates: string; + showMapReadOnly$: boolean; + valueProp: string; + coordinatesProp: string; + + override async ngOnInit() { + super.ngOnInit(); + + // Loading map + const apiKey = this.pConn$.getGoogleMapsAPIKey(); + await this.loader.load(apiKey); + this.mapReady = true; + this.initializeGoogleServices(); + this.getPlacePredictions(); + } + + /** + * Updates the component when there are changes in the state. + */ + override updateSelf(): void { + // Resolve configuration properties + this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as LocationProps; + + // Update component common properties + this.updateComponentCommonProperties(this.configProps$); + + this.onlyCoordinates = !!this.configProps$.onlyCoordinates; + this.showMapReadOnly$ = !!this.configProps$.showMapReadOnly; + this.showMap = this.bReadonly$ ? this.showMapReadOnly$ : !!this.configProps$.showMap; + + if (this.configProps$.coordinates) { + const latAndLong: number[] = this.configProps$.coordinates.split(',').map(Number); + const latitude = Number(latAndLong[0]); + const longitude = Number(latAndLong[1]); + this.updateMap(latitude, longitude, this.configProps$.value); + } + + this.valueProp = this.pConn$.getStateProps().value; + this.coordinatesProp = this.pConn$.getStateProps().coordinates; + } + + onOptionSelected(event: any) { + const value = event.option.value; + if (this.isCoordinateString(value)) { + const [lat, lng] = value.split(',').map(Number); + this.updateMap(lat, lng, value); + this.updateProps(); + } else { + this.geocoder.geocode({ address: value }, (res, status) => { + if (status === google.maps.GeocoderStatus.OK && res && res[0]) { + const loc = res[0].geometry.location; + this.updateMap(loc.lat(), loc.lng(), value); + this.updateProps(); + } + }); + } + } + + fieldOnBlur() { + this.updateProps(); + } + + locateMe() { + if (!navigator.geolocation) { + alert('Geolocation not supported by this browser.'); + return; + } + + this.isLocating = true; + this.tryGetLocation(0); + } + + onMapClick(event: google.maps.MapMouseEvent) { + if (!event.latLng) return; + + const lat = event.latLng.lat(); + const lng = event.latLng.lng(); + + if (this.onlyCoordinates) { + this.updateMap(lat, lng); + this.updateProps(); + } else { + this.geocoder.geocode({ location: { lat, lng } }, (res, status) => { + if (status === google.maps.GeocoderStatus.OK && res && res[0]) { + this.updateMap(lat, lng, res[0].formatted_address); + } else { + this.updateMap(lat, lng); + } + this.updateProps(); + }); + } + } + + private tryGetLocation(retryCount: number) { + navigator.geolocation.getCurrentPosition( + position => { + const lat = position.coords.latitude; + const lng = position.coords.longitude; + if (this.onlyCoordinates) { + this.updateMap(lat, lng); + this.updateProps(); + this.isLocating = false; + } else { + this.geocoder.geocode({ location: { lat, lng } }, (res, status) => { + this.isLocating = false; + if (status === google.maps.GeocoderStatus.OK && res && res[0]) { + this.updateMap(lat, lng, res[0].formatted_address); + } else { + this.updateMap(lat, lng); + } + this.updateProps(); + }); + } + }, + err => { + console.error('Geolocation error', err); + + if (err.code === err.POSITION_UNAVAILABLE && retryCount < 2) { + console.warn('Retrying location fetch...'); + setTimeout(() => this.tryGetLocation(retryCount + 1), 2000); + } else { + this.isLocating = false; + + switch (err.code) { + case err.PERMISSION_DENIED: + alert('Location permission denied. Please allow access in your browser settings.'); + break; + case err.POSITION_UNAVAILABLE: + alert('Location unavailable. Please check your internet or GPS.'); + break; + case err.TIMEOUT: + alert('Timed out while trying to get your location. Try again.'); + break; + default: + alert('Could not get your location. Please try again.'); + } + } + }, + { + enableHighAccuracy: true, + timeout: 10000, + maximumAge: 0 + } + ); + } + + private initializeGoogleServices() { + this.autocompleteService = new google.maps.places.AutocompleteService(); + this.geocoder = new google.maps.Geocoder(); + } + + private getPlacePredictions() { + this.fieldControl.valueChanges + .pipe( + debounceTime(300), + switchMap(value => this.getSuggestions(value || '')) + ) + .subscribe(predictions => { + this.filteredOptions = predictions; + }); + } + + private isCoordinateString(value: string): boolean { + const regex = /^-?\d+(\.\d+)?\s*,\s*-?\d+(\.\d+)?$/; + return regex.test(value.trim()); + } + + private getSuggestions(input: string) { + if (!input.trim()) return of([]); + + if (this.isCoordinateString(input)) { + return of([input]); + } + + return from( + new Promise(resolve => { + this.autocompleteService.getPlacePredictions({ input }, (preds, status) => { + if (status === google.maps.places.PlacesServiceStatus.OK && preds) { + if (this.onlyCoordinates) { + // only first exact match as coordinates + this.geocoder.geocode({ placeId: preds[0].place_id }, (response, geocoderStatus) => { + if (geocoderStatus === google.maps.GeocoderStatus.OK && response && response[0]) { + const loc = response[0].geometry.location; + resolve([`${loc.lat()}, ${loc.lng()}`]); + } else { + resolve([]); + } + }); + } else { + resolve(preds.map(p => p.description)); + } + } else { + resolve([]); + } + }); + }) + ); + } + + private updateMap(lat: number, lng: number, value?: string) { + this.center = { lat, lng }; + this.markerPosition = { lat, lng }; + this.setCoordinates(lat, lng); + if (this.onlyCoordinates) { + this.setLocationValue(this.coordinates); + } else { + this.setLocationValue(value || ''); + } + } + + private updateProps() { + handleEvent(this.actionsApi, 'change', this.valueProp, this.fieldControl.value); + handleEvent(this.actionsApi, 'change', this.coordinatesProp, this.coordinates); + } + + private setCoordinates(latitude: number, longitude: number) { + this.coordinates = `${latitude}, ${longitude}`; + } + + private setLocationValue(value: string) { + this.fieldControl.setValue(value, { emitEvent: false }); + } +} diff --git a/packages/angular-sdk-components/src/lib/_components/field/multiselect/multiselect.component.ts b/packages/angular-sdk-components/src/lib/_components/field/multiselect/multiselect.component.ts index 9c58f998..9ad8a22d 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/multiselect/multiselect.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/multiselect/multiselect.component.ts @@ -1,6 +1,6 @@ import { CommonModule } from '@angular/common'; -import { Component, forwardRef, Input, OnDestroy, OnInit } from '@angular/core'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { Component } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatAutocompleteModule } from '@angular/material/autocomplete'; import { MatChipsModule } from '@angular/material/chips'; import { MatCheckboxModule } from '@angular/material/checkbox'; @@ -8,9 +8,8 @@ import { MatOptionModule } from '@angular/material/core'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; import { MatIconModule } from '@angular/material/icon'; -import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; -import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; -import { Utils } from '../../../_helpers/utils'; + +import { FieldBase } from '../field.base'; import { doSearch, getDisplayFieldsMetaData, getGroupDataForItemsTree, preProcessColumns } from './utils'; import { deleteInstruction, insertInstruction } from '../../../_helpers/instructions-utils'; import { handleEvent } from '../../../_helpers/event-util'; @@ -19,7 +18,6 @@ import { handleEvent } from '../../../_helpers/event-util'; selector: 'app-multiselect', templateUrl: './multiselect.component.html', styleUrls: ['./multiselect.component.scss'], - standalone: true, imports: [ CommonModule, ReactiveFormsModule, @@ -29,43 +27,19 @@ import { handleEvent } from '../../../_helpers/event-util'; MatOptionModule, MatCheckboxModule, MatIconModule, - MatChipsModule, - forwardRef(() => ComponentMapperComponent) + MatChipsModule ] }) -export class MultiselectComponent implements OnInit, OnDestroy { - @Input() pConn$: typeof PConnect; - @Input() formGroup$: FormGroup; - - // Used with AngularPConnect - angularPConnectData: AngularPConnectData = {}; +export class MultiselectComponent extends FieldBase { + configProps$: any; - label$ = ''; - value$ = ''; - bRequired$ = false; - bDisabled$ = false; - bVisible$ = true; - controlName$: string; - bHasForm$ = true; listType: string; - placeholder: string; - fieldControl = new FormControl('', null); parameters: {}; - hideLabel: boolean; - configProps$: any; referenceList: any; selectionKey: string; primaryField: string; - initialCaseClass: any; showSecondaryInSearchOnly = false; - isGroupData = false; - referenceType; - secondaryFields; - groupDataSource = []; - matchPosition = 'contains'; - maxResultsDisplay; - groupColumnsConfig = [{}]; selectionList; listActions: any; selectedItems: any[] = []; @@ -74,64 +48,32 @@ export class MultiselectComponent implements OnInit, OnDestroy { dataApiObj: any; itemsTree: any[] = []; trigger: any; - actionsApi: Object; - propName: string; - - constructor( - private angularPConnect: AngularPConnectService, - private utils: Utils - ) {} - - ngOnInit(): void { - // First thing in initialization is registering and subscribing to the AngularPConnect service - this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - this.controlName$ = this.angularPConnect.getComponentID(this); - - // Then, continue on with other initialization - this.checkAndUpdate(); - - if (this.formGroup$) { - // add control to formGroup - this.formGroup$.addControl(this.controlName$, this.fieldControl); - this.fieldControl.setValue(this.value$); - this.bHasForm$ = true; - } else { - this.bHasForm$ = false; - } - } - - ngOnDestroy(): void { - if (this.formGroup$) { - this.formGroup$.removeControl(this.controlName$); - } - - if (this.angularPConnectData.unsubscribeFn) { - this.angularPConnectData.unsubscribeFn(); - } - } - // Callback passed when subscribing to store change - onStateChange() { - this.checkAndUpdate(); - } + /** + * Updates the component when there are changes in the state. + */ + override updateSelf() { + // Resolve configuration properties + this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()); - checkAndUpdate() { - // Should always check the bridge to see if the component should - // update itself (re-render) - const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); + // Update component common properties + this.updateComponentCommonProperties(this.configProps$); - // ONLY call updateSelf when the component should update - if (bUpdateSelf) { - this.updateSelf(); - } - } - - // updateSelf - updateSelf() { - this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()); + this.setPropertyValuesFromProps(); + const { + groupDataSource = [], + parameters = {}, + listType = '', + showSecondaryInSearchOnly = false, + isGroupData = false, + referenceType, + secondaryFields, + matchPosition = 'contains', + maxResultsDisplay, + groupColumnsConfig = [{}] + } = this.configProps$; let { datasource = [], columns = [{}] } = this.configProps$; - this.setPropertyValuesFromProps(); if (this.referenceList.length > 0) { datasource = this.referenceList; @@ -149,8 +91,8 @@ export class MultiselectComponent implements OnInit, OnDestroy { } ]; let secondaryColumns: any = []; - if (this.secondaryFields) { - secondaryColumns = this.secondaryFields.map(secondaryField => ({ + if (secondaryFields) { + secondaryColumns = secondaryFields.map(secondaryField => ({ value: secondaryField, display: 'true', secondary: 'true', @@ -166,7 +108,7 @@ export class MultiselectComponent implements OnInit, OnDestroy { } ]; } - if (this.referenceType === 'Case') { + if (referenceType === 'Case') { columns = [...columns, ...secondaryColumns]; } } @@ -176,54 +118,36 @@ export class MultiselectComponent implements OnInit, OnDestroy { const dataConfig = { dataSource: datasource, - groupDataSource: this.groupDataSource, - isGroupData: this.isGroupData, - showSecondaryInSearchOnly: this.showSecondaryInSearchOnly, - parameters: this.parameters, - matchPosition: this.matchPosition, - listType: this.listType, - maxResultsDisplay: this.maxResultsDisplay || '100', + groupDataSource, + isGroupData, + showSecondaryInSearchOnly, + parameters, + matchPosition, + listType, + maxResultsDisplay: maxResultsDisplay || '100', columns: preProcessColumns(columns), - groupColumnsConfig: preProcessColumns(this.groupColumnsConfig), + groupColumnsConfig: preProcessColumns(groupColumnsConfig), associationFilter: undefined, ignoreCase: undefined }; const groupsDisplayFieldMeta = this.listType !== 'associated' ? getDisplayFieldsMetaData(dataConfig.groupColumnsConfig) : null; - this.itemsTreeBaseData = getGroupDataForItemsTree(this.groupDataSource, groupsDisplayFieldMeta, this.showSecondaryInSearchOnly) || []; + this.itemsTreeBaseData = getGroupDataForItemsTree(groupDataSource, groupsDisplayFieldMeta, this.showSecondaryInSearchOnly) || []; - this.itemsTree = this.isGroupData ? getGroupDataForItemsTree(this.groupDataSource, groupsDisplayFieldMeta, this.showSecondaryInSearchOnly) : []; + this.itemsTree = isGroupData ? getGroupDataForItemsTree(groupDataSource, groupsDisplayFieldMeta, this.showSecondaryInSearchOnly) : []; this.displayFieldMeta = this.listType !== 'associated' ? getDisplayFieldsMetaData(dataConfig.columns) : null; this.listActions = this.pConn$.getListActions(); this.pConn$.setReferenceList(this.selectionList); - if (this.configProps$.visibility != null) { - this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility); - } - - // disabled - if (this.configProps$.disabled != undefined) { - this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled); - } - - if (this.bDisabled$) { - this.fieldControl.disable(); - } else { - this.fieldControl.enable(); - } - - this.actionsApi = this.pConn$.getActionsApi(); - this.propName = this.pConn$.getStateProps().value; - if (this.listType !== 'associated') { PCore.getDataApi() ?.init(dataConfig, contextName) .then(async dataObj => { this.dataApiObj = dataObj; - if (!this.isGroupData) { + if (!isGroupData) { this.getCaseListBasedOnParams(this.value$ ?? '', '', [...this.selectedItems], [...this.itemsTree]); } }); @@ -231,23 +155,9 @@ export class MultiselectComponent implements OnInit, OnDestroy { } setPropertyValuesFromProps() { - this.label$ = this.configProps$.label; - this.placeholder = this.configProps$.placeholder || ''; - this.listType = this.configProps$.listType ? this.configProps$.listType : ''; - this.hideLabel = this.configProps$.hideLabel; - this.parameters = this.configProps$?.parameters ? this.configProps$?.parameters : {}; this.referenceList = this.configProps$?.referenceList; this.selectionKey = this.configProps$?.selectionKey; this.primaryField = this.configProps$?.primaryField; - this.initialCaseClass = this.configProps$?.initialCaseClass; - this.showSecondaryInSearchOnly = this.configProps$?.showSecondaryInSearchOnly ? this.configProps$?.showSecondaryInSearchOnly : false; - this.isGroupData = this.configProps$?.isGroupData ? this.configProps$.isGroupData : false; - this.referenceType = this.configProps$?.referenceType; - this.secondaryFields = this.configProps$?.secondaryFields; - this.groupDataSource = this.configProps$?.groupDataSource ? this.configProps$?.groupDataSource : []; - this.matchPosition = this.configProps$?.matchPosition ? this.configProps$?.matchPosition : 'contains'; - this.maxResultsDisplay = this.configProps$?.maxResultsDisplay; - this.groupColumnsConfig = this.configProps$?.groupColumnsConfig ? this.configProps$?.groupColumnsConfig : [{}]; this.selectionList = this.configProps$?.selectionList; this.value$ = this.configProps$?.value; } @@ -269,15 +179,17 @@ export class MultiselectComponent implements OnInit, OnDestroy { const initalItemsTree = isTriggeredFromSearch || !currentItemsTree ? [...this.itemsTreeBaseData] : [...currentItemsTree]; + const { initialCaseClass, isGroupData, showSecondaryInSearchOnly } = this.configProps$; + doSearch( searchText, group, - this.initialCaseClass, + initialCaseClass, this.displayFieldMeta, this.dataApiObj, initalItemsTree, - this.isGroupData, - this.showSecondaryInSearchOnly, + isGroupData, + showSecondaryInSearchOnly, selectedRows || [] ).then(res => { this.itemsTree = res || []; @@ -349,21 +261,4 @@ export class MultiselectComponent implements OnInit, OnDestroy { deleteInstruction(this.pConn$, this.selectionList, this.selectionKey, data); } } - - getErrorMessage() { - let errMessage = ''; - - // look for validation messages for json, pre-defined or just an error pushed from workitem (400) - if (this.fieldControl.hasError('message')) { - errMessage = this.angularPConnectData.validateMessage ?? ''; - return errMessage; - } - if (this.fieldControl.hasError('required')) { - errMessage = 'You must enter a value'; - } else if (this.fieldControl.errors) { - errMessage = this.fieldControl.errors.toString(); - } - - return errMessage; - } } diff --git a/packages/angular-sdk-components/src/lib/_components/field/multiselect/utils.ts b/packages/angular-sdk-components/src/lib/_components/field/multiselect/utils.ts index 704e7ffc..5915fc48 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/multiselect/utils.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/multiselect/utils.ts @@ -85,6 +85,31 @@ function prepareSearchResults(listObjData, displayFieldMeta) { return searchResults; } +function handleGroupedDataSearch(dataApiObj, searchText, clickedGroup, initialCaseClass, itemsTree) { + const localDataApiObj = cloneDeep(dataApiObj); + localDataApiObj.fetchedNQData = false; + localDataApiObj.cache = {}; + + if (!searchText && !clickedGroup) { + return { shouldReturn: true, value: itemsTree }; + } + + localDataApiObj.parameters[Object.keys(localDataApiObj.parameters)[1]] = searchText; + localDataApiObj.parameters[Object.keys(localDataApiObj.parameters)[0]] = initialCaseClass; + + if (clickedGroup) { + if (!searchText) { + const containsData = itemsTree.find(item => item.id === clickedGroup); + if (containsData?.items?.length) { + return { shouldReturn: true, value: itemsTree }; + } + } + localDataApiObj.parameters[Object.keys(localDataApiObj.parameters)[0]] = JSON.stringify([clickedGroup]); + } + + return { shouldReturn: false, value: localDataApiObj }; +} + async function doSearch( searchText, clickedGroup, @@ -96,61 +121,44 @@ async function doSearch( showSecondaryInSearchOnly, selected ) { - let searchTextForUngroupedData = ''; - if (dataApiObj) { - // creating dataApiObject in grouped data cases - if (isGroupData) { - dataApiObj = cloneDeep(dataApiObj); - dataApiObj.fetchedNQData = false; - dataApiObj.cache = {}; - - // if we have no search text and no group selected, return the original tree - if (searchText === '' && clickedGroup === '') { - return itemsTree; - } + if (!dataApiObj) { + return itemsTree; + } - // setting the inital search text & search classes in ApiObject - dataApiObj.parameters[Object.keys(dataApiObj.parameters)[1]] = searchText; - dataApiObj.parameters[Object.keys(dataApiObj.parameters)[0]] = initialCaseClass; - - // if we have a selected group - if (clickedGroup) { - // check if the data for this group is already present and no search text - if (searchText === '') { - const containsData = itemsTree.find(item => item.id === clickedGroup); - // do not make API call when items of respective group are already fetched - if (containsData?.items?.length) return itemsTree; - } + let searchTextForApi = ''; + let localDataApiObj = dataApiObj; - dataApiObj.parameters[Object.keys(dataApiObj.parameters)[0]] = JSON.stringify([clickedGroup]); - } - } else { - searchTextForUngroupedData = searchText; + if (isGroupData) { + const groupResult = handleGroupedDataSearch(dataApiObj, searchText, clickedGroup, initialCaseClass, itemsTree); + if (groupResult.shouldReturn) { + return groupResult.value; } + localDataApiObj = groupResult.value; + } else { + searchTextForApi = searchText; + } - // search API call - const response = await dataApiObj.fetchData(searchTextForUngroupedData).catch(() => { - return itemsTree; - }); + const response = await localDataApiObj.fetchData(searchTextForApi).catch(() => ({ data: undefined })); - let listObjData = response.data; - let newItemsTree = []; - if (isGroupData) { - if (searchText) { - listObjData = prepareSearchResults(listObjData, displayFieldMeta); - } else { - newItemsTree = putItemsDataInItemsTree(listObjData, displayFieldMeta, itemsTree, showSecondaryInSearchOnly, selected); - return newItemsTree; - } - } - const showSecondaryData = showSecondaryInSearchOnly ? !!searchText : true; - if (listObjData !== undefined && listObjData.length > 0) { - newItemsTree = listObjData.map(entry => createSingleTreeObejct(entry, displayFieldMeta, showSecondaryData, selected)); + let listObjData = response.data; + if (!listObjData) { + return itemsTree; + } + + if (isGroupData) { + if (searchText) { + listObjData = prepareSearchResults(listObjData, displayFieldMeta); + } else { + return putItemsDataInItemsTree(listObjData, displayFieldMeta, itemsTree, showSecondaryInSearchOnly, selected); } - return newItemsTree; } - return itemsTree; + if (listObjData.length === 0) { + return []; + } + + const showSecondaryData = showSecondaryInSearchOnly ? !!searchText : true; + return listObjData.map(entry => createSingleTreeObejct(entry, displayFieldMeta, showSecondaryData, selected)); } function setValuesToPropertyList(searchText, assocProp, items, columns, actions, updatePropertyInRedux = true) { diff --git a/packages/angular-sdk-components/src/lib/_components/field/object-reference/object-reference.component.html b/packages/angular-sdk-components/src/lib/_components/field/object-reference/object-reference.component.html new file mode 100644 index 00000000..17cf877d --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/field/object-reference/object-reference.component.html @@ -0,0 +1,17 @@ +
+ +
+ +
+ +
+
+ + + diff --git a/packages/angular-sdk-components/src/lib/_components/field/object-reference/object-reference.component.scss b/packages/angular-sdk-components/src/lib/_components/field/object-reference/object-reference.component.scss new file mode 100644 index 00000000..e69de29b diff --git a/packages/angular-sdk-components/src/lib/_components/field/object-reference/object-reference.component.spec.ts b/packages/angular-sdk-components/src/lib/_components/field/object-reference/object-reference.component.spec.ts new file mode 100644 index 00000000..c1a049ab --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/field/object-reference/object-reference.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ObjectReferenceComponent } from './object-reference.component'; + +describe('ObjectReferenceComponent', () => { + let component: ObjectReferenceComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ObjectReferenceComponent] + }).compileComponents(); + + fixture = TestBed.createComponent(ObjectReferenceComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/angular-sdk-components/src/lib/_components/field/object-reference/object-reference.component.ts b/packages/angular-sdk-components/src/lib/_components/field/object-reference/object-reference.component.ts new file mode 100644 index 00000000..d3d594be --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/field/object-reference/object-reference.component.ts @@ -0,0 +1,237 @@ +import { CommonModule } from '@angular/common'; +import { Component, Input, OnInit, forwardRef, OnDestroy } from '@angular/core'; +import { FormGroup } from '@angular/forms'; +import { ComponentMetadataConfig } from '@pega/pcore-pconnect-typedefs/interpreter/types'; +import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; +import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; +import { generateColumns, getDataRelationshipContextFromKey } from '../../../_helpers/objectReference-utils'; +import { PConnFieldProps } from '../../../_types/PConnProps.interface'; + +interface ObjectReferenceProps extends PConnFieldProps { + showPromotedFilters: boolean; + inline: boolean; + parameters: object; + mode: string; + targetObjectType: any; + allowAndPersistChangesInReviewMode: boolean; +} + +@Component({ + selector: 'app-object-reference', + imports: [CommonModule, forwardRef(() => ComponentMapperComponent)], + templateUrl: './object-reference.component.html', + styleUrl: './object-reference.component.scss' +}) +export class ObjectReferenceComponent implements OnInit, OnDestroy { + @Input() pConn$: typeof PConnect; + @Input() formGroup$: FormGroup; + + angularPConnectData: AngularPConnectData = {}; + configProps: ObjectReferenceProps; + value: { [key: string]: any }; + readOnly: boolean; + isForm: boolean; + type: string; + isDisplayModeEnabled: boolean; + canBeChangedInReviewMode: boolean; + newComponentName: string; + newPconn: typeof PConnect; + rawViewMetadata: ComponentMetadataConfig | undefined; + + constructor(private angularPConnect: AngularPConnectService) {} + + ngOnInit() { + this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); + this.checkAndUpdate(); + } + + onStateChange() { + this.checkAndUpdate(); + } + + ngOnDestroy() { + if (this.angularPConnectData.unsubscribeFn) { + this.angularPConnectData.unsubscribeFn(); + } + } + + checkAndUpdate() { + const shouldUpdate = this.angularPConnect.shouldComponentUpdate(this); + if (shouldUpdate) { + this.updateSelf(); + } + } + + updateSelf() { + this.configProps = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as ObjectReferenceProps; + const { + displayMode, + allowAndPersistChangesInReviewMode: editableInReview = false, + targetObjectType, + mode, + parameters, + hideLabel, + inline, + showPromotedFilters + } = this.configProps; + + const referenceType: string = targetObjectType === 'case' ? 'Case' : 'Data'; + this.rawViewMetadata = this.pConn$.getRawMetadata(); + const refFieldMetadata = this.pConn$.getFieldMetadata(this.rawViewMetadata?.config?.value?.split('.', 2)[1] ?? ''); + const propsToUse = { ...this.pConn$.getInheritedProps(), ...this.configProps }; + + this.isDisplayModeEnabled = displayMode === 'DISPLAY_ONLY'; + this.type = this.getComponentType(); + this.canBeChangedInReviewMode = editableInReview && ['Autocomplete', 'Dropdown'].includes(this.type); + + if (this.type === 'SemanticLink' && !this.canBeChangedInReviewMode) { + const config: any = { + ...this.rawViewMetadata?.config, + primaryField: (this.rawViewMetadata?.config as any).displayField, + caseClass: (this.rawViewMetadata?.config as any).targetObjectClass, + text: (this.rawViewMetadata?.config as any).displayField, + caseID: (this.rawViewMetadata?.config as any).value, + contextPage: `@P .${(this.rawViewMetadata?.config as any).displayField ? getDataRelationshipContextFromKey((this.rawViewMetadata?.config as any).displayField) : null}`, + resourceParams: { workID: (this.rawViewMetadata?.config as any).value }, + resourcePayload: { caseClassName: (this.rawViewMetadata?.config as any).targetObjectClass } + }; + this.createSemanticLinkPConnect(config, displayMode ?? '', referenceType, hideLabel); + return; + } + + if (this.type !== 'SemanticLink' && !this.isDisplayModeEnabled) { + const config: any = { ...this.rawViewMetadata?.config }; + generateColumns(config, this.pConn$, referenceType); + config.deferDatasource = true; + config.listType = 'datapage'; + if (['Dropdown', 'AutoComplete'].includes(this.type) && !config.placeholder) { + config.placeholder = '@L Select...'; + } + config.showPromotedFilters = showPromotedFilters; + if (!this.canBeChangedInReviewMode) { + config.displayMode = displayMode; + } + config.parameters = parameters; + + this.createOtherComponentPConnect(config, propsToUse, mode, refFieldMetadata, referenceType, hideLabel, inline); + } + } + + onRecordChange(value) { + const caseKey = this.pConn$.getCaseInfo().getKey() ?? ''; + const refreshOptions = { autoDetectRefresh: true, propertyName: '' }; + refreshOptions.propertyName = this.rawViewMetadata?.config?.value ?? ''; + + if (!this.canBeChangedInReviewMode || !this.pConn$.getValue('__currentPageTabViewName')) { + const pgRef = this.pConn$.getPageReference().replace('caseInfo.content', '') ?? ''; + const viewName = this.rawViewMetadata?.name; + if (viewName && viewName.length > 0) { + getPConnect().getActionsApi().refreshCaseView(caseKey, viewName, pgRef, refreshOptions); + } + } + + const propValue = value; + const propName = + this.rawViewMetadata?.type === 'SimpleTableSelect' && this.configProps.mode === 'multi' + ? PCore.getAnnotationUtils().getPropertyName(this.rawViewMetadata?.config?.selectionList ?? '') + : PCore.getAnnotationUtils().getPropertyName(this.rawViewMetadata?.config?.value ?? ''); + + if (propValue && this.canBeChangedInReviewMode && this.isDisplayModeEnabled) { + PCore.getCaseUtils() + .getCaseEditLock(caseKey, '') + .then(caseResponse => { + const pageTokens = this.pConn$.getPageReference().replace('caseInfo.content', '').split('.'); + let curr = {}; + const commitData = curr; + + pageTokens?.forEach(el => { + if (el !== '') { + curr[el] = {}; + curr = curr[el]; + } + }); + + // expecting format like {Customer: {pyID:"C-100"}} + const propArr = propName.split('.'); + propArr.forEach((element, idx) => { + if (idx + 1 === propArr.length) { + curr[element] = propValue; + } else { + curr[element] = {}; + curr = curr[element]; + } + }); + + PCore.getCaseUtils() + .updateCaseEditFieldsData(caseKey, { [caseKey]: commitData }, caseResponse.headers.etag, this.pConn$?.getContextName() ?? '') + .then(response => { + PCore.getContainerUtils().updateParentLastUpdateTime(this.pConn$.getContextName() ?? '', response.data.data.caseInfo.lastUpdateTime); + PCore.getContainerUtils().updateRelatedContextEtag(this.pConn$.getContextName() ?? '', response.headers.etag); + }); + }); + } + } + + private getComponentType(): string { + // componentType is not defined in ComponentMetadataConfig type so using any + return (this.rawViewMetadata?.config as any)?.componentType; + } + + private createSemanticLinkPConnect(config: any, displayMode: string, referenceType: string, hideLabel: boolean) { + const semanticLinkConfig = { + ...config, + displayMode, + referenceType, + hideLabel, + dataRelationshipContext: config.displayField ? getDataRelationshipContextFromKey(config.displayField) : null + }; + + const component = this.pConn$.createComponent({ type: 'SemanticLink', config: semanticLinkConfig }, '', 0, {}); + this.newPconn = component?.getPConnect(); + } + + private createOtherComponentPConnect( + config: any, + propsToUse: any, + mode: string, + refFieldMetadata: any, + referenceType: string, + hideLabel: boolean, + inline: boolean + ) { + const fieldMetaData = { + datasourceMetadata: { + datasource: { + parameters: config.parameters ?? {}, + propertyForDisplayText: config.datasource?.fields?.text?.substring(3) ?? config.datasource?.fields?.text, + propertyForValue: config.datasource?.fields?.value?.substring(3) ?? config.datasource?.fields?.value, + name: config.referenceList ?? '' + } + } + }; + + const componentConfig = { + ...config, + descriptors: mode === 'single' ? refFieldMetadata?.descriptors : null, + datasourceMetadata: fieldMetaData.datasourceMetadata, + required: propsToUse.required, + visibility: propsToUse.visibility, + disabled: propsToUse.disabled, + label: propsToUse.label, + readOnly: false, + ...(mode === 'single' && { referenceType }), + contextClass: config.targetObjectClass, + primaryField: config.displayField, + dataRelationshipContext: config.displayField ? getDataRelationshipContextFromKey(config.displayField) : null, + hideLabel, + inline + }; + + const component = this.pConn$.createComponent({ type: this.type, config: componentConfig }, '', 0, {}); + this.newComponentName = component?.getPConnect().getComponentName(); + this.newPconn = component?.getPConnect(); + if (this.rawViewMetadata?.config) { + this.rawViewMetadata.config = { ...config }; + } + } +} diff --git a/packages/angular-sdk-components/src/lib/_components/field/percentage/percentage.component.ts b/packages/angular-sdk-components/src/lib/_components/field/percentage/percentage.component.ts index 1c7f15ee..0f3e4642 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/percentage/percentage.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/percentage/percentage.component.ts @@ -1,19 +1,19 @@ -import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core'; +import { Component, forwardRef } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { FormControl, ReactiveFormsModule } from '@angular/forms'; import { MatInputModule } from '@angular/material/input'; import { MatFormFieldModule } from '@angular/material/form-field'; -import { interval } from 'rxjs'; import { NgxCurrencyDirective, NgxCurrencyInputMode } from 'ngx-currency'; -import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; -import { Utils } from '../../../_helpers/utils'; + +import { FieldBase } from '../field.base'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; import { handleEvent } from '../../../_helpers/event-util'; import { getCurrencyCharacters } from '../../../_helpers/currency-utils'; -import { PConnFieldProps } from '../../../_types/PConnProps.interface'; import { format } from '../../../_helpers/formatters'; +import { PConnFieldProps } from '../../../_types/PConnProps.interface'; -interface PercentageProps extends PConnFieldProps { +interface PercentageProps extends Omit { + value?: number; showGroupSeparators?: string; decimalPrecision?: number; currencyISOCode?: string; @@ -24,158 +24,56 @@ interface PercentageProps extends PConnFieldProps { selector: 'app-percentage', templateUrl: './percentage.component.html', styleUrls: ['./percentage.component.scss'], - standalone: true, imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, NgxCurrencyDirective, forwardRef(() => ComponentMapperComponent)] }) -export class PercentageComponent implements OnInit, OnDestroy { - @Input() pConn$: typeof PConnect; - @Input() formGroup$: FormGroup; - - // Used with AngularPConnect - angularPConnectData: AngularPConnectData = {}; +export class PercentageComponent extends FieldBase { configProps$: PercentageProps; + override fieldControl = new FormControl(null, null); - label$ = ''; - value$: number; - bRequired$ = false; - bReadonly$ = false; - bDisabled$ = false; - bVisible$ = true; - displayMode$?: string = ''; - controlName$: string; - bHasForm$ = true; - componentReference = ''; - testId: string; - helperText: string; - placeholder: string; decimalSeparator: string; thousandSeparator: string; - inputMode: any; + inputMode: any = NgxCurrencyInputMode.Natural; decimalPrecision: number | undefined; - fieldControl = new FormControl(null, null); - actionsApi: Object; - propName: string; formattedValue: string; - constructor( - private angularPConnect: AngularPConnectService, - private cdRef: ChangeDetectorRef, - private utils: Utils - ) {} - - ngOnInit(): void { - // First thing in initialization is registering and subscribing to the AngularPConnect service - this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - this.controlName$ = this.angularPConnect.getComponentID(this); + /** + * Updates the component when there are changes in the state. + */ + override updateSelf(): void { + // Resolve configuration properties + this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as PercentageProps; - // Then, continue on with other initialization - // call updateSelf when initializing - // this.updateSelf(); - this.checkAndUpdate(); + // Update component common properties + this.updateComponentCommonProperties(this.configProps$); - if (this.formGroup$) { - // add control to formGroup - this.formGroup$.addControl(this.controlName$, this.fieldControl); - this.fieldControl.setValue(this.value$); - this.bHasForm$ = true; - } else { - this.bReadonly$ = true; - this.bHasForm$ = false; + // Set component specific properties + const { value } = this.configProps$; + if (value) { + this.value$ = value; + this.fieldControl.setValue(value); } - } - ngOnDestroy(): void { - if (this.formGroup$) { - this.formGroup$.removeControl(this.controlName$); - } - - if (this.angularPConnectData.unsubscribeFn) { - this.angularPConnectData.unsubscribeFn(); - } + // update percentage properties + this.updatePercentageProperties(this.configProps$); } - // Callback passed when subscribing to store change - onStateChange() { - this.checkAndUpdate(); - } - - checkAndUpdate() { - // Should always check the bridge to see if the component should - // update itself (re-render) - const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); - - // ONLY call updateSelf when the component should update - if (bUpdateSelf) { - this.updateSelf(); - } - } - - // updateSelf - updateSelf(): void { - // moved this from ngOnInit() and call this from there instead... - this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as PercentageProps; - this.testId = this.configProps$.testId; - this.label$ = this.configProps$.label; - this.displayMode$ = this.configProps$.displayMode; - this.inputMode = NgxCurrencyInputMode.Natural; - const nValue: any = this.configProps$.value; - if (nValue) { - this.value$ = nValue; - this.fieldControl.setValue(nValue); - } - this.helperText = this.configProps$.helperText; - this.placeholder = this.configProps$.placeholder || ''; - const showGroupSeparators = this.configProps$.showGroupSeparators; + /** + * Updates the percentage properties + * + * @param {Object} configProps - Configuration properties. + * @param {boolean} configProps.showGroupSeparators - Whether to show group separators. + * @param {number} configProps.decimalPrecision - The number of decimal places to display. + */ + updatePercentageProperties(configProps): void { + const { showGroupSeparators, decimalPrecision } = configProps; const theSymbols = getCurrencyCharacters(''); this.decimalSeparator = theSymbols.theDecimalIndicator; this.thousandSeparator = showGroupSeparators ? theSymbols.theDigitGroupSeparator : ''; + this.decimalPrecision = decimalPrecision ?? 2; - this.actionsApi = this.pConn$.getActionsApi(); - this.propName = this.pConn$.getStateProps().value; - - if (this.displayMode$ === 'DISPLAY_ONLY' || this.displayMode$ === 'STACKED_LARGE_VAL') { - this.formattedValue = nValue ? format(nValue, 'percentage') : ''; - } - - // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError - setTimeout(() => { - if (this.configProps$.required != null) { - this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required); - } - this.cdRef.detectChanges(); - }); - - if (this.configProps$.visibility != null) { - this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility); - } - - // disabled - if (this.configProps$.disabled != undefined) { - this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled); - } - - if (this.bDisabled$) { - this.fieldControl.disable(); - } else { - this.fieldControl.enable(); - } - - if (this.configProps$.readOnly != null) { - this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly); - } - - this.decimalPrecision = this.configProps$?.decimalPrecision ?? 2; - - this.componentReference = this.pConn$.getStateProps().value; - - // trigger display of error message with field control - if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') { - const timer = interval(100).subscribe(() => { - this.fieldControl.setErrors({ message: true }); - this.fieldControl.markAsTouched(); - timer.unsubscribe(); - }); + if (['DISPLAY_ONLY', 'STACKED_LARGE_VAL'].includes(this.displayMode$)) { + this.formattedValue = this.value$ ? format(this.value$, 'percentage') : ''; } } @@ -211,20 +109,4 @@ export class PercentageComponent implements OnInit, OnDestroy { handleEvent(this.actionsApi, 'changeNblur', this.propName, value); } } - - getErrorMessage() { - // field control gets error message from here - let errMessage = ''; - // look for validation messages for json, pre-defined or just an error pushed from workitem (400) - if (this.fieldControl.hasError('message')) { - errMessage = this.angularPConnectData.validateMessage ?? ''; - return errMessage; - } - if (this.fieldControl.hasError('required')) { - errMessage = 'You must enter a value'; - } else if (this.fieldControl.errors) { - errMessage = this.fieldControl.errors.toString(); - } - return errMessage; - } } diff --git a/packages/angular-sdk-components/src/lib/_components/field/phone/phone.component.html b/packages/angular-sdk-components/src/lib/_components/field/phone/phone.component.html index bf1d01da..37501b9c 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/phone/phone.component.html +++ b/packages/angular-sdk-components/src/lib/_components/field/phone/phone.component.html @@ -2,25 +2,24 @@
-
-
- - - - {{ label$ }} - {{ getErrorMessage() }} - -
+
+ + + + {{ label$ }} + {{ getErrorMessage() }} +
diff --git a/packages/angular-sdk-components/src/lib/_components/field/phone/phone.component.scss b/packages/angular-sdk-components/src/lib/_components/field/phone/phone.component.scss index 5aa69dea..906ea38a 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/phone/phone.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/field/phone/phone.component.scss @@ -24,6 +24,10 @@ font-size: 0.7rem; } +::ng-deep .mat-mdc-menu-panel { + max-width: 20rem; +} + // ::ng-deep .iti { // display: block !important; // margin-bottom: 20px; diff --git a/packages/angular-sdk-components/src/lib/_components/field/phone/phone.component.ts b/packages/angular-sdk-components/src/lib/_components/field/phone/phone.component.ts index 1ba5579a..4adc0103 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/phone/phone.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/phone/phone.component.ts @@ -1,13 +1,13 @@ -import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core'; +import { Component, forwardRef } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatFormFieldModule } from '@angular/material/form-field'; -import { interval } from 'rxjs'; -import { NgxMatIntlTelInputComponent } from 'ngx-mat-intl-tel-input'; -import { Utils } from '../../../_helpers/utils'; -import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; -import { handleEvent } from '../../../_helpers/event-util'; +import { MatTelInput } from 'mat-tel-input'; +import { parsePhoneNumberFromString } from 'libphonenumber-js'; + +import { FieldBase } from '../field.base'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; +import { handleEvent } from '../../../_helpers/event-util'; import { PConnFieldProps } from '../../../_types/PConnProps.interface'; interface PhoneProps extends PConnFieldProps { @@ -18,140 +18,29 @@ interface PhoneProps extends PConnFieldProps { selector: 'app-phone', templateUrl: './phone.component.html', styleUrls: ['./phone.component.scss'], - standalone: true, - imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, NgxMatIntlTelInputComponent, forwardRef(() => ComponentMapperComponent)] + imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatTelInput, forwardRef(() => ComponentMapperComponent)] }) -export class PhoneComponent implements OnInit, OnDestroy { - @Input() pConn$: typeof PConnect; - @Input() formGroup$: FormGroup; - - // Used with AngularPConnect - angularPConnectData: AngularPConnectData = {}; +export class PhoneComponent extends FieldBase { configProps$: PhoneProps; - label$ = ''; - value$: string; - bRequired$ = false; - bReadonly$ = false; - bDisabled$ = false; - bVisible$ = true; - displayMode$?: string = ''; - controlName$: string; - bHasForm$ = true; - testId: string; - helperText: string; - - fieldControl = new FormControl('', null); - - actionsApi: Object; - propName: string; - - constructor( - private angularPConnect: AngularPConnectService, - private cdRef: ChangeDetectorRef, - private utils: Utils - ) {} - - ngOnInit(): void { - // First thing in initialization is registering and subscribing to the AngularPConnect service - this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - this.controlName$ = this.angularPConnect.getComponentID(this); - - // Then, continue on with other initialization - - // call updateSelf when initializing - // this.updateSelf(); - this.checkAndUpdate(); - - if (this.formGroup$) { - // add control to formGroup - this.formGroup$.addControl(this.controlName$, this.fieldControl); - this.fieldControl.setValue(this.value$); - this.bHasForm$ = true; - } else { - this.bReadonly$ = true; - this.bHasForm$ = false; - } - } - - ngOnDestroy(): void { - if (this.formGroup$) { - this.formGroup$.removeControl(this.controlName$); - } - - if (this.angularPConnectData.unsubscribeFn) { - this.angularPConnectData.unsubscribeFn(); - } - } - - // Callback passed when subscribing to store change - onStateChange() { - this.checkAndUpdate(); - } - - checkAndUpdate() { - // Should always check the bridge to see if the component should - // update itself (re-render) - const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); + preferredCountries: string[] = ['us']; - // ONLY call updateSelf when the component should update - if (bUpdateSelf) { - this.updateSelf(); - } - } - - // updateSelf - updateSelf(): void { - // moved this from ngOnInit() and call this from there instead... + /** + * Updates the component when there are changes in the state. + */ + override updateSelf(): void { + // Resolve config properties this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as PhoneProps; - this.label$ = this.configProps$.label; - this.displayMode$ = this.configProps$.displayMode; - this.testId = this.configProps$.testId; - if (this.configProps$.value != undefined) { - this.value$ = this.configProps$.value; - this.fieldControl.setValue(this.value$); - } - this.helperText = this.configProps$.helperText; - - this.actionsApi = this.pConn$.getActionsApi(); - this.propName = this.pConn$.getStateProps().value; - - // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError - setTimeout(() => { - if (this.configProps$.required != null) { - this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required); - } - this.cdRef.detectChanges(); - }); - - if (this.configProps$.visibility != null) { - this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility); - } - - // disabled - if (this.configProps$.disabled != undefined) { - this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled); - } - - if (this.bDisabled$) { - this.fieldControl.disable(); - } else { - this.fieldControl.enable(); - } - - if (this.configProps$.readOnly != null) { - this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly); - } - - // trigger display of error message with field control - if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') { - const timer = interval(100).subscribe(() => { - this.fieldControl.setErrors({ message: true }); - this.fieldControl.markAsTouched(); + // Update component common properties + this.updateComponentCommonProperties(this.configProps$); - timer.unsubscribe(); - }); + // Extract and normalize the value property + const { value } = this.configProps$; + if (value) { + this.value$ = value; + this.fieldControl.setValue(this.value$); + this.updatePreferredCountries(); } } @@ -164,26 +53,35 @@ export class PhoneComponent implements OnInit, OnDestroy { const newVal = this.formGroup$.controls[this.controlName$].value; const isValueChanged = newVal?.toString() !== oldVal.toString(); - if (isValueChanged && newVal) { - const value = this.formGroup$.controls[this.controlName$].value; - handleEvent(this.actionsApi, 'changeNblur', this.propName, value); + if (isValueChanged) { + handleEvent(this.actionsApi, 'changeNblur', this.propName, newVal); } } - getErrorMessage() { - let errMessage = ''; + updatePreferredCountries() { + if (this.value$ && typeof this.value$ === 'string') { + const phoneNumber = parsePhoneNumberFromString(this.value$); + this.preferredCountries = + phoneNumber?.country && !this.preferredCountries.includes(phoneNumber?.country.toLowerCase()) + ? [phoneNumber?.country?.toLowerCase(), ...this.preferredCountries] + : this.preferredCountries; + } + } + override getErrorMessage() { // look for validation messages for json, pre-defined or just an error pushed from workitem (400) if (this.fieldControl.hasError('message')) { - errMessage = this.angularPConnectData.validateMessage ?? ''; - return errMessage; + return this.angularPConnectData.validateMessage ?? ''; } + if (this.fieldControl.hasError('required')) { - errMessage = 'You must enter a value'; - } else if (this.fieldControl.errors) { - errMessage = 'Invalid Phone'; + return 'You must enter a value'; + } + + if (this.fieldControl.errors) { + return 'Invalid Phone'; } - return errMessage; + return ''; } } diff --git a/packages/angular-sdk-components/src/lib/_components/field/radio-buttons/radio-buttons.component.html b/packages/angular-sdk-components/src/lib/_components/field/radio-buttons/radio-buttons.component.html index 71b5a5d7..a9bf407d 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/radio-buttons/radio-buttons.component.html +++ b/packages/angular-sdk-components/src/lib/_components/field/radio-buttons/radio-buttons.component.html @@ -1,9 +1,11 @@ -
- +
+
+ +
@@ -32,3 +34,9 @@
+ +

{{ label$ }}

+
+ +
+
diff --git a/packages/angular-sdk-components/src/lib/_components/field/radio-buttons/radio-buttons.component.scss b/packages/angular-sdk-components/src/lib/_components/field/radio-buttons/radio-buttons.component.scss index d714bdfa..23d12972 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/radio-buttons/radio-buttons.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/field/radio-buttons/radio-buttons.component.scss @@ -15,11 +15,13 @@ .psdk-radio-horizontal { display: flex; flex-direction: row; + margin-top: 1rem; } .psdk-radio-vertical { display: flex; flex-direction: column; + margin-top: 1rem; } .psdk-radio-button { @@ -30,8 +32,8 @@ width: 100%; } -.psdk-radio-form ::ng-deep .mat-form-field-underline { - background-color: transparent; +.psdk-radio-form ::ng-deep .mdc-line-ripple { + display: none; } .psdk-radio-form ::ng-deep .mat-form-field-label { diff --git a/packages/angular-sdk-components/src/lib/_components/field/radio-buttons/radio-buttons.component.ts b/packages/angular-sdk-components/src/lib/_components/field/radio-buttons/radio-buttons.component.ts index e5730881..7400334f 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/radio-buttons/radio-buttons.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/radio-buttons/radio-buttons.component.ts @@ -1,15 +1,15 @@ -import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core'; +import { Component, forwardRef } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatRadioModule } from '@angular/material/radio'; import { MatInputModule } from '@angular/material/input'; import { MatFormFieldModule } from '@angular/material/form-field'; -import { interval } from 'rxjs'; -import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; -import { Utils } from '../../../_helpers/utils'; + +import { FieldBase } from '../field.base'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; -import { PConnFieldProps } from '../../../_types/PConnProps.interface'; +import { Utils } from '../../../_helpers/utils'; import { handleEvent } from '../../../_helpers/event-util'; +import { PConnFieldProps } from '../../../_types/PConnProps.interface'; interface IOption { key: string; @@ -20,6 +20,7 @@ interface RadioButtonsProps extends PConnFieldProps { // If any, enter additional props that only exist on RadioButtons here inline: boolean; fieldMetadata?: any; + variant?: string; } @Component({ @@ -27,159 +28,60 @@ interface RadioButtonsProps extends PConnFieldProps { templateUrl: './radio-buttons.component.html', styleUrls: ['./radio-buttons.component.scss'], providers: [Utils], - standalone: true, imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatRadioModule, forwardRef(() => ComponentMapperComponent)] }) -export class RadioButtonsComponent implements OnInit, OnDestroy { - @Input() pConn$: typeof PConnect; - @Input() formGroup$: FormGroup; - - // Used with AngularPConnect - angularPConnectData: AngularPConnectData = {}; +export class RadioButtonsComponent extends FieldBase { configProps$: RadioButtonsProps; - label$ = ''; - value$ = ''; - bRequired$ = false; - bReadonly$ = false; - bDisabled$ = false; - bVisible$ = true; bInline$ = false; - displayMode$?: string = ''; - controlName$: string; - bHasForm$ = true; + options$: IOption[]; componentReference = ''; - testId: string; - helperText: string; - placeholder: string; - - fieldControl = new FormControl('', null); fieldMetadata: any[]; localeContext = ''; localeClass = ''; localeName = ''; localePath = ''; localizedValue = ''; - actionsApi: Object; - propName: string; - - constructor( - private angularPConnect: AngularPConnectService, - private cdRef: ChangeDetectorRef, - private utils: Utils - ) {} - - ngOnInit(): void { - // First thing in initialization is registering and subscribing to the AngularPConnect service - this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - this.controlName$ = this.angularPConnect.getComponentID(this); - - // Then, continue on with other initialization - - // call updateSelf when initializing - // this.updateSelf(); - this.checkAndUpdate(); - - if (this.formGroup$) { - // add control to formGroup - this.formGroup$.addControl(this.controlName$, this.fieldControl); - this.fieldControl.setValue(this.value$); - this.bHasForm$ = true; - } else { - this.bReadonly$ = true; - this.bHasForm$ = false; - } - } - - ngOnDestroy(): void { - if (this.formGroup$) { - this.formGroup$.removeControl(this.controlName$); - } - - if (this.angularPConnectData.unsubscribeFn) { - this.angularPConnectData.unsubscribeFn(); - } - } - - // Callback passed when subscribing to store change - onStateChange() { - this.checkAndUpdate(); - } + variant?: string; - checkAndUpdate() { - // Should always check the bridge to see if the component should - // update itself (re-render) - const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); - - // ONLY call updateSelf when the component should update - if (bUpdateSelf) { - this.updateSelf(); - } - } - - // updateSelf - updateSelf(): void { - // moved this from ngOnInit() and call this from there instead... + /** + * Updates the component when there are changes in the state. + */ + override updateSelf(): void { + // Resolve config properties this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as RadioButtonsProps; - if (this.configProps$.value != undefined) { - this.value$ = this.configProps$.value; - } - - this.testId = this.configProps$.testId; - this.label$ = this.configProps$.label; - this.displayMode$ = this.configProps$.displayMode; - this.helperText = this.configProps$.helperText; - this.placeholder = this.configProps$.placeholder || ''; - - // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError - setTimeout(() => { - if (this.configProps$.required != null) { - this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required); - } - this.cdRef.detectChanges(); - }); - - if (this.configProps$.visibility != null) { - this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility); - } - - if (this.configProps$.inline != null) { - this.bInline$ = this.utils.getBooleanValue(this.configProps$.inline); - } + // Update component common properties + this.updateComponentCommonProperties(this.configProps$); - if (this.configProps$.disabled != undefined) { - this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled); - } + // Extract and normalize the value property + const { value } = this.configProps$; + this.value$ = value; - if (this.configProps$.inline != null) { - this.bInline$ = this.utils.getBooleanValue(this.configProps$.inline); - } - - if (this.bDisabled$) { - this.fieldControl.disable(); - } else { - this.fieldControl.enable(); - } - - if (this.configProps$.readOnly != null) { - this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly); - } + // Set component specific properties + this.updateRadioButtonsProperties(this.configProps$); + } - this.componentReference = this.pConn$.getStateProps().value; + /** + * Updates radio buttons properties based on the provided config props. + * @param configProps Configuration properties. + */ + protected updateRadioButtonsProperties(configProps) { + const { inline, fieldMetadata, variant } = configProps; - this.options$ = this.utils.getOptionList(this.configProps$, this.pConn$.getDataObject()); + this.variant = variant; + this.bInline$ = this.utils.getBooleanValue(inline); - this.actionsApi = this.pConn$.getActionsApi(); - this.propName = this.pConn$.getStateProps().value; + // Get options from config props and data object + this.options$ = this.utils.getOptionList(configProps, this.pConn$.getDataObject()); + // Extract metadata and locale information const className = this.pConn$.getCaseInfo().getClassName(); const refName = this.propName?.slice(this.propName.lastIndexOf('.') + 1); + const metaData = Array.isArray(fieldMetadata) ? fieldMetadata.filter(field => field?.classID === className)[0] : fieldMetadata; - this.fieldMetadata = this.configProps$.fieldMetadata; - const metaData = Array.isArray(this.fieldMetadata) ? this.fieldMetadata.filter(field => field?.classID === className)[0] : this.fieldMetadata; - + // Determine display name and locale context let displayName = metaData?.datasource?.propertyForDisplayText; displayName = displayName?.slice(displayName.lastIndexOf('.') + 1); this.localeContext = metaData?.datasource?.tableType === 'DataPage' ? 'datapage' : 'associated'; @@ -187,20 +89,12 @@ export class RadioButtonsComponent implements OnInit, OnDestroy { this.localeName = this.localeContext === 'datapage' ? metaData?.datasource?.name : refName; this.localePath = this.localeContext === 'datapage' ? displayName : this.localeName; + // Get localized value this.localizedValue = this.pConn$.getLocalizedValue( this.value$, this.localePath, this.pConn$.getLocaleRuleNameFromKeys(this.localeClass, this.localeContext, this.localeName) ); - // trigger display of error message with field control - if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') { - const timer = interval(100).subscribe(() => { - this.fieldControl.setErrors({ message: true }); - this.fieldControl.markAsTouched(); - - timer.unsubscribe(); - }); - } } isSelected(buttonValue: string): boolean { @@ -218,21 +112,4 @@ export class RadioButtonsComponent implements OnInit, OnDestroy { this.pConn$.getLocaleRuleNameFromKeys(this.localeClass, this.localeContext, this.localeName) ); } - - getErrorMessage() { - let errMessage = ''; - - // look for validation messages for json, pre-defined or just an error pushed from workitem (400) - if (this.fieldControl.hasError('message')) { - errMessage = this.angularPConnectData.validateMessage ?? ''; - return errMessage; - } - if (this.fieldControl.hasError('required')) { - errMessage = 'You must enter a value'; - } else if (this.fieldControl.errors) { - errMessage = this.fieldControl.errors.toString(); - } - - return errMessage; - } } diff --git a/packages/angular-sdk-components/src/lib/_components/field/rich-text/rich-text.component.html b/packages/angular-sdk-components/src/lib/_components/field/rich-text/rich-text.component.html index e7a038f8..f783c167 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/rich-text/rich-text.component.html +++ b/packages/angular-sdk-components/src/lib/_components/field/rich-text/rich-text.component.html @@ -1,6 +1,7 @@
+
@@ -13,6 +14,7 @@
+
diff --git a/packages/angular-sdk-components/src/lib/_components/field/rich-text/rich-text.component.scss b/packages/angular-sdk-components/src/lib/_components/field/rich-text/rich-text.component.scss index e69de29b..64298191 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/rich-text/rich-text.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/field/rich-text/rich-text.component.scss @@ -0,0 +1,172 @@ +@use '@angular/material' as mat; + +:host { + display: block; + background-color: var(--mat-sys-surface, #fff); + color: var(--mat-sys-on-surface, #000); +} + +::ng-deep { + .tox-tinymce { + border: 1px solid var(--mat-sys-outline, #ccc) !important; + border-radius: 4px !important; + } + + .tox-edit-area__iframe { + background-color: transparent !important; + } + + .tox .tox-toolbar, + .tox .tox-toolbar__primary, + .tox .tox-editor-header { + background-color: var(--mat-sys-surface-container-high, #f0f0f0) !important; + border-bottom: 1px solid var(--mat-sys-outline-variant, #ccc) !important; + } + + .tox .tox-tbtn { + color: var(--mat-sys-on-surface-variant, #555) !important; + background: transparent !important; + } + + .tox .tox-tbtn svg { + fill: var(--mat-sys-on-surface-variant, #555) !important; + } + + .tox .tox-tbtn:hover { + background: var(--mat-sys-hover-state-layer-opacity, rgba(0, 0, 0, 0.05)) !important; + } + + .tox .tox-tbtn--enabled, + .tox .tox-tbtn--enabled:hover { + background: var(--mat-sys-secondary-container, #e8def8) !important; + color: var(--mat-sys-on-secondary-container, #1d192b) !important; + } + + .tox .tox-tbtn--enabled svg { + fill: var(--mat-sys-on-secondary-container, #1d192b) !important; + } + + .tox .tox-tbtn--select { + background-color: transparent !important; + margin: 2px 0; + } + + .tox .tox-tbtn__select-label { + color: var(--mat-sys-on-surface, #000) !important; + } + + .tox .tox-tbtn__select-chevron svg { + fill: var(--mat-sys-on-surface-variant, #555) !important; + } + + .tox .tox-tbtn--select:hover { + background-color: var(--mat-sys-hover-state-layer-opacity, rgba(0, 0, 0, 0.05)) !important; + } + + .tox .tox-statusbar { + background-color: var(--mat-sys-surface-container-high, #f0f0f0) !important; + border-top: 1px solid var(--mat-sys-outline-variant, #ccc) !important; + color: var(--mat-sys-on-surface-variant, #555) !important; + } + + .tox .tox-dialog { + background-color: var(--mat-sys-surface-container, #fff) !important; + color: var(--mat-sys-on-surface, #000) !important; + border: 1px solid var(--mat-sys-outline-variant, #ccc) !important; + box-shadow: 0 4px 12px var(--mat-sys-shadow, rgba(0, 0, 0, 0.2)) !important; + } + + .tox .tox-dialog__header { + background-color: var(--mat-sys-surface-container, #fff) !important; + color: var(--mat-sys-on-surface, #000) !important; + border-bottom: 1px solid var(--mat-sys-outline-variant, #ccc) !important; + } + + .tox .tox-dialog__footer { + background-color: var(--mat-sys-surface-container, #fff) !important; + border-top: 1px solid var(--mat-sys-outline-variant, #ccc) !important; + } + + .tox .tox-dialog-wrap__backdrop { + background-color: var(--mat-sys-scrim, rgba(0, 0, 0, 0.5)) !important; + opacity: 0.6; + } + + .tox .tox-dialog__body input, + .tox .tox-dialog__body textarea, + .tox .tox-dialog__body select { + background-color: transparent !important; + color: var(--mat-sys-on-surface, #000) !important; + border: 1px solid var(--mat-sys-outline, #ccc) !important; + border-radius: 4px !important; + } + + .tox .tox-label { + color: var(--mat-sys-on-surface-variant, #555) !important; + } + + .tox .tox-button--icon--hover:hover { + background-color: var(--mat-sys-hover-state-layer-opacity) !important; + color: var(--mat-sys-on-surface) !important; + } + + .tox .tox-dialog__footer .tox-button { + background-color: var(--mat-sys-primary, #6200ee) !important; + color: var(--mat-sys-on-primary, #fff) !important; + border: none !important; + } + + .tox .tox-dialog__footer .tox-button--secondary { + background-color: transparent !important; + color: var(--mat-sys-primary, #6200ee) !important; + border: 1px solid var(--mat-sys-outline, #ccc) !important; + } +} + +::ng-deep { + .tox .tox-menu { + background-color: var(--mat-sys-surface-container, #2e334f) !important; + border: 1px solid var(--mat-sys-outline-variant, #404562) !important; + box-shadow: 0 4px 10px var(--mat-sys-shadow, rgba(0, 0, 0, 0.3)) !important; + } + + .tox .tox-collection__item { + color: var(--mat-sys-on-surface, #dde1ff) !important; + } + + .tox .tox-collection__item--active { + background-color: var(--mat-sys-secondary-container, #810081) !important; + color: var(--mat-sys-on-secondary-container, #ffd7f5) !important; + } + + .tox .tox-collection__item-icon svg { + fill: var(--mat-sys-on-surface, #dde1ff) !important; + } + + .tox .tox-collection__item-accessory { + color: var(--mat-sys-on-surface-variant, #c0c5e7) !important; + } + + .tox .tox-swatches__picker-btn { + border-color: var(--mat-sys-outline-variant) !important; + } + + .tox .tox-listbox { + background-color: transparent !important; + border: 1px solid var(--mat-sys-outline, #8a8faf) !important; + color: var(--mat-sys-on-surface, #dde1ff) !important; + } + + .tox .tox-listbox__select-chevron svg { + fill: var(--mat-sys-on-surface-variant, #c0c5e7) !important; + } + + .tox .tox-listbox__select-label { + color: var(--mat-sys-on-surface, #dde1ff) !important; + } + + .tox .tox-listboxfield .tox-listbox--select { + background-color: transparent !important; + color: var(--mat-sys-on-surface, #dde1ff) !important; + } +} diff --git a/packages/angular-sdk-components/src/lib/_components/field/rich-text/rich-text.component.ts b/packages/angular-sdk-components/src/lib/_components/field/rich-text/rich-text.component.ts index 7ead0b5d..3fe6c73b 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/rich-text/rich-text.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/rich-text/rich-text.component.ts @@ -1,8 +1,8 @@ -import { Component, OnInit, Input, forwardRef, OnDestroy } from '@angular/core'; +import { Component, forwardRef } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; -import { Utils } from '../../../_helpers/utils'; +import { ReactiveFormsModule } from '@angular/forms'; + +import { FieldBase } from '../field.base'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; import { handleEvent } from '../../../_helpers/event-util'; import { PConnFieldProps } from '../../../_types/PConnProps.interface'; @@ -15,110 +15,39 @@ interface RichTextProps extends PConnFieldProps { selector: 'app-rich-text', templateUrl: './rich-text.component.html', styleUrls: ['./rich-text.component.scss'], - standalone: true, imports: [CommonModule, ReactiveFormsModule, forwardRef(() => ComponentMapperComponent)] }) -export class RichTextComponent implements OnInit, OnDestroy { - @Input() pConn$: typeof PConnect; - @Input() formGroup$: FormGroup; - - // Used with AngularPConnect - angularPConnectData: AngularPConnectData = {}; +export class RichTextComponent extends FieldBase { configProps$: RichTextProps; - label$ = ''; - value$ = ''; - bRequired$ = false; - bReadonly$ = false; - bDisabled$ = false; - bVisible$ = true; - displayMode$?: string = ''; - controlName$: string; - testId: string; - helperText: string; - placeholder: any; info: any; error: boolean; status: any; - actionsApi: Object; - propName: string; - - constructor( - private angularPConnect: AngularPConnectService, - private utils: Utils - ) {} - - ngOnInit(): void { - // First thing in initialization is registering and subscribing to the AngularPConnect service - this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - - // call updateSelf when initializing - this.checkAndUpdate(); - } - - ngOnDestroy(): void { - if (this.angularPConnectData.unsubscribeFn) { - this.angularPConnectData.unsubscribeFn(); - } - } - - // Callback passed when subscribing to store change - onStateChange() { - this.checkAndUpdate(); - } - - checkAndUpdate() { - // Should always check the bridge to see if the component should - // update itself (re-render) - const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); - - // ONLY call updateSelf when the component should update - if (bUpdateSelf) { - this.updateSelf(); - } - } - // updateSelf - updateSelf(): void { - // moved this from ngOnInit() and call this from there instead... + /** + * Updates the component when there are changes in the state. + */ + override updateSelf(): void { + // Resolve config properties this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as RichTextProps; - const stateProps = this.pConn$.getStateProps(); - this.status = stateProps?.status; - - if (this.configProps$.value != undefined) { - this.value$ = this.configProps$.value; - } - this.testId = this.configProps$.testId; - this.displayMode$ = this.configProps$.displayMode; - this.label$ = this.configProps$.label; - this.placeholder = this.configProps$.placeholder; - this.info = stateProps?.validatemessage || this.configProps$.helperText; - this.error = stateProps?.status === 'error'; + // Update component common properties + this.updateComponentCommonProperties(this.configProps$); - this.actionsApi = this.pConn$.getActionsApi(); - this.propName = this.pConn$.getStateProps().value; + // Extract and normalize the value property + const { value, helperText } = this.configProps$; + this.value$ = value; - if (this.configProps$.required != null) { - this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required); - } - - if (this.configProps$.visibility != null) { - this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility); - } - - if (this.configProps$.disabled != undefined) { - this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled); - } - - if (this.configProps$.readOnly != null) { - this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly); - } + const { status, validatemessage } = this.pConn$.getStateProps(); + this.status = status; + this.info = validatemessage || helperText; + this.error = status === 'error'; } fieldOnChange(editorValue: any) { const oldVal = this.value$ ?? ''; const newVal = editorValue?.editor?.getBody()?.innerHTML ?? ''; + const isValueChanged = newVal.toString() !== oldVal.toString(); if (isValueChanged || this.status === 'error') { @@ -133,6 +62,7 @@ export class RichTextComponent implements OnInit, OnDestroy { fieldOnBlur(editorValue: any) { const oldVal = this.value$ ?? ''; + const isValueChanged = editorValue.toString() !== oldVal.toString(); if (isValueChanged) { diff --git a/packages/angular-sdk-components/src/lib/_components/field/scalar-list/scalar-list.component.ts b/packages/angular-sdk-components/src/lib/_components/field/scalar-list/scalar-list.component.ts index 6bafa0ec..e0b28a41 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/scalar-list/scalar-list.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/scalar-list/scalar-list.component.ts @@ -1,7 +1,7 @@ import { CommonModule } from '@angular/common'; -import { Component, forwardRef, Input, OnDestroy, OnInit } from '@angular/core'; -import { FormControl, FormGroup } from '@angular/forms'; -import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; +import { Component, forwardRef } from '@angular/core'; + +import { FieldBase } from '../field.base'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; import { PConnFieldProps } from '../../../_types/PConnProps.interface'; @@ -17,86 +17,29 @@ interface ScalarListProps extends Omit { selector: 'app-scalar-list', templateUrl: './scalar-list.component.html', styleUrls: ['./scalar-list.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) -export class ScalarListComponent implements OnInit, OnDestroy { - @Input() pConn$: typeof PConnect; - @Input() formGroup$: FormGroup; - - angularPConnectData: AngularPConnectData = {}; +export class ScalarListComponent extends FieldBase { configProps$: ScalarListProps; - label$ = ''; - value$: any; - displayMode$?: string = ''; items: any[]; isDisplayModeEnabled = false; - controlName$: string; - fieldControl = new FormControl('', null); - bHasForm$ = true; - bReadonly$ = false; - - constructor(private angularPConnect: AngularPConnectService) {} - - ngOnInit(): void { - // First thing in initialization is registering and subscribing to the AngularPConnect service - this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - this.controlName$ = this.angularPConnect.getComponentID(this); - // Then, continue on with other initialization - - // call updateSelf when initializing - // this.updateSelf(); - this.checkAndUpdate(); - - if (this.formGroup$) { - // add control to formGroup - this.formGroup$.addControl(this.controlName$, this.fieldControl); - this.fieldControl.setValue(this.value$); - this.bHasForm$ = true; - } else { - this.bReadonly$ = true; - this.bHasForm$ = false; - } - } - - ngOnDestroy(): void { - if (this.formGroup$) { - this.formGroup$.removeControl(this.controlName$); - } - if (this.angularPConnectData.unsubscribeFn) { - this.angularPConnectData.unsubscribeFn(); - } - } + /** + * Updates the component when there are changes in the state. + */ + override updateSelf(): void { + // Resolve config properties + this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as ScalarListProps; - // Callback passed when subscribing to store change - onStateChange() { - this.checkAndUpdate(); - } + // Extract properties from config props + const { componentType, displayMode = '', label, value, restProps } = this.configProps$; - checkAndUpdate() { - // Should always check the bridge to see if the component should - // update itself (re-render) - const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); + // Update component properties + this.label$ = label; + this.displayMode$ = displayMode; - // ONLY call updateSelf when the component should update - if (bUpdateSelf) { - this.updateSelf(); - } - } - - // updateSelf - updateSelf(): void { - this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as ScalarListProps; - this.label$ = this.configProps$.label; - const componentType = this.configProps$.componentType; - const scalarValues = this.configProps$.value; - this.displayMode$ = this.configProps$.displayMode; - const restProps = this.configProps$.restProps; - console.log('scalar values: ', scalarValues); - this.items = scalarValues?.map(scalarValue => { - console.log('scalar value: ', scalarValue); + this.items = value?.map(scalarValue => { return this.pConn$.createComponent( { type: componentType, @@ -113,6 +56,7 @@ export class ScalarListComponent implements OnInit, OnDestroy { {} ); // 2nd, 3rd, and 4th args empty string/object/null until typedef marked correctly as optional; }); + this.isDisplayModeEnabled = ['STACKED_LARGE_VAL', 'DISPLAY_ONLY'].includes(this.displayMode$ as string); this.value$ = this.items; } diff --git a/packages/angular-sdk-components/src/lib/_components/field/selectable-card/selectable-card.component.html b/packages/angular-sdk-components/src/lib/_components/field/selectable-card/selectable-card.component.html new file mode 100644 index 00000000..345ba763 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/field/selectable-card/selectable-card.component.html @@ -0,0 +1,70 @@ +
+
+ + {{ cardContent.cardImage.alt }} + + {{ cardContent.commonCardProps.label }} +
+
{{ field.name }}
+
{{ field?.value?.getPConnect().getConfigProps().value ?? '--' }}
+
+
+
+
+
+ + +
+ + {{ cardContent.cardImage.alt }} + + + {{ cardContent.commonCardProps.label }} + +
+
{{ field.name }}
+
{{ field?.value?.getPConnect().getConfigProps().value ?? '--' }}
+
+
+
+
+
diff --git a/packages/angular-sdk-components/src/lib/_components/field/selectable-card/selectable-card.component.scss b/packages/angular-sdk-components/src/lib/_components/field/selectable-card/selectable-card.component.scss new file mode 100644 index 00000000..b7380eb3 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/field/selectable-card/selectable-card.component.scss @@ -0,0 +1,11 @@ +::ng-deep .mdc-label { + font-size: large; +} + +.mat-mdc-card-content:last-child { + padding-bottom: 0; +} + +.mat-mdc-card-content:first-child { + padding-top: 0; +} diff --git a/packages/angular-sdk-components/src/lib/_components/field/selectable-card/selectable-card.component.spec.ts b/packages/angular-sdk-components/src/lib/_components/field/selectable-card/selectable-card.component.spec.ts new file mode 100644 index 00000000..3730dbce --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/field/selectable-card/selectable-card.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SelectableCardComponent } from './selectable-card.component'; + +describe('SelectableCardComponent', () => { + let component: SelectableCardComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SelectableCardComponent] + }).compileComponents(); + + fixture = TestBed.createComponent(SelectableCardComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/angular-sdk-components/src/lib/_components/field/selectable-card/selectable-card.component.ts b/packages/angular-sdk-components/src/lib/_components/field/selectable-card/selectable-card.component.ts new file mode 100644 index 00000000..f0195f49 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/field/selectable-card/selectable-card.component.ts @@ -0,0 +1,219 @@ +import { Component, Input, OnInit, EventEmitter, Output } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { MatCardModule } from '@angular/material/card'; +import { MatRadioModule } from '@angular/material/radio'; +import { MatCheckboxModule } from '@angular/material/checkbox'; +import { deleteInstruction, insertInstruction } from '../../../_helpers/instructions-utils'; +import { handleEvent } from '../../../_helpers/event-util'; +import { PConnFieldProps } from '../../../_types/PConnProps.interface'; +import { FieldBase } from '../field.base'; + +interface SelectableCardProps extends PConnFieldProps { + selectionList: any; + readonlyContextList: any; + image: string; + primaryField: string; + selectionKey: string; + renderMode: string; + hideFieldLabels?: boolean; + additionalProps?: any; + imagePosition?: string; + imageSize?: string; + showImageDescription?: boolean; + datasource?: any; +} + +@Component({ + selector: 'lib-selectable-card', + imports: [MatCardModule, CommonModule, MatRadioModule, MatCheckboxModule], + templateUrl: './selectable-card.component.html', + styleUrl: './selectable-card.component.scss' +}) +export class SelectableCardComponent extends FieldBase implements OnInit { + @Input() type: string; + @Output() valueChange: EventEmitter = new EventEmitter(); + + configProps$: SelectableCardProps; + readOnly = false; + disabled = false; + radioBtnValue; + additionalProps; + showNoValue = false; + selectionKey?: string; + defaultStyle = {}; + specialStyle = {}; + cardStyle = {}; + noLabelStyle: {}; + selectedvalues: any; + selectionList: any; + primaryField: string; + commonProps: any = {}; + contentList: [ + { + commonCardProps: { id: string; key: string; fields: any; label: string; selected: boolean }; + cardImage: { src: string; alt: string; style: any }; + } + ]; + + override ngOnInit(): void { + super.ngOnInit(); + + // styles used in displaying common field props + this.defaultStyle = { + display: 'grid', + gridTemplateColumns: '1fr 1fr', + margin: '0.5rem', + wordBreak: 'break-word', + fontSize: '0.875rem' + }; + this.specialStyle = { + margin: '0.5rem', + fontSize: '0.875rem' + }; + this.noLabelStyle = { + alignItems: 'start', + marginLeft: '0.5rem' + }; + } + + override updateSelf(): void { + this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as SelectableCardProps; + + const hideFieldLabels = this.configProps$.hideFieldLabels; + const datasource: any = this.configProps$.datasource; + const additionalProps: any = this.configProps$.additionalProps; + const imageSize: string = this.configProps$.imageSize ?? ''; // not using + const showImageDescription: boolean = this.configProps$.showImageDescription ?? false; + let recordKey = ''; + let cardLabel = ''; + let image: any; + + this.disabled = this.configProps$.disabled; + this.readOnly = this.configProps$.renderMode === 'ReadOnly' || this.displayMode$ === 'DISPLAY_ONLY' || this.configProps$.readOnly; + const imagePosition = this.configProps$.imagePosition; + + // dynamic styling based on image position and readOnly option + let imageWidth = '100%'; + this.cardStyle = { display: 'flex', flexDirection: 'column', height: '100%' }; + if (imagePosition && imagePosition !== 'block-start') { + imageWidth = '30%'; + if (imagePosition === 'inline-start') { + this.cardStyle = { display: 'flex', flexDirection: 'row', alignItems: this.readOnly ? 'center' : '' }; + } else if (imagePosition === 'inline-end') { + this.cardStyle = { + display: 'flex', + flexDirection: 'row-reverse', + justifyContent: this.readOnly ? 'space-between' : '', + alignItems: this.readOnly ? 'center' : '' + }; + } + } + if (this.type === 'radio') { + const stateProps = this.pConn$.getStateProps(); + image = { + imagePosition, + imageSize, + showImageDescription, + imageField: stateProps.image?.split('.').pop(), + imageDescription: stateProps.imageDescription?.split('.').pop() + }; + + recordKey = stateProps.value?.split('.').pop() ?? ''; + cardLabel = stateProps.primaryField?.split('.').pop() ?? ''; + + this.value$ = this.configProps$.value; + this.radioBtnValue = this.value$; + } + + if (this.type === 'checkbox') { + this.testId = this.configProps$.testId; + this.displayMode$ = this.configProps$.displayMode ?? ''; + + this.selectionKey = this.configProps$.selectionKey; + recordKey = this.selectionKey?.split('.').pop() ?? ''; + cardLabel = this.configProps$.primaryField.split('.').pop() ?? ''; + + image = { + imagePosition, + imageSize, + showImageDescription, + imageField: this.configProps$.image?.split('.').pop(), + imageDescription: (this.pConn$?.getRawMetadata()?.config as any).imageDescription?.split('.').pop() + }; + + this.selectionList = this.configProps$.selectionList; + this.selectedvalues = this.configProps$.readonlyContextList; + this.showNoValue = this.readOnly && this.selectedvalues?.length === 0; // not used + this.primaryField = this.configProps$.primaryField; + } + + this.commonProps = { hideFieldLabels, datasource, additionalProps, image, recordKey, cardLabel, radioBtnValue: this.radioBtnValue ?? '' }; + const imageDescriptionKey = this.commonProps?.image?.showImageDescription ? this.commonProps?.image?.imageDescription : undefined; + const cardDataSource = this.readOnly || this.displayMode$ == 'DISPLAY_ONLY' ? this.selectedvalues || [] : this.commonProps?.datasource?.source; + + this.contentList = cardDataSource.map(item => { + const resolvedFields = this.utils.resolveReferenceFields(item, this.commonProps.hideFieldLabels, this.commonProps.recordKey, this.pConn$); + const commonCardProps = { + id: item[this.commonProps.recordKey], + key: item[this.commonProps.recordKey], + fields: resolvedFields, + label: item[this.commonProps.cardLabel], + selected: this.selectedvalues + ? this.selectedvalues?.some?.(data => data[this.commonProps.recordKey] === item[this.commonProps.recordKey]) + : false + }; + const cardImage = item[this.commonProps.image.imageField] + ? { + src: item[this.commonProps.image.imageField], + alt: this.commonProps.image.showImageDescription && imageDescriptionKey ? item[imageDescriptionKey] : '', + style: { + width: imageWidth, + backgroundColor: 'transparent', + aspectRatio: '16/9', + maxHeight: '100%', + objectFit: 'contain', + maxWidth: '100%', + height: this.readOnly && imagePosition !== 'block-start' ? '5rem' : '' + } + } + : undefined; + + return { cardImage, commonCardProps }; + }); + } + + fieldOnChange(value: any) { + handleEvent(this.actionsApi, 'changeNblur', this.propName, value); + } + + fieldOnBlur() { + this.pConn$.getValidationApi().validate(this.selectedvalues, this.selectionList); + } + + handleChangeMultiMode(event, element) { + if (!element.selected) { + insertInstruction(this.pConn$, this.selectionList, this.selectionKey, this.primaryField, { + id: element.id, + primary: element.label + }); + } else { + deleteInstruction(this.pConn$, this.selectionList, this.selectionKey, { + id: element.key, + primary: element.label + }); + } + this.pConn$.clearErrorMessages({ + property: this.selectionList, + category: '', + context: '' + }); + } + + cardSelect(event, element) { + if (this.type === 'radio') { + this.fieldOnChange(element.key); + } else if (this.type === 'checkbox') { + this.handleChangeMultiMode(event, element); + } + } +} diff --git a/packages/angular-sdk-components/src/lib/_components/field/semantic-link/semantic-link.component.html b/packages/angular-sdk-components/src/lib/_components/field/semantic-link/semantic-link.component.html index db7ea4b1..85ebf23f 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/semantic-link/semantic-link.component.html +++ b/packages/angular-sdk-components/src/lib/_components/field/semantic-link/semantic-link.component.html @@ -1,10 +1,6 @@ -
- + - - -
-
{{ label$ }}
-
{{ value$ || '---' }}
-
+ +
{{ value$ || '---' }}
diff --git a/packages/angular-sdk-components/src/lib/_components/field/semantic-link/semantic-link.component.scss b/packages/angular-sdk-components/src/lib/_components/field/semantic-link/semantic-link.component.scss index 7abd63e0..2d1e6671 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/semantic-link/semantic-link.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/field/semantic-link/semantic-link.component.scss @@ -1,16 +1,3 @@ -.psdk-grid-filter { - display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); - column-gap: calc(2 * 0.5rem); - row-gap: calc(2 * 0.5rem); - align-items: start; -} - -.psdk-label { - color: var(--app-label-color); - margin: 8px 0px; -} - .psdk-value { margin: 8px 0px; } diff --git a/packages/angular-sdk-components/src/lib/_components/field/semantic-link/semantic-link.component.ts b/packages/angular-sdk-components/src/lib/_components/field/semantic-link/semantic-link.component.ts index a9a7268c..dd269a18 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/semantic-link/semantic-link.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/semantic-link/semantic-link.component.ts @@ -1,22 +1,27 @@ -import { Component, OnInit, Input, forwardRef, OnDestroy } from '@angular/core'; +import { Component, OnInit, Input, OnDestroy } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormGroup } from '@angular/forms'; import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; -import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; +import { getDataReferenceInfo, isLinkTextEmpty } from '../../../_helpers/semanticLink-utils'; import { Utils } from '../../../_helpers/utils'; import { PConnFieldProps } from '../../../_types/PConnProps.interface'; interface SemanticLinkProps extends PConnFieldProps { // If any, enter additional props that only exist on SemanticLink here text: string; + resourcePayload: any; + resourceParams: any; + previewKey: string; + referenceType: string; + dataRelationshipContext: string; + contextPage: any; } @Component({ selector: 'app-semantic-link', templateUrl: './semantic-link.component.html', styleUrls: ['./semantic-link.component.scss'], - standalone: true, - imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] + imports: [CommonModule] }) export class SemanticLinkComponent implements OnInit, OnDestroy { @Input() pConn$: typeof PConnect; @@ -29,6 +34,15 @@ export class SemanticLinkComponent implements OnInit, OnDestroy { value$ = ''; displayMode$?: string = ''; bVisible$ = true; + linkURL = ''; + dataResourcePayLoad: any; + referenceType: string; + shouldTreatAsDataReference: boolean; + previewKey: string; + resourcePayload: any = {}; + payload: object; + dataViewName = ''; + isLinkTextEmpty = false; constructor( private angularPConnect: AngularPConnectService, @@ -38,7 +52,7 @@ export class SemanticLinkComponent implements OnInit, OnDestroy { ngOnInit(): void { // First thing in initialization is registering and subscribing to the AngularPConnect service this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - this.updateSelf(); + this.checkAndUpdate(); } ngOnDestroy(): void { @@ -48,6 +62,10 @@ export class SemanticLinkComponent implements OnInit, OnDestroy { } onStateChange() { + this.updateSelf(); + } + + checkAndUpdate() { // Should always check the bridge to see if the component should // update itself (re-render) const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); @@ -59,12 +77,153 @@ export class SemanticLinkComponent implements OnInit, OnDestroy { } updateSelf() { + this.initializeComponentState(); + const isData = this.buildDataPayload(); + this.linkURL = this.buildLinkURL(isData); + this.isLinkTextEmpty = isLinkTextEmpty(this.value$); + } + + showDataAction() { + if (this.dataResourcePayLoad && this.dataResourcePayLoad.resourceType === 'DATA') { + const { content } = this.dataResourcePayLoad; + const lookUpDataPageInfo = PCore.getDataTypeUtils().getLookUpDataPageInfo(this.dataResourcePayLoad?.className); + const lookUpDataPage = PCore.getDataTypeUtils().getLookUpDataPage(this.dataResourcePayLoad?.className); + if (lookUpDataPageInfo) { + const { parameters } = lookUpDataPageInfo as any; + this.payload = Object.keys(parameters).reduce((acc, param) => { + const paramValue = parameters[param]; + return { + ...acc, + [param]: PCore.getAnnotationUtils().isProperty(paramValue) ? content[PCore.getAnnotationUtils().getPropertyName(paramValue)] : paramValue + }; + }, {}); + } + this.pConn$.getActionsApi().showData('pyDetails', lookUpDataPage, { + ...this.payload + }); + } + if ((this.referenceType && this.referenceType.toUpperCase() === 'DATA') || this.shouldTreatAsDataReference) { + this.pConn$.getActionsApi().showData('pyDetails', this.dataViewName, { + ...this.payload + }); + } + } + + openLinkClick(e) { + if (!e.metaKey && !e.ctrlKey) { + e.preventDefault(); + if ( + (this.dataResourcePayLoad && this.dataResourcePayLoad.resourceType === 'DATA') || + (this.referenceType && this.referenceType.toUpperCase() === 'DATA') || + this.shouldTreatAsDataReference + ) { + this.showDataAction(); + } else if (this.previewKey) { + this.pConn$.getActionsApi().openWorkByHandle(this.previewKey, this.resourcePayload.caseClassName); + } + } + } + + private initializeComponentState() { this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as SemanticLinkProps; - this.value$ = this.configProps$.text || '---'; + this.value$ = this.configProps$.text || this.configProps$.value || ''; this.displayMode$ = this.configProps$.displayMode; this.label$ = this.configProps$.label; if (this.configProps$.visibility) { this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility); } + this.referenceType = this.configProps$.referenceType; + this.previewKey = this.configProps$.previewKey; + this.resourcePayload = this.configProps$.resourcePayload ?? {}; + this.dataResourcePayLoad = this.resourcePayload?.resourceType === 'DATA' ? this.resourcePayload : null; + this.shouldTreatAsDataReference = !this.previewKey && this.resourcePayload?.caseClassName; + + const { contextPage } = this.configProps$; + if (contextPage?.classID) { + this.resourcePayload.caseClassName = contextPage.classID; + } + + const { + WORKCLASS, + CASE_INFO: { CASE_INFO_CLASSID } + } = PCore.getConstants(); + if (this.resourcePayload.caseClassName === WORKCLASS) { + this.resourcePayload.caseClassName = this.pConn$.getValue(CASE_INFO_CLASSID); + } + } + + private buildDataPayload() { + const { dataRelationshipContext = null, contextPage } = this.configProps$; + const { + RESOURCE_TYPES: { DATA } + } = PCore.getConstants(); + + if ((this.referenceType && this.referenceType.toUpperCase() === DATA) || this.shouldTreatAsDataReference) { + try { + const dataRefContext = getDataReferenceInfo(this.pConn$, dataRelationshipContext, contextPage); + this.dataViewName = dataRefContext.dataContext ?? ''; + this.payload = dataRefContext.dataContextParameters ?? {}; + return true; + } catch (error) { + console.log('Error in getting the data reference info', error); + return false; + } + } + + if (this.resourcePayload?.resourceType === 'DATA') { + this.dataViewName = PCore.getDataTypeUtils().getLookUpDataPage(this.resourcePayload.className); + const lookUpDataPageInfo: any = PCore.getDataTypeUtils().getLookUpDataPageInfo(this.resourcePayload.className); + const { content } = this.resourcePayload; + + if (lookUpDataPageInfo) { + const { parameters } = lookUpDataPageInfo; + this.payload = Object.keys(parameters).reduce((acc, param) => { + const paramValue = parameters[param]; + const propName = PCore.getAnnotationUtils().getPropertyName(paramValue); + const value = PCore.getAnnotationUtils().isProperty(paramValue) ? content[propName] : paramValue; + return { ...acc, [param]: value }; + }, {}); + } else { + const keysInfo = PCore.getDataTypeUtils().getDataPageKeys(this.dataViewName) ?? []; + this.payload = keysInfo.reduce((acc, curr) => { + const key = curr.isAlternateKeyStorage ? curr.linkedField : curr.keyName; + return { ...acc, [curr.keyName]: content[key] }; + }, {}); + } + return true; + } + return false; + } + + private buildLinkURL(isData: boolean) { + const { ACTION_OPENWORKBYHANDLE, ACTION_SHOWDATA, ACTION_GETOBJECT } = PCore.getSemanticUrlUtils().getActions() as any; + + if (isData && this.dataViewName && this.payload) { + return PCore.getSemanticUrlUtils().getResolvedSemanticURL( + ACTION_SHOWDATA, + { pageName: 'pyDetails', dataViewName: this.dataViewName }, + { ...this.payload } + ); + } + + const { resourceParams = {} } = this.configProps$; + const isObjectType = (PCore.getCaseUtils() as any).isObjectCaseType(this.resourcePayload.caseClassName); + const idKey = isObjectType ? 'objectID' : 'workID'; + + if (resourceParams.workID === '' && typeof this.previewKey === 'string') { + resourceParams[idKey] = this.previewKey.split(' ')[1]; + } else { + resourceParams[idKey] = resourceParams.workID; + } + + if (this.previewKey) { + resourceParams.id = this.previewKey; + } + + return PCore.getSemanticUrlUtils().getResolvedSemanticURL( + isObjectType ? ACTION_GETOBJECT : ACTION_OPENWORKBYHANDLE, + this.resourcePayload, + resourceParams + ); } } diff --git a/packages/angular-sdk-components/src/lib/_components/field/text-area/text-area.component.ts b/packages/angular-sdk-components/src/lib/_components/field/text-area/text-area.component.ts index 1583c42f..290d84e0 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/text-area/text-area.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/text-area/text-area.component.ts @@ -1,14 +1,13 @@ -import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core'; +import { Component, forwardRef } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatInputModule } from '@angular/material/input'; import { MatFormFieldModule } from '@angular/material/form-field'; -import { interval } from 'rxjs'; -import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; -import { Utils } from '../../../_helpers/utils'; + +import { FieldBase } from '../field.base'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; -import { PConnFieldProps } from '../../../_types/PConnProps.interface'; import { handleEvent } from '../../../_helpers/event-util'; +import { PConnFieldProps } from '../../../_types/PConnProps.interface'; interface TextAreaProps extends PConnFieldProps { // If any, enter additional props that only exist on TextArea here @@ -19,144 +18,29 @@ interface TextAreaProps extends PConnFieldProps { selector: 'app-text-area', templateUrl: './text-area.component.html', styleUrls: ['./text-area.component.scss'], - standalone: true, imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, forwardRef(() => ComponentMapperComponent)] }) -export class TextAreaComponent implements OnInit, OnDestroy { - @Input() pConn$: typeof PConnect; - @Input() formGroup$: FormGroup; - - // Used with AngularPConnect - angularPConnectData: AngularPConnectData = {}; +export class TextAreaComponent extends FieldBase { configProps$: TextAreaProps; - label$ = ''; - value$ = ''; - bRequired$ = false; - bReadonly$ = false; - bDisabled$ = false; - bVisible$ = true; nMaxLength$: number; - displayMode$?: string = ''; - controlName$: string; - bHasForm$ = true; - componentReference = ''; - testId: string; - helperText: string; - - fieldControl = new FormControl('', null); - actionsApi: Object; - propName: string; - - constructor( - private angularPConnect: AngularPConnectService, - private cdRef: ChangeDetectorRef, - private utils: Utils - ) {} - - ngOnInit(): void { - // First thing in initialization is registering and subscribing to the AngularPConnect service - this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - this.controlName$ = this.angularPConnect.getComponentID(this); - - // Then, continue on with other initialization - - // call updateSelf when initializing - // this.updateSelf(); - this.checkAndUpdate(); - - if (this.formGroup$) { - // add control to formGroup - this.formGroup$.addControl(this.controlName$, this.fieldControl); - this.fieldControl.setValue(this.value$); - this.bHasForm$ = true; - } else { - this.bReadonly$ = true; - this.bHasForm$ = false; - } - } - - ngOnDestroy(): void { - if (this.formGroup$) { - this.formGroup$.removeControl(this.controlName$); - } - - if (this.angularPConnectData.unsubscribeFn) { - this.angularPConnectData.unsubscribeFn(); - } - } - - // Callback passed when subscribing to store change - onStateChange() { - this.checkAndUpdate(); - } - - checkAndUpdate() { - // Should always check the bridge to see if the component should - // update itself (re-render) - const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); - - // ONLY call updateSelf when the component should update - if (bUpdateSelf) { - this.updateSelf(); - } - } - // updateSelf - updateSelf(): void { - // moved this from ngOnInit() and call this from there instead... + /** + * Updates the component when there are changes in the state. + */ + override updateSelf(): void { + // Resolve config properties this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as TextAreaProps; - if (this.configProps$.value != undefined) { - this.value$ = this.configProps$.value; - } - this.nMaxLength$ = this.pConn$.getFieldMetadata(this.pConn$.getRawConfigProps()?.value)?.maxLength || 100; - this.testId = this.configProps$.testId; - this.displayMode$ = this.configProps$.displayMode; - this.label$ = this.configProps$.label; - this.helperText = this.configProps$.helperText; - - this.actionsApi = this.pConn$.getActionsApi(); - this.propName = this.pConn$.getStateProps().value; - - // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError - setTimeout(() => { - if (this.configProps$.required != null) { - this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required); - } - this.cdRef.detectChanges(); - }); - - if (this.configProps$.visibility != null) { - this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility); - } - - // disabled - if (this.configProps$.disabled != undefined) { - this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled); - } - - if (this.bDisabled$) { - this.fieldControl.disable(); - } else { - this.fieldControl.enable(); - } - - if (this.configProps$.readOnly != null) { - this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly); - } + // Update component common properties + this.updateComponentCommonProperties(this.configProps$); - this.componentReference = this.pConn$.getStateProps().value; + // Extract properties from config + const { value } = this.configProps$; - // trigger display of error message with field control - if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') { - const timer = interval(100).subscribe(() => { - this.fieldControl.setErrors({ message: true }); - this.fieldControl.markAsTouched(); - - timer.unsubscribe(); - }); - } + // Set component specific properties + this.value$ = value; + this.nMaxLength$ = this.pConn$.getFieldMetadata(this.pConn$.getRawConfigProps()?.value)?.maxLength || 100; } fieldOnChange(event: any) { @@ -179,23 +63,4 @@ export class TextAreaComponent implements OnInit, OnDestroy { handleEvent(this.actionsApi, 'changeNblur', this.propName, value); } } - - getErrorMessage() { - // field control gets error message from here - - let errMessage = ''; - - // look for validation messages for json, pre-defined or just an error pushed from workitem (400) - if (this.fieldControl.hasError('message')) { - errMessage = this.angularPConnectData.validateMessage ?? ''; - return errMessage; - } - if (this.fieldControl.hasError('required')) { - errMessage = 'You must enter a value'; - } else if (this.fieldControl.errors) { - errMessage = this.fieldControl.errors.toString(); - } - - return errMessage; - } } diff --git a/packages/angular-sdk-components/src/lib/_components/field/text-content/text-content.component.ts b/packages/angular-sdk-components/src/lib/_components/field/text-content/text-content.component.ts index 85a3ea1e..96e98d99 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/text-content/text-content.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/text-content/text-content.component.ts @@ -14,7 +14,6 @@ interface TextContentProps extends PConnFieldProps { selector: 'app-text-content', templateUrl: './text-content.component.html', styleUrls: ['./text-content.component.scss'], - standalone: true, imports: [CommonModule] }) export class TextContentComponent implements OnInit, OnDestroy { diff --git a/packages/angular-sdk-components/src/lib/_components/field/text-input/text-input.component.ts b/packages/angular-sdk-components/src/lib/_components/field/text-input/text-input.component.ts index 87200ae8..3872e89f 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/text-input/text-input.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/text-input/text-input.component.ts @@ -1,14 +1,13 @@ -import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core'; +import { Component, forwardRef } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatInputModule } from '@angular/material/input'; import { MatFormFieldModule } from '@angular/material/form-field'; -import { interval } from 'rxjs'; -import { AngularPConnectService, AngularPConnectData } from '../../../_bridge/angular-pconnect'; -import { Utils } from '../../../_helpers/utils'; + +import { FieldBase } from '../field.base'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; -import { PConnFieldProps } from '../../../_types/PConnProps.interface'; import { handleEvent } from '../../../_helpers/event-util'; +import { PConnFieldProps } from '../../../_types/PConnProps.interface'; interface TextInputProps extends PConnFieldProps { // If any, enter additional props that only exist on TextInput here @@ -19,146 +18,24 @@ interface TextInputProps extends PConnFieldProps { selector: 'app-text-input', templateUrl: './text-input.component.html', styleUrls: ['./text-input.component.scss'], - standalone: true, imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, forwardRef(() => ComponentMapperComponent)] }) -export class TextInputComponent implements OnInit, OnDestroy { - @Input() pConn$: typeof PConnect; - @Input() formGroup$: FormGroup; - - // For interaction with AngularPConnect - angularPConnectData: AngularPConnectData = {}; +export class TextInputComponent extends FieldBase { configProps$: TextInputProps; - label$ = ''; - value$ = ''; - bRequired$ = false; - bReadonly$ = false; - bDisabled$ = false; - bVisible$ = true; - displayMode$?: string = ''; - controlName$: string; - testId = ''; - bHasForm$ = true; - componentReference = ''; - helperText: string; - placeholder: string; - - fieldControl = new FormControl('', null); - actionsApi: Object; - propName: string; - - constructor( - private angularPConnect: AngularPConnectService, - private cdRef: ChangeDetectorRef, - private utils: Utils - ) {} - - ngOnInit(): void { - // First thing in initialization is registering and subscribing to the AngularPConnect service - this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - this.controlName$ = this.angularPConnect.getComponentID(this); - - // Then, continue on with other initialization - - // call updateSelf when initializing - // this.updateSelf(); - this.checkAndUpdate(); - - if (this.formGroup$) { - // add control to formGroup - this.formGroup$.addControl(this.controlName$, this.fieldControl); - this.fieldControl.setValue(this.value$); - this.bHasForm$ = true; - } else { - this.bReadonly$ = true; - this.bHasForm$ = false; - } - } - - ngOnDestroy(): void { - if (this.formGroup$) { - this.formGroup$.removeControl(this.controlName$); - } - - if (this.angularPConnectData.unsubscribeFn) { - this.angularPConnectData.unsubscribeFn(); - } - } - - // Callback passed when subscribing to store change - onStateChange() { - this.checkAndUpdate(); - } - - checkAndUpdate() { - // Should always check the bridge to see if the component should - // update itself (re-render) - const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); - - // ONLY call updateSelf when the component should update - if (bUpdateSelf) { - this.updateSelf(); - } - } - - // updateSelf - updateSelf(): void { - // moved this from ngOnInit() and call this from there instead... + /** + * Updates the component when there are changes in the state. + */ + override updateSelf(): void { + // Resolve configuration properties this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as TextInputProps; - if (this.configProps$.value != undefined) { - this.value$ = this.configProps$.value; - } - - this.testId = this.configProps$.testId; - - this.label$ = this.configProps$.label; - this.displayMode$ = this.configProps$.displayMode; - - this.componentReference = this.pConn$.getStateProps().value; - - this.actionsApi = this.pConn$.getActionsApi(); - this.propName = this.pConn$.getStateProps().value; - - if (this.configProps$.visibility != null) { - this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility); - } - this.helperText = this.configProps$.helperText; - this.placeholder = this.configProps$.placeholder || ''; - - // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError - setTimeout(() => { - if (this.configProps$.required != null) { - this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required); - } - this.cdRef.detectChanges(); - }); - - // disabled - if (this.configProps$.disabled != undefined) { - this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled); - } - - if (this.bDisabled$) { - this.fieldControl.disable(); - } else { - this.fieldControl.enable(); - } + // Update component common properties + this.updateComponentCommonProperties(this.configProps$); - if (this.configProps$.readOnly != null) { - this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly); - } - - // trigger display of error message with field control - if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') { - const timer = interval(100).subscribe(() => { - this.fieldControl.setErrors({ message: true }); - this.fieldControl.markAsTouched(); - - timer.unsubscribe(); - }); - } + // Get and set component specific properties + const { value } = this.configProps$; + this.value$ = value; } fieldOnChange(event: any) { @@ -181,21 +58,4 @@ export class TextInputComponent implements OnInit, OnDestroy { handleEvent(this.actionsApi, 'changeNblur', this.propName, value); } } - - getErrorMessage() { - let errMessage = ''; - - // look for validation messages for json, pre-defined or just an error pushed from workitem (400) - if (this.fieldControl.hasError('message')) { - errMessage = this.angularPConnectData.validateMessage ?? ''; - return errMessage; - } - if (this.fieldControl.hasError('required')) { - errMessage = 'You must enter a value'; - } else if (this.fieldControl.errors) { - errMessage = this.fieldControl.errors.toString(); - } - - return errMessage; - } } diff --git a/packages/angular-sdk-components/src/lib/_components/field/text/text.component.scss b/packages/angular-sdk-components/src/lib/_components/field/text/text.component.scss index 7ae54c04..4003b87b 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/text/text.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/field/text/text.component.scss @@ -25,6 +25,5 @@ } .psdk-details-fields-label { - color: var(--app-label-color); margin: 8px 0px; } diff --git a/packages/angular-sdk-components/src/lib/_components/field/text/text.component.ts b/packages/angular-sdk-components/src/lib/_components/field/text/text.component.ts index d8675f8c..8350bdfa 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/text/text.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/text/text.component.ts @@ -15,7 +15,6 @@ interface TextProps extends PConnFieldProps { selector: 'app-text', templateUrl: './text.component.html', styleUrls: ['./text.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class TextComponent implements OnInit, OnDestroy { diff --git a/packages/angular-sdk-components/src/lib/_components/field/time/time.component.ts b/packages/angular-sdk-components/src/lib/_components/field/time/time.component.ts index a0d6108a..78d92b3d 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/time/time.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/time/time.component.ts @@ -1,15 +1,14 @@ -import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core'; +import { Component, forwardRef } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatInputModule } from '@angular/material/input'; import { MatFormFieldModule } from '@angular/material/form-field'; -import { interval } from 'rxjs'; -import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; -import { Utils } from '../../../_helpers/utils'; + +import { FieldBase } from '../field.base'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; -import { PConnFieldProps } from '../../../_types/PConnProps.interface'; import { handleEvent } from '../../../_helpers/event-util'; import { format } from '../../../_helpers/formatters'; +import { PConnFieldProps } from '../../../_types/PConnProps.interface'; interface TimeProps extends PConnFieldProps { // If any, enter additional props that only exist on Time here @@ -19,150 +18,31 @@ interface TimeProps extends PConnFieldProps { selector: 'app-time', templateUrl: './time.component.html', styleUrls: ['./time.component.scss'], - standalone: true, imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, forwardRef(() => ComponentMapperComponent)] }) -export class TimeComponent implements OnInit, OnDestroy { - @Input() pConn$: typeof PConnect; - @Input() formGroup$: FormGroup; - - // Used with AngularPConnect - angularPConnectData: AngularPConnectData = {}; +export class TimeComponent extends FieldBase { configProps$: TimeProps; - - label$ = ''; - value$: string; - bRequired$ = false; - bReadonly$ = false; - bDisabled$ = false; - bVisible$ = true; - displayMode$?: string = ''; - controlName$: string; - testId = ''; - bHasForm$ = true; - componentReference = ''; - helperText: string; - placeholder: string; - - fieldControl = new FormControl('', null); - actionsApi: Object; - propName: string; formattedValue$: any; - constructor( - private angularPConnect: AngularPConnectService, - private cdRef: ChangeDetectorRef, - private utils: Utils - ) {} - - ngOnInit(): void { - // First thing in initialization is registering and subscribing to the AngularPConnect service - this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - this.controlName$ = this.angularPConnect.getComponentID(this); - - // Then, continue on with other initialization - // call updateSelf when initializing - // this.updateSelf(); - this.checkAndUpdate(); - - if (this.formGroup$) { - // add control to formGroup - this.formGroup$.addControl(this.controlName$, this.fieldControl); - this.fieldControl.setValue(this.value$); - this.bHasForm$ = true; - } else { - this.bReadonly$ = true; - this.bHasForm$ = false; - } - } - - ngOnDestroy(): void { - if (this.formGroup$) { - this.formGroup$.removeControl(this.controlName$); - } - if (this.angularPConnectData.unsubscribeFn) { - this.angularPConnectData.unsubscribeFn(); - } - } - - // Callback passed when subscribing to store change - onStateChange() { - this.checkAndUpdate(); - } - - checkAndUpdate() { - // Should always check the bridge to see if the component should - // update itself (re-render) - const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); - - // ONLY call updateSelf when the component should update - if (bUpdateSelf) { - this.updateSelf(); - } - } - - // updateSelf - updateSelf(): void { - // moved this from ngOnInit() and call this from there instead... + /** + * Updates the component when there are changes in the state. + */ + override updateSelf(): void { + // Resolve config properties this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as TimeProps; - this.testId = this.configProps$.testId; - this.label$ = this.configProps$.label; - this.displayMode$ = this.configProps$.displayMode; + // Update component common properties + this.updateComponentCommonProperties(this.configProps$); - if (this.configProps$.value != undefined) { - this.value$ = this.configProps$.value; - } - this.helperText = this.configProps$.helperText; - this.placeholder = this.configProps$.placeholder || ''; - - this.actionsApi = this.pConn$.getActionsApi(); - this.propName = this.pConn$.getStateProps().value; - - // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError - setTimeout(() => { - if (this.configProps$.required != null) { - this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required); - } - this.cdRef.detectChanges(); - }); + // Extract the value property + const { value } = this.configProps$; + this.value$ = value; - if (this.displayMode$ === 'DISPLAY_ONLY' || this.displayMode$ === 'STACKED_LARGE_VAL') { + if (['DISPLAY_ONLY', 'STACKED_LARGE_VAL'].includes(this.displayMode$)) { this.formattedValue$ = format(this.value$, 'timeonly', { format: 'hh:mm A' }); } - - if (this.configProps$.visibility != null) { - this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility); - } - - // disabled - if (this.configProps$.disabled != undefined) { - this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled); - } - - if (this.bDisabled$) { - this.fieldControl.disable(); - } else { - this.fieldControl.enable(); - } - - if (this.configProps$.readOnly != null) { - this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly); - } - - this.componentReference = this.pConn$.getStateProps().value; - - // trigger display of error message with field control - if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') { - const timer = interval(100).subscribe(() => { - this.fieldControl.setErrors({ message: true }); - this.fieldControl.markAsTouched(); - - timer.unsubscribe(); - }); - } } fieldOnChange(event: any) { @@ -190,19 +70,4 @@ export class TimeComponent implements OnInit, OnDestroy { handleEvent(this.actionsApi, 'changeNblur', this.propName, value); } } - - getErrorMessage() { - let errMessage = ''; - // look for validation messages for json, pre-defined or just an error pushed from workitem (400) - if (this.fieldControl.hasError('message')) { - errMessage = this.angularPConnectData.validateMessage ?? ''; - return errMessage; - } - if (this.fieldControl.hasError('required')) { - errMessage = 'You must enter a value'; - } else if (this.fieldControl.errors) { - errMessage = this.fieldControl.errors.toString(); - } - return errMessage; - } } diff --git a/packages/angular-sdk-components/src/lib/_components/field/url/url.component.ts b/packages/angular-sdk-components/src/lib/_components/field/url/url.component.ts index 4df88f8f..aefbb17a 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/url/url.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/url/url.component.ts @@ -1,14 +1,13 @@ -import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core'; +import { Component, forwardRef } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatInputModule } from '@angular/material/input'; import { MatFormFieldModule } from '@angular/material/form-field'; -import { interval } from 'rxjs'; -import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; -import { Utils } from '../../../_helpers/utils'; + +import { FieldBase } from '../field.base'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; -import { PConnFieldProps } from '../../../_types/PConnProps.interface'; import { handleEvent } from '../../../_helpers/event-util'; +import { PConnFieldProps } from '../../../_types/PConnProps.interface'; interface URLProps extends PConnFieldProps { // If any, enter additional props that only exist on URL here @@ -18,145 +17,24 @@ interface URLProps extends PConnFieldProps { selector: 'app-url', templateUrl: './url.component.html', styleUrls: ['./url.component.scss'], - standalone: true, imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, forwardRef(() => ComponentMapperComponent)] }) -export class UrlComponent implements OnInit, OnDestroy { - @Input() pConn$: typeof PConnect; - @Input() formGroup$: FormGroup; - - // Used with AngularPConnect - angularPConnectData: AngularPConnectData = {}; +export class UrlComponent extends FieldBase { configProps$: URLProps; - label$ = ''; - value$ = ''; - bRequired$ = false; - bReadonly$ = false; - bDisabled$ = false; - bVisible$ = true; - displayMode$?: string = ''; - controlName$: string; - testId = ''; - bHasForm$ = true; - componentReference = ''; - helperText: string; - placeholder: string; - - fieldControl = new FormControl('', null); - actionsApi: Object; - propName: string; - - constructor( - private angularPConnect: AngularPConnectService, - private cdRef: ChangeDetectorRef, - private utils: Utils - ) {} - - ngOnInit(): void { - // First thing in initialization is registering and subscribing to the AngularPConnect service - this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - this.controlName$ = this.angularPConnect.getComponentID(this); - - // Then, continue on with other initialization - - // call updateSelf when initializing - // this.updateSelf(); - this.checkAndUpdate(); - - if (this.formGroup$) { - // add control to formGroup - this.formGroup$.addControl(this.controlName$, this.fieldControl); - this.fieldControl.setValue(this.value$); - this.bHasForm$ = true; - } else { - this.bReadonly$ = true; - this.bHasForm$ = false; - } - } - - ngOnDestroy(): void { - if (this.formGroup$) { - this.formGroup$.removeControl(this.controlName$); - } - - if (this.angularPConnectData.unsubscribeFn) { - this.angularPConnectData.unsubscribeFn(); - } - } - - // Callback passed when subscribing to store change - onStateChange() { - this.checkAndUpdate(); - } - - checkAndUpdate() { - // Should always check the bridge to see if the component should - // update itself (re-render) - const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); - - // ONLY call updateSelf when the component should update - if (bUpdateSelf) { - this.updateSelf(); - } - } - - // updateSelf - updateSelf(): void { - // moved this from ngOnInit() and call this from there instead... + /** + * Updates the component when there are changes in the state. + */ + override updateSelf(): void { + // Resolve config properties this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as URLProps; - if (this.configProps$.value != undefined) { - this.value$ = this.configProps$.value; - } - - this.testId = this.configProps$.testId; - this.label$ = this.configProps$.label; - this.displayMode$ = this.configProps$.displayMode; - this.helperText = this.configProps$.helperText; - this.placeholder = this.configProps$.placeholder || ''; - - this.actionsApi = this.pConn$.getActionsApi(); - this.propName = this.pConn$.getStateProps().value; - - // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError - setTimeout(() => { - if (this.configProps$.required != null) { - this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required); - } - this.cdRef.detectChanges(); - }); - - if (this.configProps$.visibility != null) { - this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility); - } - - // disabled - if (this.configProps$.disabled != undefined) { - this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled); - } + // Update component common properties + this.updateComponentCommonProperties(this.configProps$); - if (this.bDisabled$) { - this.fieldControl.disable(); - } else { - this.fieldControl.enable(); - } - - if (this.configProps$.readOnly != null) { - this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly); - } - - this.componentReference = this.pConn$.getStateProps().value; - - // trigger display of error message with field control - if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') { - const timer = interval(100).subscribe(() => { - this.fieldControl.setErrors({ message: true }); - this.fieldControl.markAsTouched(); - - timer.unsubscribe(); - }); - } + // Extract and normalize the value property + const { value } = this.configProps$; + this.value$ = value; } fieldOnChange(event: any) { @@ -179,21 +57,4 @@ export class UrlComponent implements OnInit, OnDestroy { handleEvent(this.actionsApi, 'changeNblur', this.propName, value); } } - - getErrorMessage() { - let errMessage = ''; - - // look for validation messages for json, pre-defined or just an error pushed from workitem (400) - if (this.fieldControl.hasError('message')) { - errMessage = this.angularPConnectData.validateMessage ?? ''; - return errMessage; - } - if (this.fieldControl.hasError('required')) { - errMessage = 'You must enter a value'; - } else if (this.fieldControl.errors) { - errMessage = this.fieldControl.errors.toString(); - } - - return errMessage; - } } diff --git a/packages/angular-sdk-components/src/lib/_components/field/user-reference/user-reference.component.scss b/packages/angular-sdk-components/src/lib/_components/field/user-reference/user-reference.component.scss index ebf9e63d..e469ece2 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/user-reference/user-reference.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/field/user-reference/user-reference.component.scss @@ -1,6 +1,5 @@ .psdk-user-reference { font-size: 0.8rem; - color: var(--app-neutral-color); } .psdk-single { flex: 1; diff --git a/packages/angular-sdk-components/src/lib/_components/field/user-reference/user-reference.component.ts b/packages/angular-sdk-components/src/lib/_components/field/user-reference/user-reference.component.ts index 8a761f52..e34f9c9e 100644 --- a/packages/angular-sdk-components/src/lib/_components/field/user-reference/user-reference.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/field/user-reference/user-reference.component.ts @@ -30,7 +30,6 @@ interface UserReferenceProps extends Omit { selector: 'app-user-reference', templateUrl: './user-reference.component.html', styleUrls: ['./user-reference.component.scss'], - standalone: true, imports: [ CommonModule, ReactiveFormsModule, @@ -65,7 +64,7 @@ export class UserReferenceComponent implements OnInit, OnDestroy { filterValue = ''; fieldControl = new FormControl('', null); - actionsApi: Object; + actionsApi: object; propName: string; onRecordChange: any; @@ -188,7 +187,7 @@ export class UserReferenceComponent implements OnInit, OnDestroy { } else { // if same user ref field is referred in view as editable & readonly formatted text // referenced users won't be available, so get user details from dx api - // eslint-disable-next-line @typescript-eslint/no-use-before-define + this.userName$ = await getUserName(this.pConn$, this.userID$); } } else if (displayAs === DROPDOWN_LIST || displayAs === SEARCH_BOX) { @@ -277,7 +276,6 @@ function getUserName(pConn, userId = ''): Promise { const { parameters = {}, referenceList } = pConn.getConfigProps(); const contextName = pConn.getContextName(); - // eslint-disable-next-line @typescript-eslint/no-shadow const OPERATORS_DP = referenceList || PCore.getEnvironmentInfo().getDefaultOperatorDP() || ''; const columns = [ diff --git a/packages/angular-sdk-components/src/lib/_components/infra/Containers/flow-container/flow-container.component.html b/packages/angular-sdk-components/src/lib/_components/infra/Containers/flow-container/flow-container.component.html index 42ce57d0..e220a978 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/Containers/flow-container/flow-container.component.html +++ b/packages/angular-sdk-components/src/lib/_components/infra/Containers/flow-container/flow-container.component.html @@ -1,7 +1,7 @@
-

{{ containerName$ }}

+

{{ containerName$ }}

@@ -32,7 +32,7 @@

{{ containerName$ }}

-
+
{{ caseMessages$ }}
diff --git a/packages/angular-sdk-components/src/lib/_components/infra/Containers/flow-container/flow-container.component.ts b/packages/angular-sdk-components/src/lib/_components/infra/Containers/flow-container/flow-container.component.ts index 2ef06673..5ffc4cf3 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/Containers/flow-container/flow-container.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/infra/Containers/flow-container/flow-container.component.ts @@ -29,7 +29,6 @@ interface FlowContainerProps { templateUrl: './flow-container.component.html', styleUrls: ['./flow-container.component.scss'], providers: [Utils], - standalone: true, imports: [CommonModule, MatCardModule, forwardRef(() => ComponentMapperComponent)] }) export class FlowContainerComponent extends FlowContainerBaseComponent implements OnInit, OnDestroy { @@ -71,6 +70,7 @@ export class FlowContainerComponent extends FlowContainerBaseComponent implement // itemKey: string = ""; // JA - this is what Nebula/Constellation uses to pass to finishAssignment, navigateToStep pConnectOfActiveContainerItem; + isMultiStep: any; constructor( injector: Injector, @@ -90,8 +90,7 @@ export class FlowContainerComponent extends FlowContainerBaseComponent implement this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); this.localizedVal = PCore.getLocaleUtils().getLocaleValue; - const caseInfo = this.pConn$.getCaseInfo(); - this.localeReference = `${caseInfo?.getClassName()}!CASE!${caseInfo.getName()}`.toUpperCase(); + this.localeReference = this.pConn$?.getCaseLocaleReference(); // Then, continue on with other initialization @@ -170,7 +169,7 @@ export class FlowContainerComponent extends FlowContainerBaseComponent implement // ONLY call updateSelf when the component should update // AND removing the "gate" that was put there since shouldComponentUpdate // should be the real "gate" - // eslint-disable-next-line sonarjs/no-collapsible-if + if (bUpdateSelf || caseViewModeFromProps !== caseViewModeFromRedux) { // don't want to redraw the flow container when there are page messages, because // the redraw causes us to loose the errors on the elements @@ -203,9 +202,9 @@ export class FlowContainerComponent extends FlowContainerBaseComponent implement const kid = this.pConn$.getChildren()[0]; const todoKid = kid.getPConnect().getChildren()[0]; - this.todo_pConn$ = todoKid.getPConnect(); + this.todo_pConn$ = todoKid?.getPConnect(); - return true; + return !!this.todo_pConn$; } return !(caseViewMode && caseViewMode === 'perform'); @@ -282,7 +281,8 @@ export class FlowContainerComponent extends FlowContainerBaseComponent implement // this.containerName$ = oWorkMeta["name"]; if (bLoadChildren && oWorkData) { - this.containerName$ = this.localizedVal(this.getActiveViewLabel() || oWorkData.caseInfo.assignments[0].name, undefined, this.localeReference); + this.containerName$ = this.localizedVal(this.getActiveViewLabel() || oWorkData.caseInfo.assignments?.[0].name, undefined, this.localeReference); + this.isMultiStep = this.utils.getBooleanValue(oWorkData.caseInfo.assignments?.[0].isMultiStep); } // turn off spinner @@ -465,7 +465,7 @@ export class FlowContainerComponent extends FlowContainerBaseComponent implement // @ts-ignore - Property 'getLoadingStatus' is private and only accessible within class 'C11nEnv' loadingInfo = this.pConn$.getLoadingStatus(); } catch (ex) { - /* empty */ + console.log(ex); } // this check in routingInfo, mimic Nebula/Constellation (React) to check and get the internals of the @@ -487,7 +487,6 @@ export class FlowContainerComponent extends FlowContainerBaseComponent implement } }); - // eslint-disable-next-line sonarjs/no-collapsible-if if (currentOrder.length > 0) { if (currentItems[key] && currentItems[key].view && type === 'single' && Object.keys(currentItems[key].view).length > 0) { // when we get here, it it because the flow action data has changed diff --git a/packages/angular-sdk-components/src/lib/_components/infra/Containers/hybrid-view-container/hybrid-view-container.component.ts b/packages/angular-sdk-components/src/lib/_components/infra/Containers/hybrid-view-container/hybrid-view-container.component.ts index ea87c07a..8cb9029d 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/Containers/hybrid-view-container/hybrid-view-container.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/infra/Containers/hybrid-view-container/hybrid-view-container.component.ts @@ -14,7 +14,6 @@ import { FormGroup } from '@angular/forms'; selector: 'app-hybrid-view-container', templateUrl: './hybrid-view-container.component.html', styleUrls: ['./hybrid-view-container.component.scss'], - standalone: true, imports: [CommonModule] }) export class HybridViewContainerComponent { diff --git a/packages/angular-sdk-components/src/lib/_components/infra/Containers/modal-view-container/modal-view-container.component.ts b/packages/angular-sdk-components/src/lib/_components/infra/Containers/modal-view-container/modal-view-container.component.ts index ecb04412..65d315bd 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/Containers/modal-view-container/modal-view-container.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/infra/Containers/modal-view-container/modal-view-container.component.ts @@ -18,7 +18,6 @@ import { ReferenceComponent } from '../../reference/reference.component'; selector: 'app-modal-view-container', templateUrl: './modal-view-container.component.html', styleUrls: ['./modal-view-container.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class ModalViewContainerComponent implements OnInit, OnDestroy { @@ -31,7 +30,7 @@ export class ModalViewContainerComponent implements OnInit, OnDestroy { angularPConnectData: AngularPConnectData = {}; arChildren$: any[]; - stateProps$: Object; + stateProps$: object; banners: any; templateName$: string; buildName$: string; @@ -40,7 +39,7 @@ export class ModalViewContainerComponent implements OnInit, OnDestroy { bShowModal$ = false; itemKey$: string; formGroup$: FormGroup; - oCaseInfo: Object = {}; + oCaseInfo: object = {}; // for causing a change on assignment updateToken$ = 0; @@ -135,7 +134,7 @@ export class ModalViewContainerComponent implements OnInit, OnDestroy { // @ts-ignore - Property 'getLoadingStatus' is private and only accessible within class 'C11nEnv' loadingInfo = this.pConn$.getLoadingStatus(); } catch (ex) { - /* empty */ + console.log(ex); } // const configProps = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()); this.stateProps$ = this.pConn$.getStateProps(); @@ -235,12 +234,7 @@ export class ModalViewContainerComponent implements OnInit, OnDestroy { this.title$ = isDataObject || this.isMultiRecord ? this.getModalHeading(dataObjectAction) - : this.determineModalHeaderByAction( - actionName, - caseTypeName, - ID, - `${theNewCaseInfo?.getClassName()}!CASE!${theNewCaseInfo.getName()}`.toUpperCase() - ); + : this.determineModalHeaderByAction(actionName, caseTypeName, ID, this.createdViewPConn$?.getCaseLocaleReference()); const bIsRefComponent = this.checkIfRefComponent(newComp); @@ -365,7 +359,7 @@ export class ModalViewContainerComponent implements OnInit, OnDestroy { return {}; } - compareCaseInfoIsDifferent(oCurrentCaseInfo: Object): boolean { + compareCaseInfoIsDifferent(oCurrentCaseInfo: object): boolean { let bRet = false; // fast-deep-equal version diff --git a/packages/angular-sdk-components/src/lib/_components/infra/Containers/view-container/helper.ts b/packages/angular-sdk-components/src/lib/_components/infra/Containers/view-container/helper.ts index 71cde2cf..297d96d7 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/Containers/view-container/helper.ts +++ b/packages/angular-sdk-components/src/lib/_components/infra/Containers/view-container/helper.ts @@ -10,13 +10,46 @@ export const addContainerItem = pConnect => { export const configureBrowserBookmark = pConnect => { const context = pConnect.getContextName(); const containerName = pConnect.getContainerName(); + const envInfo = PCore.getEnvironmentInfo(); + const { APP } = PCore.getConstants(); + const navPages = pConnect.getValue('pyPortal.pyPrimaryNavPages'); - const defaultViewLabel = Array.isArray(navPages) && navPages[0] ? navPages[0].pyLabel : ''; + let ruleName = ''; + let className = ''; + let defaultViewLabel = ''; + + const isNextGenLandingPageRouting = (envInfo?.environmentInfoObject as any)?.pyExecutionRuntimeName === (APP as any).INFINITY_RUNTIME; + + if (Array.isArray(navPages) && navPages.length > 0) { + const firstNavPage = navPages[0]; + const nestedNavPage = firstNavPage.NavigationPages?.[0]; + + if (isNextGenLandingPageRouting) { + if (nestedNavPage?.pyRuleName) { + ruleName = nestedNavPage.pyRuleName; + className = nestedNavPage.pyClassName || ''; + } else if (firstNavPage?.pyRuleName) { + ruleName = firstNavPage.pyRuleName; + className = firstNavPage.pyClassName || ''; + } else if (nestedNavPage?.pyLabel) { + defaultViewLabel = nestedNavPage.pyLabel; + } else if (firstNavPage?.pyLabel) { + defaultViewLabel = firstNavPage.pyLabel; + } + } else if (nestedNavPage?.pyLabel) { + defaultViewLabel = nestedNavPage.pyLabel; + } else if (firstNavPage?.pyLabel) { + defaultViewLabel = firstNavPage.pyLabel; + } + } + PCore.configureForBrowserBookmark({ context, containerName, acName: containerName, semanticURL: '', - defaultViewLabel + defaultViewLabel, + ruleName, + className }); }; diff --git a/packages/angular-sdk-components/src/lib/_components/infra/Containers/view-container/view-container.component.ts b/packages/angular-sdk-components/src/lib/_components/infra/Containers/view-container/view-container.component.ts index 32a20151..50ad8525 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/Containers/view-container/view-container.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/infra/Containers/view-container/view-container.component.ts @@ -28,7 +28,6 @@ interface ViewContainerProps { selector: 'app-view-container', templateUrl: './view-container.component.html', styleUrls: ['./view-container.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class ViewContainerComponent implements OnInit, OnDestroy { @@ -162,7 +161,7 @@ export class ViewContainerComponent implements OnInit, OnDestroy { this.psService.sendMessage(loadingInfo); } catch (ex) { - /* empty */ + console.log(ex); } // const buildName = this.buildName(); diff --git a/packages/angular-sdk-components/src/lib/_components/infra/action-buttons/action-buttons.component.html b/packages/angular-sdk-components/src/lib/_components/infra/action-buttons/action-buttons.component.html index aa5e5844..51a3c7f2 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/action-buttons/action-buttons.component.html +++ b/packages/angular-sdk-components/src/lib/_components/infra/action-buttons/action-buttons.component.html @@ -1,12 +1,17 @@ - - - - - -
+
+ - - +
+
diff --git a/packages/angular-sdk-components/src/lib/_components/infra/action-buttons/action-buttons.component.scss b/packages/angular-sdk-components/src/lib/_components/infra/action-buttons/action-buttons.component.scss index e69de29b..5a4f9946 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/action-buttons/action-buttons.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/infra/action-buttons/action-buttons.component.scss @@ -0,0 +1,23 @@ +.button-bar { + box-sizing: border-box; + display: flex; + flex-direction: row; + align-items: center; + width: 100%; + padding: 1rem; +} + +.left-group, +.right-group { + display: flex; + gap: 1rem; +} + +.right-group { + margin-left: auto; +} + +.secondary-button { + background-color: var(--app-sys-secondary-button-background); + border-color: var(--app-sys-secondary-button-border); +} diff --git a/packages/angular-sdk-components/src/lib/_components/infra/action-buttons/action-buttons.component.ts b/packages/angular-sdk-components/src/lib/_components/infra/action-buttons/action-buttons.component.ts index e424e5b2..abea3cfc 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/action-buttons/action-buttons.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/infra/action-buttons/action-buttons.component.ts @@ -1,14 +1,12 @@ import { Component, Input, Output, EventEmitter } from '@angular/core'; import { CommonModule } from '@angular/common'; import { MatButtonModule } from '@angular/material/button'; -import { MatGridListModule } from '@angular/material/grid-list'; @Component({ selector: 'app-action-buttons', templateUrl: './action-buttons.component.html', styleUrls: ['./action-buttons.component.scss'], - standalone: true, - imports: [CommonModule, MatGridListModule, MatButtonModule] + imports: [CommonModule, MatButtonModule] }) export class ActionButtonsComponent { @Input() arMainButtons$: any[]; diff --git a/packages/angular-sdk-components/src/lib/_components/infra/assignment-card/assignment-card.component.html b/packages/angular-sdk-components/src/lib/_components/infra/assignment-card/assignment-card.component.html index 1514318a..a6f05ddb 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/assignment-card/assignment-card.component.html +++ b/packages/angular-sdk-components/src/lib/_components/infra/assignment-card/assignment-card.component.html @@ -1,5 +1,5 @@
-
+
-
ComponentMapperComponent)] }) export class AssignmentCardComponent implements OnInit, OnChanges { @@ -19,18 +29,24 @@ export class AssignmentCardComponent implements OnInit, OnChanges { @Input() arChildren$: any[]; @Input() updateToken$: number; + childrenArray: any[] = []; + @Output() actionButtonClick: EventEmitter = new EventEmitter(); ngOnInit(): void { // Children may contain 'reference' component, so we need to // normalize them - this.arChildren$ = ReferenceComponent.normalizePConnArray(this.arChildren$); + this.childrenArray = ReferenceComponent.normalizePConnArray(this.arChildren$); } - ngOnChanges() { + ngOnChanges(changes: SimpleChanges) { // Children may contain 'reference' component, so we need to // normalize them - this.arChildren$ = ReferenceComponent.normalizePConnArray(this.arChildren$); + + const { arChildren$ } = changes; + if (isChildrenUpdated(arChildren$)) { + this.childrenArray = ReferenceComponent.normalizePConnArray(this.arChildren$); + } } onActionButtonClick(oData: any) { diff --git a/packages/angular-sdk-components/src/lib/_components/infra/assignment/assignment.component.ts b/packages/angular-sdk-components/src/lib/_components/infra/assignment/assignment.component.ts index b0185dd4..a2215514 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/assignment/assignment.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/infra/assignment/assignment.component.ts @@ -1,5 +1,5 @@ /* eslint-disable no-case-declarations */ -import { Component, OnInit, Input, NgZone, forwardRef, OnDestroy, OnChanges } from '@angular/core'; +import { Component, OnInit, Input, forwardRef, OnDestroy, OnChanges } from '@angular/core'; import { CommonModule } from '@angular/common'; import { MatSnackBarModule, MatSnackBar } from '@angular/material/snack-bar'; import { FormGroup } from '@angular/forms'; @@ -18,6 +18,11 @@ function getRefreshProps(refreshConditions) { return refreshConditions.filter(item => item.event && item.event === 'Changes').map(item => [item.field, item.field?.substring(1)]) || []; } +function scrollToTop() { + const scrollElement = document.querySelector('.psdk-view-container-top'); + scrollElement?.scrollIntoView(); +} + interface AssignmentProps { // If any, enter additional props that only exist on this component template: string; @@ -27,7 +32,6 @@ interface AssignmentProps { selector: 'app-assignment', templateUrl: './assignment.component.html', styleUrls: ['./assignment.component.scss'], - standalone: true, imports: [CommonModule, MatSnackBarModule, forwardRef(() => ComponentMapperComponent)] }) export class AssignmentComponent implements OnInit, OnDestroy, OnChanges { @@ -57,6 +61,7 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges { bHasNavigation$ = false; bIsVertical$ = false; + prevNavigationSteps: any[] = []; arCurrentStepIndicies$: number[] = []; arNavigationSteps$: any[] = []; @@ -83,7 +88,6 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges { private angularPConnect: AngularPConnectService, private psService: ProgressSpinnerService, private erService: ErrorMessagesService, - private ngZone: NgZone, private snackBar: MatSnackBar, public bannerService: BannerService ) {} @@ -129,7 +133,7 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges { this.psService.sendMessage(loadingInfo); } catch (ex) { - /* empty */ + console.log(ex); } } } @@ -141,6 +145,8 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges { } updateChanges() { + scrollToTop(); + this.registerForRefresh(); // pConn$ may be a 'reference' component, so normalize it @@ -251,17 +257,19 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges { // iterate through steps to find current one(s) // immutable, so we want to change the local copy, so need to make a copy - this.ngZone.run(() => { + + if (!PCore.isDeepEqual(this.prevNavigationSteps, oCaseInfo.navigation.steps)) { // what comes back now in configObject is the children of the flowContainer this.arNavigationSteps$ = JSON.parse(JSON.stringify(oCaseInfo.navigation.steps)); + this.prevNavigationSteps = JSON.parse(JSON.stringify(oCaseInfo.navigation.steps)); this.arNavigationSteps$.forEach(step => { if (step.name) { - step.name = PCore.getLocaleUtils().getLocaleValue(step.name, undefined, this.localeReference); + step.name = this.pConn$.getLocalizationService().getLocalizedText(step.name); } }); this.arCurrentStepIndicies$ = []; this.arCurrentStepIndicies$ = this.findCurrentIndicies(this.arNavigationSteps$, this.arCurrentStepIndicies$, 0); - }); + } } findCurrentIndicies(arStepperSteps: any[], arIndicies: number[], depth: number): number[] { @@ -427,12 +435,13 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges { const finishPromise = this.finishAssignment(this.itemKey$); // JA - was itemID but Nebula/Constellation uses itemKey finishPromise .then(() => { - this.psService.sendMessage(false); this.updateChanges(); }) .catch(() => { - this.psService.sendMessage(false); this.snackBarRef = this.snackBar.open(`${this.localizedVal('Submit failed!', this.localeCategory)}`, 'Ok'); + }) + .finally(() => { + this.psService.sendMessage(false); }); break; @@ -442,8 +451,10 @@ export class AssignmentComponent implements OnInit, OnDestroy, OnChanges { approvePromise .then(() => {}) .catch(() => { - this.psService.sendMessage(false); this.snackBarRef = this.snackBar.open(`${this.localizedVal('Approve failed!', this.localeCategory)}`, 'Ok'); + }) + .finally(() => { + this.psService.sendMessage(false); }); break; diff --git a/packages/angular-sdk-components/src/lib/_components/infra/dashboard-filter/dashboard-filter.component.ts b/packages/angular-sdk-components/src/lib/_components/infra/dashboard-filter/dashboard-filter.component.ts index eaa0456a..90c2405d 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/dashboard-filter/dashboard-filter.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/infra/dashboard-filter/dashboard-filter.component.ts @@ -14,7 +14,6 @@ import { getFilterExpression, getFormattedDate, createFilter, combineFilters } f selector: 'app-dashboard-filter', templateUrl: './dashboard-filter.component.html', styleUrls: ['./dashboard-filter.component.scss'], - standalone: true, imports: [ CommonModule, MatFormFieldModule, diff --git a/packages/angular-sdk-components/src/lib/_components/infra/defer-load/defer-load.component.html b/packages/angular-sdk-components/src/lib/_components/infra/defer-load/defer-load.component.html index 0ab77d12..144f785d 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/defer-load/defer-load.component.html +++ b/packages/angular-sdk-components/src/lib/_components/infra/defer-load/defer-load.component.html @@ -1,3 +1,7 @@ -
- +
+
diff --git a/packages/angular-sdk-components/src/lib/_components/infra/defer-load/defer-load.component.ts b/packages/angular-sdk-components/src/lib/_components/infra/defer-load/defer-load.component.ts index a199976a..b34e1539 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/defer-load/defer-load.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/infra/defer-load/defer-load.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit, Input, forwardRef, OnDestroy, OnChanges } from '@angular/core'; +import { Component, OnInit, Input, forwardRef, OnDestroy, OnChanges, SimpleChanges } from '@angular/core'; import { CommonModule } from '@angular/common'; import { publicConstants } from '@pega/pcore-pconnect-typedefs/constants'; import { ReferenceComponent } from '../../infra/reference/reference.component'; @@ -15,16 +15,14 @@ import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/an selector: 'app-defer-load', templateUrl: './defer-load.component.html', styleUrls: ['./defer-load.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class DeferLoadComponent implements OnInit, OnDestroy, OnChanges { @Input() pConn$: typeof PConnect; - @Input() loadData$: any; + @Input() formGroup$; @Input() name; - componentName$: string; - loadedPConn$: any; + childComponentPConnect: typeof PConnect; bShowDefer$ = false; angularPConnectData: AngularPConnectData = {}; @@ -46,7 +44,7 @@ export class DeferLoadComponent implements OnInit, OnDestroy, OnChanges { ngOnInit(): void { this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); // The below call is causing an error while creating/opening a case, hence commenting it out - // this.loadActiveTab(); + this.updateSelf(); } ngOnDestroy(): void { @@ -60,14 +58,23 @@ export class DeferLoadComponent implements OnInit, OnDestroy, OnChanges { // update itself (re-render) const theRequestedAssignment = this.pConn$.getValue(PCore.getConstants().CASE_INFO.ASSIGNMENT_LABEL); const lastUpdateCaseTime = this.pConn$.getValue('caseInfo.lastUpdateTime'); - if (theRequestedAssignment !== this.currentLoadedAssignment || (lastUpdateCaseTime && lastUpdateCaseTime !== this.lastUpdateCaseTime)) { + if ( + (theRequestedAssignment && theRequestedAssignment !== this.currentLoadedAssignment) || + (lastUpdateCaseTime && lastUpdateCaseTime !== this.lastUpdateCaseTime) + ) { this.currentLoadedAssignment = theRequestedAssignment; this.lastUpdateCaseTime = lastUpdateCaseTime; - this.loadActiveTab(); + this.updateSelf(); } } - ngOnChanges() { + ngOnChanges(changes: SimpleChanges) { + if (!Object.values(changes).every(val => val.firstChange === true)) { + this.updateSelf(); + } + } + + updateSelf() { this.loadViewCaseID = this.pConn$.getValue(this.constants.PZINSKEY) || this.pConn$.getValue(this.constants.CASE_INFO.CASE_INFO_ID); let containerItemData; const targetName = this.pConn$.getTarget(); @@ -93,7 +100,7 @@ export class DeferLoadComponent implements OnInit, OnDestroy, OnChanges { getViewOptions = () => ({ viewContext: this.resourceType, - pageClass: this.loadViewCaseID ? '' : this.pConn$.getDataObject().pyPortal.classID, + pageClass: this.loadViewCaseID ? '' : this.pConn$.getDataObject()?.pyPortal?.classID, container: this.isContainerPreview ? 'preview' : undefined, containerName: this.isContainerPreview ? 'preview' : undefined, updateData: this.isContainerPreview @@ -120,8 +127,9 @@ export class DeferLoadComponent implements OnInit, OnDestroy, OnChanges { }; const configObject = PCore.createPConnect(config); configObject.getPConnect().setInheritedProp('displayMode', 'DISPLAY_ONLY'); - this.loadedPConn$ = ReferenceComponent.normalizePConn(configObject.getPConnect()); - this.componentName$ = this.loadedPConn$.getComponentName(); + + this.childComponentPConnect = ReferenceComponent.normalizePConn(configObject.getPConnect()); + if (this.deferLoadId) { PCore.getDeferLoadManager().stop(this.deferLoadId, this.pConn$.getContextName()); } @@ -150,6 +158,8 @@ export class DeferLoadComponent implements OnInit, OnDestroy, OnChanges { console.error('Cannot load the defer loaded view without container information'); } } else if (this.resourceType === this.PAGE) { + if (!this.loadViewCaseID) return; + // Rendering defer loaded tabs in case/ page context this.pConn$ .getActionsApi() diff --git a/packages/angular-sdk-components/src/lib/_components/infra/error-boundary/error-boundary.component.ts b/packages/angular-sdk-components/src/lib/_components/infra/error-boundary/error-boundary.component.ts index 61931822..50717d84 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/error-boundary/error-boundary.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/infra/error-boundary/error-boundary.component.ts @@ -5,7 +5,6 @@ import { CommonModule } from '@angular/common'; selector: 'app-error-boundary', templateUrl: './error-boundary.component.html', styleUrls: ['./error-boundary.component.scss'], - standalone: true, imports: [CommonModule] }) export class ErrorBoundaryComponent { diff --git a/packages/angular-sdk-components/src/lib/_components/infra/multi-step/multi-step.component.html b/packages/angular-sdk-components/src/lib/_components/infra/multi-step/multi-step.component.html index ef316ac8..c7661c31 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/multi-step/multi-step.component.html +++ b/packages/angular-sdk-components/src/lib/_components/infra/multi-step/multi-step.component.html @@ -12,25 +12,17 @@
- -
    -
  • -
    - - - - -
    -
    - -
    -
  • -
+ +
+
+ +
+
@@ -64,25 +56,17 @@
- -
    -
  • -
    - - - - -
    -
    - -
    -
  • -
+ +
+
+ +
+
diff --git a/packages/angular-sdk-components/src/lib/_components/infra/multi-step/multi-step.component.scss b/packages/angular-sdk-components/src/lib/_components/infra/multi-step/multi-step.component.scss index 40472b7c..11dfa7df 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/multi-step/multi-step.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/infra/multi-step/multi-step.component.scss @@ -1,5 +1,5 @@ .psdk-case-view-divider { - border-bottom: 0.0625rem solid var(--app-neutral-light-color); + border-bottom: 0.0625rem solid var(--mat-sys-outline-variant); } .psdk-icon { @@ -7,14 +7,6 @@ min-width: unset; } -.psdk-icon-current { - color: var(--app-primary-color); -} - -.psdk-icon-not-current { - color: var(--app-neutral-color); -} - .psdk-current-svg-icon { width: 1rem; filter: var(--app-primary-color-filter); @@ -35,16 +27,15 @@ mat-horizontal-stepper { .psdk-sub-step-current { padding-left: 0.625rem; font-weight: bold; - color: var(--app-label-selected-color); + color: var(--mat-sys-on-secondary-container); } .psdk-sub-step-not-current { + color: var(--mat-sys-on-surface-variant); padding-left: 0.625rem; - color: var(--app-label-color); } .psdk-flow-container-top { - background-color: var(--app-form-color); padding: 0rem 0.625rem; border-radius: 0.3125rem; } @@ -81,8 +72,7 @@ mat-horizontal-stepper { .psdk-vertical-step-icon { margin-right: 12px; - background-color: var(--app-neutral-color); - color: var(--app-form-color); + background-color: var(--mat-sys-secondary); border-radius: 50%; height: 24px; width: 24px; @@ -95,13 +85,12 @@ mat-horizontal-stepper { top: 50%; left: 50%; transform: translate(-50%, -50%); - color: var(--app-form-color); } .psdk-vertical-step-icon-selected { margin-right: 12px; - background-color: var(--app-primary-color); - color: var(--app-form-color); + background-color: var(--mat-sys-primary); + color: var(--mat-sys-surface); border-radius: 50%; height: 24px; width: 24px; @@ -110,7 +99,7 @@ mat-horizontal-stepper { } .psdk-vertical-step-label { - color: var(--app-label-color); + color: var(--mat-sys-on-surface-variant); display: inline-block; white-space: nowrap; overflow: hidden; @@ -122,7 +111,7 @@ mat-horizontal-stepper { } .psdk-vertical-step-label-selected { - color: var(--app-label-selected-color); + color: var(--mat-sys-on-secondary-container); display: inline-block; white-space: nowrap; overflow: hidden; @@ -152,7 +141,6 @@ mat-horizontal-stepper { border-left-style: solid; top: -16px; bottom: -16px; - border-left-color: var(--app-multi-step-border-color); } .psdk-horizontal-stepper { @@ -182,8 +170,8 @@ mat-horizontal-stepper { } .psdk-horizontal-step-icon { - background-color: var(--app-neutral-color); - color: var(--app-form-color); + background-color: var(--mat-sys-secondary); + color: var(--mat-sys-surface); border-radius: 50%; height: 24px; width: 24px; @@ -203,8 +191,8 @@ mat-horizontal-stepper { } .psdk-horizontal-step-icon-selected { - background-color: var(--app-primary-color); - color: var(--app-form-color); + background-color: var(--mat-sys-primary); + color: var(--mat-sys-surface); border-radius: 50%; height: 24px; width: 24px; @@ -216,7 +204,7 @@ mat-horizontal-stepper { } .psdk-horizontal-step-label { - color: var(--app-label-color); + color: var(--mat-sys-on-surface-variant); display: inline-block; min-width: 50px; vertical-align: middle; @@ -226,7 +214,7 @@ mat-horizontal-stepper { } .psdk-horizontal-step-label-selected { - color: var(--app-label-selected-color); + color: var(--mat-sys-on-secondary-container); display: inline-block; min-width: 50px; vertical-align: middle; @@ -236,7 +224,6 @@ mat-horizontal-stepper { } .psdk-horizontal-step-line { - border-top-color: var(--app-multi-step-border-color); border-top-width: 1px; border-top-style: solid; flex: auto; diff --git a/packages/angular-sdk-components/src/lib/_components/infra/multi-step/multi-step.component.ts b/packages/angular-sdk-components/src/lib/_components/infra/multi-step/multi-step.component.ts index 8efb9e5c..eda8e174 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/multi-step/multi-step.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/infra/multi-step/multi-step.component.ts @@ -9,7 +9,6 @@ import { ComponentMapperComponent } from '../../../_bridge/component-mapper/comp templateUrl: './multi-step.component.html', styleUrls: ['./multi-step.component.scss'], providers: [Utils], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class MultiStepComponent implements OnInit { diff --git a/packages/angular-sdk-components/src/lib/_components/infra/navbar/navbar.component.html b/packages/angular-sdk-components/src/lib/_components/infra/navbar/navbar.component.html index 567857c0..29596463 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/navbar/navbar.component.html +++ b/packages/angular-sdk-components/src/lib/_components/infra/navbar/navbar.component.html @@ -8,48 +8,43 @@
-
- - -
- - Create -
+ + +
+ + Create +
+
+ + + {{ + localeUtils.getLocaleValue(caseType.pyLabel, '', localeUtils.getCaseLocaleReference(caseType.pyClassName)) + }} - - - {{ localeUtils.getLocaleValue(caseType.pyLabel, '', localeReference) }} - - -
-
- - -
- - {{ localeUtils.getLocaleValue(page.pyLabel, '', localeReference) }} -
-
-
-
+ + + +
+ + {{ page.name }} +
+
+
-
- - -
-
{{ portalOperatorInitials$ }}
- {{ portalOperator$ }} -
-
- - - - -
-
+ + +
+
{{ portalOperatorInitials$ }}
+ {{ portalOperator$ }} +
+
+ + + +
diff --git a/packages/angular-sdk-components/src/lib/_components/infra/navbar/navbar.component.scss b/packages/angular-sdk-components/src/lib/_components/infra/navbar/navbar.component.scss index 23b5b2e4..08ab1c47 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/navbar/navbar.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/infra/navbar/navbar.component.scss @@ -5,7 +5,7 @@ $transition-fast: 0.1s !default; $natural-ease: cubic-bezier(0.4, 0.6, 0.1, 1) !default; .psdk-nav-divider { - border-bottom: 0.0625rem solid var(--app-divider-color); + border-bottom: 0.0625rem solid var(--mat-sys-outline-variant); width: 100%; align-items: center; } @@ -39,6 +39,7 @@ $natural-ease: cubic-bezier(0.4, 0.6, 0.1, 1) !default; .psdk-appshell-nav { z-index: 199; position: fixed; + top: 0; display: flex; flex-direction: column; justify-content: flex-start; @@ -119,8 +120,8 @@ $natural-ease: cubic-bezier(0.4, 0.6, 0.1, 1) !default; align-items: center; text-align: center; display: inline-flex; - background: var(--app-neutral-color); - color: var(--app-form-color); + background: var(--mat-sys-background); + color: var(--mat-sys-on-background); font-weight: normal; font-size: 1rem; } @@ -140,7 +141,7 @@ mat-list-item { height: auto !important; &:hover { - background-color: var(--app-label-color); + background-color: rgba(0, 0, 0, 0.54); } .flex-box { @@ -150,3 +151,20 @@ mat-list-item { text-align: left; } } + +.theme-menu-item { + display: flex; + align-items: center; + gap: 12px; +} + +.color-preview { + width: 24px; + height: 24px; + border-radius: 50%; +} + +.psdk-logout-button { + flex: 1; + align-content: flex-end; +} diff --git a/packages/angular-sdk-components/src/lib/_components/infra/navbar/navbar.component.ts b/packages/angular-sdk-components/src/lib/_components/infra/navbar/navbar.component.ts index e7a70394..2d954161 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/navbar/navbar.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/infra/navbar/navbar.component.ts @@ -17,7 +17,6 @@ interface NavBarProps { templateUrl: './navbar.component.html', styleUrls: ['./navbar.component.scss'], providers: [Utils], - standalone: true, imports: [CommonModule, MatListModule, MatMenuModule] }) export class NavbarComponent implements OnInit, OnDestroy { @@ -50,7 +49,6 @@ export class NavbarComponent implements OnInit, OnDestroy { localizedVal: any; localeCategory = 'AppShell'; localeUtils = PCore.getLocaleUtils(); - localeReference: any; constructor( private angularPConnect: AngularPConnectService, private chRef: ChangeDetectorRef, @@ -114,11 +112,17 @@ export class NavbarComponent implements OnInit, OnDestroy { // making a copy, so can add info this.navPages$ = JSON.parse(JSON.stringify(this.pages$)); - + // @ts-ignore + const localeReference = PCore.getLocaleUtils().getPortalLocaleReference() || this.pConn$.getValue('.pyLocaleReference'); this.navPages$.forEach(page => { + const destinationObject: any = {}; + this.pConn$.resolveConfigProps( + { defaultHeading: page.pyDefaultHeading || page.pyLabel, localeReference: page.pyLocalizationReference }, + destinationObject + ); + page.name = this.localeUtils.getLocaleValue(destinationObject.defaultHeading, '', destinationObject.localeReference || localeReference); page.iconName = this.utils.getImageSrc(page.pxPageViewIcon, this.utils.getSDKStaticContentUrl()); }); - this.localeReference = this.pConn$.getValue('.pyLocaleReference'); this.actionsAPI = this.pConn$.getActionsApi(); this.createWork = this.actionsAPI.createWork.bind(this.actionsAPI); this.showPage = this.actionsAPI.showPage.bind(this.actionsAPI); diff --git a/packages/angular-sdk-components/src/lib/_components/infra/reference/reference.component.ts b/packages/angular-sdk-components/src/lib/_components/infra/reference/reference.component.ts index 4e17b421..3943988c 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/reference/reference.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/infra/reference/reference.component.ts @@ -71,6 +71,11 @@ export class ReferenceComponent { pageReference: context && context.startsWith('@CLASS') ? '' : context }); + if (referenceConfig.inheritedProps && referenceConfig.inheritedProps.length > 0) { + const inheritedProps = inPConn.getInheritedProps(); + referenceConfig.inheritedProps = Object.keys(inheritedProps).map(prop => ({ prop, value: inheritedProps[prop] })); + } + // Get the PConnect object from the created component const newCompPConnect = viewComponent.getPConnect(); diff --git a/packages/angular-sdk-components/src/lib/_components/infra/region/region.component.ts b/packages/angular-sdk-components/src/lib/_components/infra/region/region.component.ts index bdbe3d3b..b3a70553 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/region/region.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/infra/region/region.component.ts @@ -8,7 +8,6 @@ import { ComponentMapperComponent } from '../../../_bridge/component-mapper/comp selector: 'app-region', templateUrl: './region.component.html', styleUrls: ['./region.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class RegionComponent implements OnInit, OnChanges { diff --git a/packages/angular-sdk-components/src/lib/_components/infra/root-container/root-container.component.scss b/packages/angular-sdk-components/src/lib/_components/infra/root-container/root-container.component.scss index ed1d7622..d670febf 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/root-container/root-container.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/infra/root-container/root-container.component.scss @@ -5,7 +5,6 @@ align-items: center; height: 100%; width: 100%; - background-color: var(--app-background-color); position: fixed; z-index: 99999; top: 0rem; diff --git a/packages/angular-sdk-components/src/lib/_components/infra/root-container/root-container.component.ts b/packages/angular-sdk-components/src/lib/_components/infra/root-container/root-container.component.ts index c5c820b7..f3f4773b 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/root-container/root-container.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/infra/root-container/root-container.component.ts @@ -8,7 +8,6 @@ import { ProgressSpinnerService } from '../../../_messages/progress-spinner.serv import { ReferenceComponent } from '../reference/reference.component'; import { PreviewViewContainerComponent } from '../Containers/preview-view-container/preview-view-container.component'; import { ModalViewContainerComponent } from '../Containers/modal-view-container/modal-view-container.component'; -import { HybridViewContainerComponent } from '../Containers/hybrid-view-container/hybrid-view-container.component'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; /** @@ -23,11 +22,9 @@ const options = { context: 'app' }; selector: 'app-root-container', templateUrl: './root-container.component.html', styleUrls: ['./root-container.component.scss'], - standalone: true, imports: [ CommonModule, MatProgressSpinnerModule, - HybridViewContainerComponent, ModalViewContainerComponent, PreviewViewContainerComponent, forwardRef(() => ComponentMapperComponent) @@ -219,7 +216,6 @@ export class RootContainerComponent implements OnInit, OnDestroy { showHideProgress(bShow: boolean) { // only show spinner after 500ms wait, so if server fast, won't see if (bShow) { - // eslint-disable-next-line sonarjs/no-collapsible-if if (!this.bIsProgress$) { // makes sure Angular tracks these changes if (!this.spinnerTimer || this.spinnerTimer.isStopped) { @@ -227,7 +223,7 @@ export class RootContainerComponent implements OnInit, OnDestroy { try { this.spinnerTimer.unsubscribe(); } catch (ex) { - /* empty */ + console.log(ex); } this.ngZone.run(() => { diff --git a/packages/angular-sdk-components/src/lib/_components/infra/stages/stages.component.html b/packages/angular-sdk-components/src/lib/_components/infra/stages/stages.component.html index 4a8000a5..b6456df7 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/stages/stages.component.html +++ b/packages/angular-sdk-components/src/lib/_components/infra/stages/stages.component.html @@ -1,13 +1,14 @@
- {{ PCore$.getLocaleUtils().getLocaleValue(stage.name, '', key) }} + +
{{ PCore$.getLocaleUtils().getLocaleValue(stage.name, '', key) }}
- {{ PCore$.getLocaleUtils().getLocaleValue(stage.name, '', key) }} + {{ localizationService.getLocalizedText(stage.name) }}
- {{ PCore$.getLocaleUtils().getLocaleValue(stage.name, '', key) }} + {{ localizationService.getLocalizedText(stage.name) }}
diff --git a/packages/angular-sdk-components/src/lib/_components/infra/stages/stages.component.scss b/packages/angular-sdk-components/src/lib/_components/infra/stages/stages.component.scss index 5e41163c..a77a1328 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/stages/stages.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/infra/stages/stages.component.scss @@ -8,56 +8,30 @@ font-size: 1.5rem; } -.psdk-stages-div { - display: inline-flex; - padding: 0.3125rem; - font-weight: bold; - font-size: 1.3rem; - color: var(--app-neutral-color); -} - -.psdk-stages-past { - color: var(--app-primary-color); - padding-right: 0.3125rem; -} - -.psdk-stages-present { - color: var(--app-secondary-color); - padding-right: 0.3125rem; -} - -.psdk-stages-future { - color: var(--app-neutral-color); - padding-right: 0.3125rem; -} - .psdk-stages-full { display: block; } .psdk-stages-divider { - border-bottom: 0.0625rem solid var(--app-neutral-light-color); + border-bottom: 0.0625rem solid var(--mat-sys-outline-variant); } .psdk-stages-full { display: block; } -.psdk-stages-divider { - border-bottom: 0.0625rem solid var(--app-neutral-light-color); -} - .psdk-stages-icon { - width: 1.4rem; + width: 18px; display: inline-block; vertical-align: top; + filter: var(--app-primary-color-filter); + margin-right: 2px; } .psdk-stages-bar { - margin: 1rem 0rem; - background-color: var(--app-form-color); + background-color: var(--mat-sys-surface-container); border-radius: 0.5rem; - border: 0.0625rem solid var(--app-neutral-light-color); + border: 0.0625rem solid var(--mat-sys-outline-variant); overflow: hidden; display: flex; flex-wrap: wrap; @@ -84,7 +58,7 @@ right: calc(-0.4375rem); background: inherit; border-style: solid; - border-color: rgb(207, 207, 207); + border-color: var(--mat-sys-outline-variant); border-width: 0.0625rem 0.0625rem 0px 0px; border-radius: 0px calc(0.3125rem) 0px 0px; transform: rotateZ(45deg) skew(15deg, 15deg); @@ -92,17 +66,19 @@ } .psdk-stages-inner-past { - color: var(--app-inverse-form-color); + color: var(--mat-sys-outline-variant); font-size: 1rem; + display: flex; + align-items: center; } .psdk-stages-inner-present { - color: var(--app-primary-color); + color: var(--mat-sys-primary); font-weight: bold; font-size: 1rem; } .psdk-stages-inner-future { - color: var(--app-neutral-color); + color: var(--mat-sys-on-surface); font-size: 1rem; } diff --git a/packages/angular-sdk-components/src/lib/_components/infra/stages/stages.component.ts b/packages/angular-sdk-components/src/lib/_components/infra/stages/stages.component.ts index a023315c..22980052 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/stages/stages.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/infra/stages/stages.component.ts @@ -13,7 +13,6 @@ interface StagesProps { selector: 'app-stages', templateUrl: './stages.component.html', styleUrls: ['./stages.component.scss'], - standalone: true, imports: [CommonModule] }) export class StagesComponent implements OnInit, OnDestroy { @@ -27,7 +26,8 @@ export class StagesComponent implements OnInit, OnDestroy { arStageResults$: any[]; lastStage$: any; checkSvgIcon$: string; - key: string; + key: any; + localizationService: any; constructor( private angularPConnect: AngularPConnectService, @@ -40,7 +40,8 @@ export class StagesComponent implements OnInit, OnDestroy { // const imagePath = this.utils.getIconPath(this.utils.getSDKStaticContentUrl()); this.checkSvgIcon$ = this.utils.getImageSrc('check', this.utils.getSDKStaticContentUrl()); - this.key = `${this.pConn$.getCaseInfo().getClassName()}!CASE!${this.pConn$.getCaseInfo().getName()}`.toUpperCase(); + this.key = this.pConn$?.getCaseLocaleReference(); + this.localizationService = this.pConn$?.getLocalizationService(); } ngOnDestroy(): void { diff --git a/packages/angular-sdk-components/src/lib/_components/infra/view/view.component.html b/packages/angular-sdk-components/src/lib/_components/infra/view/view.component.html index 577803cd..abf9e1c1 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/view/view.component.html +++ b/packages/angular-sdk-components/src/lib/_components/infra/view/view.component.html @@ -17,7 +17,7 @@
diff --git a/packages/angular-sdk-components/src/lib/_components/infra/view/view.component.ts b/packages/angular-sdk-components/src/lib/_components/infra/view/view.component.ts index a3b7db31..c43848a0 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/view/view.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/infra/view/view.component.ts @@ -7,7 +7,7 @@ import { getAllFields } from '../../template/utils'; import { ReferenceComponent } from '../reference/reference.component'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; -const NO_HEADER_TEMPLATES = ['SubTabs', 'SimpleTable', 'Confirmation', 'DynamicTabs', 'DetailsSubTabs']; +const NO_HEADER_TEMPLATES = ['SubTabs', 'SimpleTable', 'Confirmation', 'DynamicTabs', 'DetailsSubTabs', 'ListView']; const DETAILS_TEMPLATES = [ 'Details', 'DetailsFields', @@ -82,7 +82,6 @@ interface ViewProps { selector: 'app-view', templateUrl: './view.component.html', styleUrls: ['./view.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class ViewComponent implements OnInit, OnDestroy, OnChanges { @@ -159,14 +158,11 @@ export class ViewComponent implements OnInit, OnDestroy, OnChanges { this.templateName$ = this.configProps$.template || ''; this.title$ = this.configProps$.title || ''; - this.label$ = this.configProps$.label || ''; - this.showLabel$ = this.configProps$.showLabel || isDetailsTemplate(this.templateName$) || this.showLabel$; // label & showLabel within inheritedProps takes precedence over configProps - this.label$ = this.inheritedProps$.label || this.label$; - this.showLabel$ = this.inheritedProps$.showLabel || this.showLabel$; + this.label$ = this.inheritedProps$.label || this.configProps$.label || ''; + this.showLabel$ = this.inheritedProps$.showLabel || this.configProps$.showLabel || isDetailsTemplate(this.templateName$); // children may have a 'reference' so normalize the children array this.arChildren$ = ReferenceComponent.normalizePConnArray(this.pConn$.getChildren()); - this.visibility$ = this.configProps$.visibility ?? this.visibility$; /** diff --git a/packages/angular-sdk-components/src/lib/_components/template/advanced-search/advanced-search.component.html b/packages/angular-sdk-components/src/lib/_components/template/advanced-search/advanced-search.component.html new file mode 100755 index 00000000..9aed8ffa --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/advanced-search/advanced-search.component.html @@ -0,0 +1,12 @@ + diff --git a/packages/angular-sdk-components/src/lib/_components/template/advanced-search/advanced-search.component.scss b/packages/angular-sdk-components/src/lib/_components/template/advanced-search/advanced-search.component.scss new file mode 100644 index 00000000..e69de29b diff --git a/packages/angular-sdk-components/src/lib/_components/template/advanced-search/advanced-search.component.spec.ts b/packages/angular-sdk-components/src/lib/_components/template/advanced-search/advanced-search.component.spec.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/angular-sdk-components/src/lib/_components/template/advanced-search/advanced-search.component.ts b/packages/angular-sdk-components/src/lib/_components/template/advanced-search/advanced-search.component.ts new file mode 100644 index 00000000..8d201661 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/advanced-search/advanced-search.component.ts @@ -0,0 +1,112 @@ +import { Component, forwardRef, Input, OnInit, OnChanges } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormGroup } from '@angular/forms'; +import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; +import { DataReferenceAdvancedSearchService } from '../../../_services/data-reference-advanced-search.service'; +import { getFirstChildConfig } from '../data-reference/utils'; + +@Component({ + selector: 'app-advanced-search', + templateUrl: './advanced-search.component.html', + styleUrls: ['./advanced-search.component.scss'], + imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] +}) +export class AdvancedSearchComponent implements OnInit, OnChanges { + @Input() pConn$: typeof PConnect; + @Input() formGroup$: FormGroup; + @Input() searchSelectCacheKey; + + isInitialized = false; + + configProps$: any; + showRecords: any; + searchGroupsProps: any; + editableFieldComp: any; + + constructor(private advancedSearchService: DataReferenceAdvancedSearchService) {} + + ngOnInit(): void { + this.isInitialized = true; + this.updateSelf(); + } + + ngOnChanges() { + if (this.isInitialized) { + this.updateSelf(); + } + } + + // updateSelf + updateSelf(): void { + this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()); + const targetObjectClass = this.configProps$.targetObjectClass; + const localeReference = this.configProps$.localeReference; + const data: any = this.advancedSearchService.getConfig(); + const { dataReferenceConfigToChild, isCreateNewReferenceEnabled, disableStartingFieldsForReference, pyID, searchSelectCacheKey } = data; + const { selectionMode, value: singleSelectFieldValue, readonlyContextList: multiSelectField } = dataReferenceConfigToChild; + + // let isSelectionExist = false; + const { MULTI } = PCore.getConstants().LIST_SELECTION_MODE; + + if (selectionMode === MULTI) { + this.showRecords = this.pConn$.getValue(multiSelectField)?.length || false; + } else { + this.showRecords = this.pConn$.getValue(singleSelectFieldValue) || false; + } + + const rawViewMetadata = this.pConn$.getRawMetadata() as any; + + const searchFieldsSet = new Set(); + const searchFields: any = []; + rawViewMetadata?.config?.searchGroups?.forEach((group: any) => { + group.children.forEach((child: any) => { + if (!searchFieldsSet.has(child.config.value) && !child.config.validator) { + searchFields.push(child); + searchFieldsSet.add(child.config.value); + } + }); + }); + + const firstChildPConnect = this.pConn$.getChildren()[0].getPConnect as any; + const [firstChildMeta] = rawViewMetadata.children; + + const localizedVal = PCore.getLocaleUtils().getLocaleValue; + // @ts-ignore + const cache = PCore.getNavigationUtils().getComponentCache(searchSelectCacheKey) ?? {}; + + this.editableFieldComp = firstChildPConnect().createComponent({ + type: firstChildMeta.type, + config: { + ...getFirstChildConfig({ + firstChildMeta, + getPConnect: this.pConn$, + rawViewMetadata, + contextClass: targetObjectClass, + dataReferenceConfigToChild, + isCreateNewReferenceEnabled, + disableStartingFieldsForReference, + pyID + }), + searchFields, + showRecords: this.showRecords, + label: localizedVal('Search results', 'DataReference'), + searchSelectCacheKey, + cache + } + }); + + const { selectionList, dataRelationshipContext } = this.editableFieldComp.getPConnect().getConfigProps(); + const editableField = selectionMode === MULTI ? selectionList.substring(1) : dataRelationshipContext; + + this.searchGroupsProps = { + getPConnect: this.pConn$, + editableField, + localeReference, + setShowRecords: (value: boolean) => { + this.showRecords = value; + }, + searchSelectCacheKey: dataReferenceConfigToChild.searchSelectCacheKey, + cache + }; + } +} diff --git a/packages/angular-sdk-components/src/lib/_components/template/advanced-search/advanced-search.service.ts b/packages/angular-sdk-components/src/lib/_components/template/advanced-search/advanced-search.service.ts new file mode 100644 index 00000000..febb89fc --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/advanced-search/advanced-search.service.ts @@ -0,0 +1,27 @@ +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root' +}) +export class AdvancedSearchService { + initializeSearchFields(rawViewMetadata: any): any[] { + const searchFieldsSet = new Set(); + const searchFields: any[] = []; + + rawViewMetadata.config.searchGroups.forEach((group: any) => { + group.children.forEach((child: any) => { + if (!searchFieldsSet.has(child.config.value) && !child.config.validator) { + searchFields.push(child); + searchFieldsSet.add(child.config.value); + } + }); + }); + + return searchFields; + } + + getLocalizedValue(key: string, context: string): string { + // Mock implementation for localized value retrieval + return `${context}: ${key}`; + } +} diff --git a/packages/angular-sdk-components/src/lib/_components/template/advanced-search/search-group/persist-utils.ts b/packages/angular-sdk-components/src/lib/_components/template/advanced-search/search-group/persist-utils.ts new file mode 100644 index 00000000..d0052bd8 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/advanced-search/search-group/persist-utils.ts @@ -0,0 +1,56 @@ +const SKIP_CACHE_KEY = ''; + +export function getMappedKey(key) { + const mappedKey = PCore.getEnvironmentInfo().getKeyMapping(key); + if (!mappedKey) { + return key; + } + return mappedKey; +} + +const getComponentStateKey = (getPConnect, propertyName: string) => { + const pConnect = getPConnect; + const caseID = `.${getMappedKey('pyID')}`; // Enhance this later when use-case arrives for data objects using S&S. + const resolvedCaseID = pConnect.getValue(caseID); + + if (!resolvedCaseID) { + return SKIP_CACHE_KEY; + } + + return `Search-${resolvedCaseID}-${pConnect.getPageReference()}-${propertyName}-${pConnect.getCurrentView()}`; +}; + +const getComponentStateOptions = getPConnect => { + return { clearOnCancelForContext: getPConnect.getContextName() }; +}; + +interface SearchCategory { + // tabId of search category selected + selectedCategory: string; +} + +interface SearchGroup { + // searchFields can be any object based on what fields are authored. + searchFields: unknown; + activeGroupId: string; +} + +const setComponentCache = ({ + cacheKey, + state, + options +}: { + cacheKey: string; + state: SearchCategory | SearchGroup; + options: ReturnType; +}) => { + if (cacheKey !== SKIP_CACHE_KEY) { + (PCore.getNavigationUtils() as any).setComponentCache(cacheKey, state, options); + } +}; + +export const componentCachePersistUtils = { + getComponentStateKey, + getComponentStateOptions, + setComponentCache +}; diff --git a/packages/angular-sdk-components/src/lib/_components/template/advanced-search/search-groups/search-groups.component.html b/packages/angular-sdk-components/src/lib/_components/template/advanced-search/search-groups/search-groups.component.html new file mode 100644 index 00000000..eeffe4b5 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/advanced-search/search-groups/search-groups.component.html @@ -0,0 +1,32 @@ +
+ +
+ + Search By + + + {{ group.config.label }} + + + +
+ + +
+ +
+ + +
+ + +
+
diff --git a/packages/angular-sdk-components/src/lib/_components/template/advanced-search/search-groups/search-groups.component.scss b/packages/angular-sdk-components/src/lib/_components/template/advanced-search/search-groups/search-groups.component.scss new file mode 100644 index 00000000..e69de29b diff --git a/packages/angular-sdk-components/src/lib/_components/template/advanced-search/search-groups/search-groups.component.spec.ts b/packages/angular-sdk-components/src/lib/_components/template/advanced-search/search-groups/search-groups.component.spec.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/angular-sdk-components/src/lib/_components/template/advanced-search/search-groups/search-groups.component.ts b/packages/angular-sdk-components/src/lib/_components/template/advanced-search/search-groups/search-groups.component.ts new file mode 100755 index 00000000..48b9e4be --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/advanced-search/search-groups/search-groups.component.ts @@ -0,0 +1,294 @@ +import { Component, Input, OnInit, OnDestroy, forwardRef, OnChanges, ChangeDetectorRef, signal } from '@angular/core'; +import { FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { componentCachePersistUtils } from '../search-group/persist-utils'; +import { MatRadioModule } from '@angular/material/radio'; +import { MatOptionModule } from '@angular/material/core'; +import { MatSelectModule } from '@angular/material/select'; +import { MatButtonModule } from '@angular/material/button'; +import { CommonModule } from '@angular/common'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { ComponentMapperComponent } from '../../../../_bridge/component-mapper/component-mapper.component'; +import { getCacheInfo, isValidInput } from '../search-groups/utils'; +import { Subscription } from 'rxjs'; + +const listViewConstants = { + EVENTS: { + LIST_VIEW_READY: 'LIST_VIEW_READY' + } +}; + +export function flattenObj(obj: any): any { + const result: any = {}; + Object.keys(obj).forEach(key => { + if (!['context_data', 'pageInstructions'].includes(key)) { + if (typeof obj[key] === 'object' && !Array.isArray(obj[key])) { + const temp = flattenObj(obj[key]); + Object.keys(temp).forEach(nestedKey => { + result[`${key}.${nestedKey}`] = temp[nestedKey]; + }); + } else { + result[key] = obj[key]; + } + } + }); + return result; +} + +export const initializeSearchFields = (searchFields, getPConnect, referenceListClassID, searchFieldRestoreValues = {}) => { + const filtersProperties = {}; + searchFields?.forEach(field => { + let val = ''; + const { value, defaultValue = '' } = field.config; + const propPath = PCore.getAnnotationUtils().getPropertyName(value); + + if (searchFieldRestoreValues[propPath]) { + val = searchFieldRestoreValues[propPath]; + } else if (PCore.getAnnotationUtils().isProperty(defaultValue)) { + val = getPConnect().getValue(defaultValue.split(' ')[1]); + } else if (defaultValue.startsWith('@L')) { + val = defaultValue.split(' ')[1]; + } else { + val = defaultValue; + } + + filtersProperties[propPath] = val; + + const valueSplit = value.split('@P ')[1]?.split('.').filter(Boolean) ?? []; + valueSplit.pop(); + + if (valueSplit.length) { + let path = ''; + let currentClassID = referenceListClassID; + valueSplit.forEach(item => { + path = path.length ? `${path}.${item}` : item; + currentClassID = (PCore.getMetadataUtils().getPropertyMetadata(item, currentClassID) as any).pageClass; + if (currentClassID) { + filtersProperties[`${path}.classID`] = currentClassID; + } + }); + } + }); + return filtersProperties; +}; + +@Component({ + selector: 'app-search-groups', + templateUrl: './search-groups.component.html', + styleUrls: ['./search-groups.component.scss'], + imports: [ + CommonModule, + ReactiveFormsModule, + MatFormFieldModule, + MatRadioModule, + MatOptionModule, + MatSelectModule, + MatButtonModule, + forwardRef(() => ComponentMapperComponent) + ] +}) +export class SearchGroupsComponent implements OnInit, OnDestroy, OnChanges { + @Input() pConn$: typeof PConnect; + @Input() formGroup$: FormGroup; + @Input() searchGroupsProps; + + configProps$: any; + cache: any; + previousFormValues: any; + isValidatorField: any; + searchSelectCacheKey: any; + activeGroupId: string; + getPConnect: any; + searchFields: any; + referenceListClassID: any; + transientItemID: any; + useCache: boolean; + searchFieldsC11nEnv: any = signal(null); + referenceFieldName: any; + viewName: any; + subs: Subscription[] = []; + localizedVal = PCore.getLocaleUtils().getLocaleValue; + setShowRecords: any; + groups: any; + state: any = {}; + rawGroupsConfig: any; + initialSearchFields: {}; + constructor(private cdRef: ChangeDetectorRef) {} + + ngOnInit(): void { + console.log('SearchGroupsComponent - ngOnInit'); + } + + ngOnChanges() { + this.updateSelf(); + } + + // updateSelf + updateSelf(): void { + this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()); + const { searchGroups: groups, referenceList } = this.configProps$; + const { getPConnect, editableField, searchSelectCacheKey, cache } = this.searchGroupsProps; + this.searchSelectCacheKey = searchSelectCacheKey; + this.getPConnect = getPConnect; + this.cache = cache || {}; + const referenceFieldName = editableField.replaceAll('.', '_'); + const { classID: referenceListClassID } = PCore.getMetadataUtils().getDataPageMetadata(referenceList) as any; + const { useCache, initialActiveGroupId } = getCacheInfo(cache, groups); + this.activeGroupId = initialActiveGroupId; + const rawGroupsConfig = this.pConn$.getRawConfigProps().searchGroups; + const activeGroupIndex = groups.findIndex(group => group.config.id === this.activeGroupId); + const { children: searchFieldsChildren = [] } = activeGroupIndex !== -1 ? rawGroupsConfig[activeGroupIndex] : {}; + this.searchFields = searchFieldsChildren.map(field => ({ + ...field, + config: { ...field.config, isSearchField: true } + })); + this.initialSearchFields = initializeSearchFields( + this.searchFields, + getPConnect, + referenceListClassID, + useCache && cache.activeGroupId === this.activeGroupId ? cache.searchFields : {} + ); + const filtersWithClassID = { + ...this.initialSearchFields, + classID: referenceListClassID + }; + const viewName = this.pConn$.getCurrentView(); + const transientId = getPConnect.getContainerManager().addTransientItem({ id: `${referenceFieldName}-${viewName}`, data: filtersWithClassID }); + this.transientItemID = transientId; + this.createSearchFields(); + } + + createSearchFields() { + const searchFieldsViewConfig = { + name: 'SearchFields', + type: 'View', + config: { + template: 'DefaultForm', + NumCols: '3', + contextName: this.transientItemID, // can be null initially; will be replaced after transient creation + readOnly: false, + context: this.transientItemID, + localeReference: this.searchGroupsProps.localeReference + }, + children: [ + { + name: 'Fields', + type: 'Region', + children: this.searchFields + } + ] + }; + + // Create c11n env (Angular will render this via the SDK host component) + this.searchFieldsC11nEnv.set( + PCore.createPConnect({ + meta: searchFieldsViewConfig, + options: { + hasForm: true, + contextName: this.transientItemID + } + }) + ); + + this.cdRef.detectChanges(); + } + + getFilterData(): void { + let changes = PCore.getFormUtils().getSubmitData(this.transientItemID, { + isTransientContext: true, + includeDisabledFields: true + }); + + if (Object.keys(this.cache.searchFields ?? {}).length > 0 && Object.keys(changes).length === 1) { + changes = this.cache.searchFields; + } + + const formValues = flattenObj(changes); + + if ( + !PCore.isDeepEqual(this.previousFormValues, formValues) && + PCore.getFormUtils().isFormValid(this.transientItemID) && + isValidInput(formValues) + ) { + if (this.isValidatorField) { + // @ts-ignore + PCore.getMessageManager().clearContextMessages({ context: transientItemID }); + } + + this.previousFormValues = formValues; + // this.setShowRecords(true); + + PCore.getPubSubUtils().publish(PCore.getEvents().getTransientEvent().UPDATE_PROMOTED_FILTERS, { + payload: formValues, + showRecords: true, + viewName: this.getPConnect.getCurrentView() + }); + } + + this.state.activeGroupId = this.activeGroupId; + this.state.searchFields = changes; + this.state.selectedCategory = this.getPConnect.getCurrentView(); + const options = componentCachePersistUtils.getComponentStateOptions(this.getPConnect); + componentCachePersistUtils.setComponentCache({ + cacheKey: this.searchSelectCacheKey, + state: this.state, + options + }); + } + + resetFilterData(): void { + PCore.getNavigationUtils().resetComponentCache(this.searchSelectCacheKey); + const resetPayload = { + transientItemID: this.transientItemID, + data: initializeSearchFields(this.searchFields, this.getPConnect, this.referenceListClassID), + options: { reset: true } + }; + PCore.getContainerUtils().updateTransientData(resetPayload); + } + + /** NEW: update existing transient data when active group changes */ + updateTransientDataForActiveGroup() { + const filtersWithClassID = { + ...this.initialSearchFields, + classID: this.referenceListClassID + }; + + if (this.transientItemID) { + // this mirrors the React: PCore.getContainerUtils().replaceTransientData(...) + PCore.getContainerUtils().replaceTransientData({ transientItemID: this.transientItemID, data: filtersWithClassID }); + } + } + + onActiveGroupChange(event: any) { + this.activeGroupId = event.value; + // update searchFields for the newly selected group (mirror how React recalculates) + const activeGroupIndex = this.groups.findIndex(g => g.config.id === this.activeGroupId); + const searchFieldsChildren = activeGroupIndex !== -1 ? this.rawGroupsConfig[activeGroupIndex]?.children || [] : []; + this.searchFields = searchFieldsChildren.map(field => ({ + ...field, + config: { ...field.config, isSearchField: true } + })); + + // IMPORTANT: call replaceTransientData to update the transient with the new group's search fields + this.updateTransientDataForActiveGroup(); + } + + private setupCacheReplayOnListViewReady(): void { + if (Object.keys(this.cache?.searchFields ?? {}).length > 0) { + const sub: any = PCore.getPubSubUtils().subscribe( + listViewConstants.EVENTS.LIST_VIEW_READY, + ({ viewName }: { viewName: string }) => { + if (viewName === this.viewName && this.useCache) { + this.getFilterData(); + } + }, + `${this.searchSelectCacheKey}-listview-ready` + ); + this.subs.push(sub); + } + } + + ngOnDestroy(): void { + PCore.getPubSubUtils().unsubscribe(listViewConstants.EVENTS.LIST_VIEW_READY, `${this.searchSelectCacheKey}-listview-ready`); + this.subs.forEach(s => s.unsubscribe()); + } +} diff --git a/packages/angular-sdk-components/src/lib/_components/template/advanced-search/search-groups/utils.ts b/packages/angular-sdk-components/src/lib/_components/template/advanced-search/search-groups/utils.ts new file mode 100644 index 00000000..bd836b04 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/advanced-search/search-groups/utils.ts @@ -0,0 +1,29 @@ +function isEmpty(value: any): boolean { + return ( + // null or undefined + value === null || + value === undefined || + ((Array.isArray(value) || typeof value === 'string') && value.length === 0) || + // is an Object and has no keys + (value.constructor === Object && Object.keys(value).length === 0) + ); +} + +export function getCacheInfo( + cache: { selectedCategory: string; activeGroupId: string; searchFields: unknown }, + groups: { config: { id: string } }[] +) { + let initialActiveGroupId = groups.length ? groups[0].config.id : ''; + + let useCache = false; + if (cache.activeGroupId && groups?.find(group => group.config.id === cache.activeGroupId)) { + initialActiveGroupId = cache.activeGroupId; + useCache = true; + } + + return { useCache, initialActiveGroupId }; +} + +export function isValidInput(input: { [s: string]: unknown }) { + return Object.values(input).some(value => !isEmpty(value)); +} diff --git a/packages/angular-sdk-components/src/lib/_components/template/app-shell/app-shell.component.html b/packages/angular-sdk-components/src/lib/_components/template/app-shell/app-shell.component.html index 9db8baf8..0ddc65d7 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/app-shell/app-shell.component.html +++ b/packages/angular-sdk-components/src/lib/_components/template/app-shell/app-shell.component.html @@ -3,7 +3,10 @@
- +
diff --git a/packages/angular-sdk-components/src/lib/_components/template/app-shell/app-shell.component.scss b/packages/angular-sdk-components/src/lib/_components/template/app-shell/app-shell.component.scss index 748713b8..88cc3c65 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/app-shell/app-shell.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/template/app-shell/app-shell.component.scss @@ -1,9 +1,7 @@ .appshell-top { - background-color: var(--app-background-color); } .appshell-top-wss { - background-color: var(--app-background-color); } .appshell-main { @@ -32,7 +30,6 @@ align-items: center; height: 100%; width: 100%; - background-color: var(--app-background-color); position: fixed; z-index: 999; top: 0rem; diff --git a/packages/angular-sdk-components/src/lib/_components/template/app-shell/app-shell.component.ts b/packages/angular-sdk-components/src/lib/_components/template/app-shell/app-shell.component.ts index 757ede97..c0dffdfd 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/app-shell/app-shell.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/app-shell/app-shell.component.ts @@ -5,6 +5,7 @@ import { Subscription } from 'rxjs'; import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; import { ErrorMessagesService } from '../../../_messages/error-messages.service'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; +import { Utils } from '../../../_helpers/utils'; interface IPage { classID: string; @@ -24,14 +25,13 @@ interface AppShellProps { portalTemplate: string; readOnly?: boolean; showAppHeaderBar: boolean; - showAppName: boolean; + showAppName: any; } @Component({ selector: 'app-app-shell', templateUrl: './app-shell.component.html', styleUrls: ['./app-shell.component.scss'], - standalone: true, imports: [CommonModule, MatSnackBarModule, forwardRef(() => ComponentMapperComponent)] }) export class AppShellComponent implements OnInit, OnDestroy { @@ -45,19 +45,22 @@ export class AppShellComponent implements OnInit, OnDestroy { caseTypes$?: object[]; arChildren$: any[]; bShowAppShell$ = false; - appName$ = 'PEGA'; + appName$ = ''; errorMessagesSubscription: Subscription; sErrorMessages = ''; snackBarRef: any; bOkDisplayError = false; portalTemplate: string; links: any = []; + imageURL: string | Blob; + localizedVal = PCore.getLocaleUtils().getLocaleValue; constructor( private angularPConnect: AngularPConnectService, private erService: ErrorMessagesService, private snackBar: MatSnackBar, - private ngZone: NgZone + private ngZone: NgZone, + private utils: Utils ) {} ngOnInit() { @@ -68,6 +71,8 @@ export class AppShellComponent implements OnInit, OnDestroy { this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as AppShellProps; + this.portalTemplate = this.configProps$.portalTemplate; + // making a copy, so can add info this.pages$ = this.configProps$.pages; @@ -79,6 +84,11 @@ export class AppShellComponent implements OnInit, OnDestroy { this.bShowAppShell$ = true; } + /* TODO: We're setting the `pyPortalTemplate` for now, this would be handled by the CoreJS in the future releases */ + if (this.portalTemplate === 'wss') { + PCore.getEnvironmentInfo().setEnvironmentInfo({ ...PCore.getEnvironmentInfo().environmentInfoObject, pyPortalTemplate: 'wss' } as any); + } + // @ts-ignore - Property 'pyCaseTypesAvailableToCreateDP' does not exist on type pxApplication const caseTypesAvailableToCreateDP = PCore.getEnvironmentInfo().environmentInfoObject?.pxApplication?.pyCaseTypesAvailableToCreateDP; if (caseTypesAvailableToCreateDP) { @@ -100,8 +110,6 @@ export class AppShellComponent implements OnInit, OnDestroy { this.arChildren$ = this.pConn$.getChildren(); - this.portalTemplate = this.configProps$.portalTemplate; - // handle showing and hiding the progress spinner this.errorMessagesSubscription = this.erService.getMessage().subscribe(message => { this.showDismissErrorMessages(message); @@ -138,6 +146,12 @@ export class AppShellComponent implements OnInit, OnDestroy { updateSelf() { this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as AppShellProps; + const showAppName = this.configProps$.showAppName; + const envInfo = PCore.getEnvironmentInfo(); + const appNameToDisplay = showAppName ? envInfo.getApplicationLabel() : ''; + const portalClass = this.pConn$.getValue('.classID', ''); // 2nd arg empty string until typedef marked correctly + const envPortalName = envInfo.getPortalName(); + this.ngZone.run(() => { // making a copy, so can add info this.pages$ = this.configProps$.pages; @@ -149,6 +163,30 @@ export class AppShellComponent implements OnInit, OnDestroy { this.caseTypes$ = this.configProps$.caseTypes; this.arChildren$ = this.pConn$.getChildren(); }); + + const portalLogo = this.configProps$.portalLogo; + // using the default icon then fetch it from the static folder (not auth involved) + if ( + !portalLogo || + portalLogo.toLowerCase().includes('pzpega-logo-mark') || + portalLogo.toLowerCase().includes('py-logo') || + portalLogo.toLowerCase().includes('py-full-logo') + ) { + const portalLogoImage = this.utils.getIconPath(this.utils.getSDKStaticContentUrl()).concat('pzpega-logo-mark.svg'); + this.imageURL = portalLogoImage; + } + // not using default icon to fetch it using the way which uses authentication + else { + PCore.getAssetLoader() + .getSvcImageUrl(portalLogo) + .then(data => { + this.imageURL = data; + }) + .catch(() => { + console.error(`${this.localizedVal('Unable to load the image for the portal logo/icon with the insName', 'AppShell')}:${portalLogo}`); + }); + } + this.appName$ = this.localizedVal(appNameToDisplay || '', '', `${portalClass}!PORTAL!${envPortalName}`.toUpperCase()); } // fpr show/hiding error messages in the SnackBar component @@ -156,7 +194,7 @@ export class AppShellComponent implements OnInit, OnDestroy { switch (errorMessages.action) { case 'update': // won't show unless publish is turned on - // eslint-disable-next-line @typescript-eslint/prefer-includes + if (this.sErrorMessages.indexOf(errorMessages.actionMessage) < 0) { this.sErrorMessages = this.sErrorMessages.concat(errorMessages.actionMessage).concat('\n'); @@ -169,7 +207,7 @@ export class AppShellComponent implements OnInit, OnDestroy { case 'show': // add error message if not in the list // won't show unless publish is turned on - // eslint-disable-next-line @typescript-eslint/prefer-includes + if (this.sErrorMessages.indexOf(errorMessages.actionMessage) < 0) { this.sErrorMessages = this.sErrorMessages.concat(errorMessages.actionMessage).concat('\n'); } diff --git a/packages/angular-sdk-components/src/lib/_components/template/banner-page/banner-page.component.ts b/packages/angular-sdk-components/src/lib/_components/template/banner-page/banner-page.component.ts index da86a9ef..911eb81c 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/banner-page/banner-page.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/banner-page/banner-page.component.ts @@ -16,7 +16,6 @@ interface BannerPageProps { selector: 'app-banner-page', templateUrl: './banner-page.component.html', styleUrls: ['./banner-page.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class BannerPageComponent implements OnInit, OnChanges { diff --git a/packages/angular-sdk-components/src/lib/_components/template/case-summary/case-summary.component.scss b/packages/angular-sdk-components/src/lib/_components/template/case-summary/case-summary.component.scss index ab5167ca..1e898168 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/case-summary/case-summary.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/template/case-summary/case-summary.component.scss @@ -30,8 +30,6 @@ } .psdk-status { - background-color: var(--app-primary-color); - color: var(--app-form-color); padding: 0; margin-top: 0.625rem; width: fit-content; diff --git a/packages/angular-sdk-components/src/lib/_components/template/case-summary/case-summary.component.ts b/packages/angular-sdk-components/src/lib/_components/template/case-summary/case-summary.component.ts index 49c7fd59..2cb2daa7 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/case-summary/case-summary.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/case-summary/case-summary.component.ts @@ -3,6 +3,7 @@ import { FormGroup } from '@angular/forms'; import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; import { ReferenceComponent } from '../../infra/reference/reference.component'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; +import { Utils } from '../../../_helpers/utils'; interface CaseSummaryProps { // If any, enter additional props that only exist on this component @@ -16,7 +17,6 @@ interface CaseSummaryProps { selector: 'app-case-summary', templateUrl: './case-summary.component.html', styleUrls: ['./case-summary.component.scss'], - standalone: true, imports: [forwardRef(() => ComponentMapperComponent)] }) export class CaseSummaryComponent implements OnInit, OnDestroy, OnChanges { @@ -33,7 +33,10 @@ export class CaseSummaryComponent implements OnInit, OnDestroy, OnChanges { primaryFields$: any[] = []; secondaryFields$: any[] = []; - constructor(private angularPConnect: AngularPConnectService) {} + constructor( + private angularPConnect: AngularPConnectService, + private utils: Utils + ) {} ngOnInit(): void { // First thing in initialization is registering and subscribing to the AngularPConnect service @@ -101,30 +104,11 @@ export class CaseSummaryComponent implements OnInit, OnDestroy, OnChanges { }); } - prepareComponentInCaseSummary(pConnectMeta, getPConnect) { - const { config, children } = pConnectMeta; - const pConnect = getPConnect(); - - const caseSummaryComponentObject: any = {}; - - const { type } = pConnectMeta; - const createdComponent = pConnect.createComponent({ - type, - children: children ? [...children] : [], - config: { - ...config - } - }); - - caseSummaryComponentObject.value = createdComponent; - return caseSummaryComponentObject; - } - prepareCaseSummaryData(summaryFieldChildren) { const convertChildrenToSummaryData = kid => { return kid?.map((childItem, index) => { const childMeta = childItem.getPConnect().meta; - const caseSummaryComponentObject = this.prepareComponentInCaseSummary(childMeta, childItem.getPConnect); + const caseSummaryComponentObject = this.utils.prepareComponentInCaseSummary(childMeta, childItem.getPConnect); caseSummaryComponentObject.id = index + 1; return caseSummaryComponentObject; }); diff --git a/packages/angular-sdk-components/src/lib/_components/template/case-view/case-view.component.html b/packages/angular-sdk-components/src/lib/_components/template/case-view/case-view.component.html index 82f3cfcd..0db027fb 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/case-view/case-view.component.html +++ b/packages/angular-sdk-components/src/lib/_components/template/case-view/case-view.component.html @@ -1,7 +1,7 @@
- - + +
@@ -73,8 +73,8 @@

{{ heading$ }}

-
- +
+
diff --git a/packages/angular-sdk-components/src/lib/_components/template/case-view/case-view.component.scss b/packages/angular-sdk-components/src/lib/_components/template/case-view/case-view.component.scss index cc69b85c..96a58726 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/case-view/case-view.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/template/case-view/case-view.component.scss @@ -27,7 +27,7 @@ h1 { } .psdk-case-icon-div { - background-color: var(--app-primary-dark-color); + background-color: var(--mat-sys-on-primary-fixed); border-radius: 1rem; padding: 0.5rem 0.3rem 0.3rem 0.3rem; } @@ -47,11 +47,9 @@ h1 { flex: 0 0 auto; width: 25rem; float: left; - padding: 0rem 0.3125rem 0rem 0rem; - margin-left: 0.5rem; - margin-top: 0.5rem; - height: 100%; /* Should be removed. Only for demonstration */ - background-color: var(--app-form-color); + // padding: 0rem 0.3125rem 0rem 0rem; + background-color: var(--mat-sys-surface-container); + height: 100%; } .psdk-case-view-main { @@ -84,24 +82,34 @@ h1 { } .psdk-case-view-utilities { + background-color: var(--mat-sys-surface-container); width: 21.875rem; float: left; padding: 0rem 0.3125rem; - height: 100%; /* Should be removed. Only for demonstration */ } .psdk-case-view-divider { - border-bottom: 0.0625rem solid var(--app-neutral-light-color); + border-bottom: 0.0625rem solid var(--mat-sys-outline-variant); } .psdk-status { padding: 0.3125rem 0.3125rem; - background-color: var(--app-primary-color); - color: var(--app-form-color); + background-color: var(--mat-sys-primary); + color: var(--mat-sys-surface-container); width: fit-content; margin: 0.625rem; } +.psdk-case-view-toolbar { + background-color: var(--mat-sys-primary); +} + button { margin: 0rem 0.3125rem; } + +.psdk-case-view-toolbar-row { + padding-left: 1rem; + white-space: normal; + height: auto; +} diff --git a/packages/angular-sdk-components/src/lib/_components/template/case-view/case-view.component.ts b/packages/angular-sdk-components/src/lib/_components/template/case-view/case-view.component.ts index 427c7d5d..92fbfa87 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/case-view/case-view.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/case-view/case-view.component.ts @@ -21,7 +21,6 @@ interface CaseViewProps { templateUrl: './case-view.component.html', styleUrls: ['./case-view.component.scss'], providers: [Utils], - standalone: true, imports: [CommonModule, MatToolbarModule, MatButtonModule, MatMenuModule, forwardRef(() => ComponentMapperComponent)] }) export class CaseViewComponent implements OnInit, OnDestroy { @@ -50,7 +49,6 @@ export class CaseViewComponent implements OnInit, OnDestroy { caseSummaryPConn$: any; currentCaseID = ''; editAction: boolean; - bHasNewAttachments = false; localizedVal: any; localeCategory = 'CaseView'; localeKey: string; @@ -114,14 +112,6 @@ export class CaseViewComponent implements OnInit, OnDestroy { updateHeaderAndSummary() { this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as CaseViewProps; - const hasNewAttachments = this.pConn$.getDataObject().caseInfo?.hasNewAttachments; - - if (hasNewAttachments !== this.bHasNewAttachments) { - this.bHasNewAttachments = hasNewAttachments; - if (this.bHasNewAttachments) { - PCore.getPubSubUtils().publish(PCore.getEvents().getCaseEvent().CASE_ATTACHMENTS_UPDATED_FROM_CASEVIEW, true); - } - } const kids = this.pConn$.getChildren() as any[]; for (const kid of kids) { @@ -135,7 +125,7 @@ export class CaseViewComponent implements OnInit, OnDestroy { const timer = interval(100).subscribe(() => { timer.unsubscribe(); - this.heading$ = PCore.getLocaleUtils().getLocaleValue(this.configProps$.header, '', this.localeKey); + this.heading$ = this.pConn$.getLocalizationService().getLocalizedText(this.configProps$.header); this.id$ = this.configProps$.subheader; this.status$ = this.pConn$.getValue('.pyStatusWork'); }); diff --git a/packages/angular-sdk-components/src/lib/_components/template/confirmation/confirmation.component.html b/packages/angular-sdk-components/src/lib/_components/template/confirmation/confirmation.component.html index 88ee732d..14509e92 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/confirmation/confirmation.component.html +++ b/packages/angular-sdk-components/src/lib/_components/template/confirmation/confirmation.component.html @@ -1,7 +1,7 @@

{{ label }}

-
+
diff --git a/packages/angular-sdk-components/src/lib/_components/template/confirmation/confirmation.component.ts b/packages/angular-sdk-components/src/lib/_components/template/confirmation/confirmation.component.ts index 07f02062..8ad4b196 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/confirmation/confirmation.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/confirmation/confirmation.component.ts @@ -18,7 +18,6 @@ interface ConfirmationProps { selector: 'app-confirmation', templateUrl: './confirmation.component.html', styleUrls: ['./confirmation.component.scss'], - standalone: true, imports: [CommonModule, MatButtonModule, forwardRef(() => ComponentMapperComponent)] }) export class ConfirmationComponent implements OnInit, OnDestroy { diff --git a/packages/angular-sdk-components/src/lib/_components/template/data-reference/data-reference.component.html b/packages/angular-sdk-components/src/lib/_components/template/data-reference/data-reference.component.html index 1436efea..44661228 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/data-reference/data-reference.component.html +++ b/packages/angular-sdk-components/src/lib/_components/template/data-reference/data-reference.component.html @@ -1,13 +1,16 @@ -
-
-
- -
-
+
+ +
+
- +
-
+
+
+ +
+
+ diff --git a/packages/angular-sdk-components/src/lib/_components/template/data-reference/data-reference.component.ts b/packages/angular-sdk-components/src/lib/_components/template/data-reference/data-reference.component.ts index 87c23306..715dc013 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/data-reference/data-reference.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/data-reference/data-reference.component.ts @@ -3,6 +3,10 @@ import { CommonModule } from '@angular/common'; import { FormGroup } from '@angular/forms'; import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; +import { getMappedKey } from '../advanced-search/search-group/persist-utils'; +import { componentCachePersistUtils } from '../advanced-search/search-group/persist-utils'; +import { getFirstChildConfig } from '../data-reference/utils'; +import { DataReferenceAdvancedSearchService } from '../../../_services/data-reference-advanced-search.service'; const SELECTION_MODE = { SINGLE: 'single', MULTI: 'multi' }; @@ -10,7 +14,6 @@ const SELECTION_MODE = { SINGLE: 'single', MULTI: 'multi' }; selector: 'app-data-reference', templateUrl: './data-reference.component.html', styleUrls: ['./data-reference.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class DataReferenceComponent implements OnInit, OnDestroy { @@ -39,46 +42,71 @@ export class DataReferenceComponent implements OnInit, OnDestroy { displaySingleRef: boolean; displayMultiRef: boolean; refList: any; + displayAs: any; + isDDSourceDeferred: any; + showPromotedFilters: any; + displayMode: any; + refFieldMetadata: any; + contextClass: any; + selectionList: any; + inline: any; + isCreationOfNewRecordAllowedForReference: any; + showAdvancedSearch: boolean; + pyID: any; + allowImplicitRefresh: any; + displayChild = false; + dataRelationshipContext: any; + imagePosition: any; + showImageDescription: any; - constructor(private angularPConnect: AngularPConnectService) {} + constructor( + private angularPConnect: AngularPConnectService, + private advancedSearchService: DataReferenceAdvancedSearchService + ) {} ngOnInit(): void { // First thing in initialization is registering and subscribing to the AngularPConnect service this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); this.children = this.pConn$.getChildren(); this.updateSelf(); - if (this.firstChildMeta?.type === 'Dropdown' && this.rawViewMetadata.config?.parameters) { + + if ( + this.rawViewMetadata.config?.parameters && + !this.isDDSourceDeferred && + ['Checkbox', 'Dropdown', 'RadioButtons'].includes(this.firstChildMeta?.type) + ) { const { value, key, text } = this.firstChildMeta.config.datasource.fields; - PCore.getDataApiUtils() - .getData( - this.refList, - { + + if (this.firstChildMeta.config.variant !== 'card' || this.firstChildMeta.config.variant === 'card') { + PCore.getDataApiUtils() + .getData(this.refList, { dataViewParameters: this.parameters - }, - '' - ) - .then(res => { - if (res.data.data !== null) { - const ddDataSource = res.data.data - .map(listItem => ({ - key: listItem[key.split(' .', 2)[1]], - text: listItem[text.split(' .', 2)[1]], - value: listItem[value.split(' .', 2)[1]] - })) - .filter(item => item.key); - // Filtering out undefined entries that will break preview - this.dropDownDataSource = ddDataSource; - this.updateSelf(); - } else { - const ddDataSource: any = []; - this.dropDownDataSource = ddDataSource; - } - }) - .catch(() => { - return Promise.resolve({ - data: { data: [] } + }) + .then(res => { + if (res.data.data !== null) { + const ddDataSource = this.firstChildMeta.config.datasource.filterDownloadedFields + ? res.data.data + : res.data.data + .map(listItem => ({ + key: listItem[key.split(' .', 2)[1]], + text: listItem[text.split(' .', 2)[1]], + value: listItem[value.split(' .', 2)[1]] + })) + .filter(item => item.key); // Filtering out undefined entries + this.dropDownDataSource = ddDataSource; + this.updateSelf(); + } else { + const ddDataSource: any = []; + this.dropDownDataSource = ddDataSource; + } + }) + .catch(err => { + console.error(err?.stack); + return Promise.resolve({ + data: { data: [] } + }); }); - }); + } } } @@ -105,47 +133,59 @@ export class DataReferenceComponent implements OnInit, OnDestroy { const theConfigProps = this.pConn$.getConfigProps(); this.updatePropertiesFromProps(theConfigProps); - const displayAs = theConfigProps.displayAs; - const displayMode = theConfigProps.displayMode; + const { displayAs, displayMode } = theConfigProps; this.rawViewMetadata = this.pConn$.getRawMetadata(); this.viewName = this.rawViewMetadata.name; this.firstChildMeta = this.rawViewMetadata.children[0]; this.refList = this.rawViewMetadata.config.referenceList; - this.canBeChangedInReviewMode = theConfigProps.allowAndPersistChangesInReviewMode && (displayAs === 'autocomplete' || displayAs === 'dropdown'); - // this.childrenToRender = this.children; + this.dataRelationshipContext = + this.rawViewMetadata.config.contextClass && this.rawViewMetadata.config.name ? this.rawViewMetadata.config.name : null; + this.canBeChangedInReviewMode = theConfigProps.allowAndPersistChangesInReviewMode && ['autocomplete', 'dropdown'].includes(displayAs); this.isDisplayModeEnabled = ['DISPLAY_ONLY', 'STACKED_LARGE_VAL'].includes(displayMode); + this.refFieldMetadata = this.pConn$.getFieldMetadata(this.rawViewMetadata?.config?.authorContext); + this.pyID = getMappedKey('pyID'); + // @ts-ignore + const { allowImplicitRefresh } = PCore.getFieldDefaultUtils().fieldDefaults?.DataReference || {}; - if (this.firstChildMeta?.type !== 'Region') { - this.firstChildPConnect = this.pConn$.getChildren()[0].getPConnect; + this.allowImplicitRefresh = allowImplicitRefresh; + this.isDDSourceDeferred = + (this.firstChildMeta?.type === 'Dropdown' && this.selectionMode === SELECTION_MODE.SINGLE && this.refFieldMetadata?.descriptors) || + this.firstChildMeta.config.deferDatasource; - /* remove refresh When condition from those old view so that it will not be used for runtime */ - if (this.firstChildMeta.config?.readOnly) { - delete this.firstChildMeta.config.readOnly; - } - if (this.firstChildMeta?.type === 'Dropdown') { - this.firstChildMeta.config.datasource.source = this.rawViewMetadata.config?.parameters - ? this.dropDownDataSource - : '@DATASOURCE '.concat(this.refList).concat('.pxResults'); - } else if (this.firstChildMeta?.type === 'AutoComplete') { - this.firstChildMeta.config.datasource = this.refList; - - /* Insert the parameters to the component only if present */ - if (this.rawViewMetadata.config?.parameters) { - this.firstChildMeta.config.parameters = this.parameters; - } - } - // set displayMode conditionally - if (!this.canBeChangedInReviewMode) { - this.firstChildMeta.config.displayMode = displayMode; - } - if (this.firstChildMeta.type === 'SimpleTableSelect' && this.selectionMode === SELECTION_MODE.MULTI) { - this.propName = PCore.getAnnotationUtils().getPropertyName(this.firstChildMeta.config.selectionList); - } else { - this.propName = PCore.getAnnotationUtils().getPropertyName(this.firstChildMeta.config.value); - } + if (this.firstChildMeta?.type === 'Region') { + return; + } + + this.firstChildPConnect = this.pConn$.getChildren()[0].getPConnect; - this.generateChildrenToRender(); + /* remove refresh When condition from those old view so that it will not be used for runtime */ + if (this.firstChildMeta.config?.readOnly) { + delete this.firstChildMeta.config.readOnly; + } + if (this.firstChildMeta?.type === 'Dropdown') { + this.firstChildMeta.config.datasource.source = this.rawViewMetadata.config?.parameters + ? this.dropDownDataSource + : '@DATASOURCE '.concat(this.refList).concat('.pxResults'); + } else if (this.firstChildMeta?.type === 'AutoComplete') { + this.firstChildMeta.config.datasource = this.refList; + + /* Insert the parameters to the component only if present */ + if (this.rawViewMetadata.config?.parameters) { + this.firstChildMeta.config.parameters = this.parameters; + } + } + // set displayMode conditionally + if (!this.canBeChangedInReviewMode) { + this.firstChildMeta.config.displayMode = displayMode; + } + if (this.firstChildMeta.type === 'SimpleTableSelect' && this.selectionMode === SELECTION_MODE.MULTI) { + this.propName = PCore.getAnnotationUtils().getPropertyName(this.firstChildMeta.config.selectionList); + } else { + this.propName = PCore.getAnnotationUtils().getPropertyName(this.firstChildMeta.config.value); } + + this.generateChildrenToRender(); + this.displayChild = !(this.displaySingleRef || this.displayMultiRef); } updatePropertiesFromProps(theConfigProps) { @@ -155,38 +195,81 @@ export class DataReferenceComponent implements OnInit, OnDestroy { this.selectionMode = theConfigProps.selectionMode; this.parameters = theConfigProps.parameters; this.hideLabel = theConfigProps.hideLabel; - + this.displayAs = theConfigProps.displayAs; + this.showPromotedFilters = theConfigProps.showPromotedFilters; + this.displayMode = theConfigProps.displayMode; this.propsToUse = { label, showLabel, ...this.pConn$.getInheritedProps() }; + this.contextClass = theConfigProps.contextClass; + this.selectionList = theConfigProps.selectionList; + this.inline = theConfigProps.inline; + this.isCreationOfNewRecordAllowedForReference = theConfigProps.isCreationOfNewRecordAllowedForReference; if (this.propsToUse.showLabel === false) { this.propsToUse.label = ''; } + this.imagePosition = theConfigProps.imagePosition; + this.showImageDescription = theConfigProps.showImageDescription; } generateChildrenToRender() { const theRecreatedFirstChild = this.recreatedFirstChild(); - const viewsRegion = this.rawViewMetadata.children[1]; - if (viewsRegion?.name === 'Views' && viewsRegion.children.length) { - this.childrenToRender = [theRecreatedFirstChild, ...this.children.slice(1)]; - } else { + if (this.firstChildMeta?.type !== 'Region') { + const viewsRegion = this.rawViewMetadata.children[1]; + + if (viewsRegion?.name === 'Views' && viewsRegion.children.length) { + viewsRegion.children.map(child => { + child.config.isEmbeddedInDataReference = true; + return child; + }); + this.childrenToRender = [theRecreatedFirstChild, ...this.children.slice(1)]; + } else { + this.childrenToRender = [theRecreatedFirstChild]; + } + } else if (this.displayAs === 'advancedSearch') { this.childrenToRender = [theRecreatedFirstChild]; } + + // Render + if (this.childrenToRender.length === 1) { + return this.childrenToRender[0] ?? null; + } } handleSelection(event) { const caseKey = this.pConn$.getCaseInfo().getKey(); - const refreshOptions = { autoDetectRefresh: true }; - if (this.canBeChangedInReviewMode && this.pConn$.getValue('__currentPageTabViewName')) { - this.pConn$.getActionsApi().refreshCaseView(caseKey, this.pConn$.getValue('__currentPageTabViewName'), '', refreshOptions); - PCore.getDeferLoadManager().refreshActiveComponents(this.pConn$.getContextName()); - } else { - const pgRef = this.pConn$.getPageReference().replace('caseInfo.content', ''); - this.pConn$.getActionsApi().refreshCaseView(caseKey, this.viewName, pgRef, refreshOptions); + const refreshOptions: any = { autoDetectRefresh: true, propertyName: '' }; + + if ((this.pConn$?.getRawMetadata()?.children as Array)?.length > 0 && this.pConn$?.getRawMetadata()?.children?.[0].config?.value) { + refreshOptions.propertyName = this.pConn$?.getRawMetadata()?.children?.[0].config.value; + refreshOptions.classID = (this.pConn$.getRawMetadata() as any).classID; } - // AutoComplete sets value on event.id whereas Dropdown sets it on event.target.value + // AutoComplete sets value on event.id whereas Dropdown sets it on event.target.value if event.id is unset + // When value is empty propValue will be undefined here and no value will be set for the reference const propValue = event?.id || event?.target?.value; - if (propValue && this.canBeChangedInReviewMode && this.isDisplayModeEnabled) { - PCore.getDataApiUtils() + const propName = + this.firstChildMeta.type === 'SimpleTableSelect' && this.selectionMode === SELECTION_MODE.MULTI + ? PCore.getAnnotationUtils().getPropertyName(this.firstChildMeta.config.selectionList) + : PCore.getAnnotationUtils().getPropertyName(this.firstChildMeta.config.value); + + const hasAssociatedViewConfigured = this.rawViewMetadata.children[1].children?.length; + + if (this.pConn$.getContextName().includes('modal') || this.pConn$.getContextName().includes('workarea')) { + if (hasAssociatedViewConfigured || this.allowImplicitRefresh) { + const pageReference = this.pConn$.getPageReference(); + let pgRef: any = null; + if (pageReference.startsWith('objectInfo')) { + pgRef = pageReference.replace('objectInfo.content', ''); + } else { + pgRef = pageReference.replace('caseInfo.content', ''); + } + const viewName = this.rawViewMetadata.name; + this.pConn$ + .getActionsApi() + .refreshCaseView(caseKey, viewName, pgRef, refreshOptions) + .catch(() => {}); + } + } else if (propValue && this.canBeChangedInReviewMode && this.isDisplayModeEnabled) { + PCore.getCaseUtils() .getCaseEditLock(caseKey, '') .then(caseResponse => { const pageTokens = this.pConn$.getPageReference().replace('caseInfo.content', '').split('.'); @@ -201,7 +284,7 @@ export class DataReferenceComponent implements OnInit, OnDestroy { }); // expecting format like {Customer: {pyID:"C-100"}} - const propArr = this.propName.split('.'); + const propArr = propName.split('.'); propArr.forEach((element, idx) => { if (idx + 1 === propArr.length) { curr[element] = propValue; @@ -221,49 +304,199 @@ export class DataReferenceComponent implements OnInit, OnDestroy { } } - // Re-create first child with overridden props - // Memoized child in order to stop unmount and remount of the child component when data reference - // rerenders without any actual change recreatedFirstChild() { - const { type, config } = this.firstChildMeta; - if (this.firstChildMeta?.type !== 'Region') { - this.pConn$.clearErrorMessages({ - property: this.propName, - category: '', - context: '' + if (this.firstChildMeta?.type === 'Region' && this.displayAs !== 'advancedSearch') { + return; + } + const { type } = this.firstChildMeta; + this.firstChildPConnect = this.pConn$.getChildren()[0].getPConnect; + + this.setReadOnlyDisplayFlags(); + + if (type === 'Dropdown' && this.dropDownDataSource === null && !this.isDDSourceDeferred && this.rawViewMetadata.config?.parameters) { + return null; + } + + this.prepareFirstChildMeta(); + + const dataReferenceConfigToChild = this.buildDataReferenceConfig(); + const { disableStartingFieldsForReference = false } = PCore.getEnvironmentInfo().environmentInfoObject?.features?.form || ({} as any); + + if (this.displayAs === 'advancedSearch') { + this.showAdvancedSearch = true; + const searchSelectCacheKey = componentCachePersistUtils.getComponentStateKey(this.pConn$, this.rawViewMetadata.config.name); + this.advancedSearchService.setConfig({ + dataReferenceConfigToChild, + isCreateNewReferenceEnabled: !!dataReferenceConfigToChild.createNewRecord, + disableStartingFieldsForReference, + pyID: this.pyID, + searchSelectCacheKey }); - if (!this.canBeChangedInReviewMode && this.isDisplayModeEnabled && this.selectionMode === SELECTION_MODE.SINGLE) { - this.displaySingleRef = true; + return; + } + + return this.firstChildPConnect().createComponent({ + type, + config: { + ...getFirstChildConfig({ + firstChildMeta: this.firstChildMeta, + getPConnect: this.pConn$, + rawViewMetadata: this.rawViewMetadata, + contextClass: this.contextClass, + dataReferenceConfigToChild, + isCreateNewReferenceEnabled: !!dataReferenceConfigToChild.createNewRecord, + disableStartingFieldsForReference, + pyID: this.pyID + }) } + }); + } + + private setReadOnlyDisplayFlags() { + const isSingleMode = this.selectionMode === SELECTION_MODE.SINGLE; + const isMultiMode = this.selectionMode === SELECTION_MODE.MULTI; + + if (isSingleMode && (this.displayAs === 'readonly' || this.isDisplayModeEnabled) && !this.canBeChangedInReviewMode) { + this.displaySingleRef = true; + } + + if (isMultiMode && (['readonly', 'readonlyMulti', 'map'].includes(this.displayAs) || this.isDisplayModeEnabled)) { + this.displayMultiRef = true; + } + } + + private prepareFirstChildMeta() { + // Cleanup + if (this.firstChildMeta.config?.readOnly) { + delete this.firstChildMeta.config.readOnly; + } + + // Set datasource + this.setChildDatasource(); - if (this.isDisplayModeEnabled && this.selectionMode === SELECTION_MODE.MULTI) { - this.displayMultiRef = true; + // Pass through configs + if (this.firstChildMeta.config) { + this.firstChildMeta.config.showPromotedFilters = this.showPromotedFilters; + if (!this.canBeChangedInReviewMode) { + this.firstChildMeta.config.displayMode = this.displayMode; } + } + } + + private setChildDatasource() { + const { type, config } = this.firstChildMeta; + + if (['Dropdown', 'Checkbox', 'RadioButtons'].includes(type) && !config.deferDatasource && config.datasource) { + const isCardVariant = config.variant === 'card'; + const hasParameters = this.rawViewMetadata.config?.parameters; + // @ts-ignore + const isDeferDataPageCallEnabled = isCardVariant && hasParameters && !this.firstChildPConnect()?.getSharedDataPageForReferenceList(); + + const useDropDownDataSource = (isCardVariant && (this.dropDownDataSource || isDeferDataPageCallEnabled)) || (!isCardVariant && hasParameters); - // In the case of a datasource with parameters you cannot load the dropdown before the parameters - if (type === 'Dropdown' && this.rawViewMetadata.config?.parameters && this.dropDownDataSource === null) { - return null; + config.datasource.source = useDropDownDataSource ? this.dropDownDataSource : `@DATASOURCE ${this.refList}.pxResults`; + if (isCardVariant) { + config.imagePosition = this.imagePosition; + config.showImageDescription = this.showImageDescription; } + } else if (type === 'AutoComplete') { + config.datasource = this.refList; + if (this.rawViewMetadata.config?.parameters) { + config.parameters = this.parameters; + } + } + } - return this.firstChildPConnect().createComponent({ - type, - config: { - ...config, - required: this.propsToUse.required, - visibility: this.propsToUse.visibility, - disabled: this.propsToUse.disabled, - label: this.propsToUse.label, - viewName: this.pConn$.getCurrentView(), - parameters: this.rawViewMetadata.config.parameters, - readOnly: false, - localeReference: this.rawViewMetadata.config.localeReference, - ...(this.selectionMode === SELECTION_MODE.SINGLE ? { referenceType: this.referenceType } : ''), - dataRelationshipContext: - this.rawViewMetadata.config.contextClass && this.rawViewMetadata.config.name ? this.rawViewMetadata.config.name : null, - hideLabel: this.hideLabel, - onRecordChange: this.handleSelection.bind(this) + private buildDataReferenceConfig() { + const fieldMetaData = this.buildFieldMetaData(); + const isCreateNewReferenceEnabled = this.isCreateNewRecordEnabled(); + + const config: any = { + selectionMode: this.selectionMode, + additionalInfo: this.refFieldMetadata?.additionalInformation ? { content: this.refFieldMetadata.additionalInformation } : undefined, + descriptors: this.selectionMode === SELECTION_MODE.SINGLE ? this.refFieldMetadata?.descriptors : null, + datasourceMetadata: fieldMetaData?.datasourceMetadata, + required: this.propsToUse.required, + visibility: this.propsToUse.visibility, + disabled: this.propsToUse.disabled, + label: this.propsToUse.label, + displayAs: this.displayAs, + readOnly: false, + dataRelationshipContext: this.dataRelationshipContext, + hideLabel: this.hideLabel, + onRecordChange: this.handleSelection.bind(this), + createNewRecord: isCreateNewReferenceEnabled ? this.getCreateNewRecordFn() : undefined, + inline: this.inline + }; + + if (this.selectionMode === SELECTION_MODE.SINGLE) { + config.referenceType = this.referenceType; + if (this.displayAs === 'advancedSearch') { + config.value = this.rawViewMetadata.config.value; + config.contextPage = this.rawViewMetadata.config.contextPage; + } + } else if (this.displayAs === 'advancedSearch') { + config.selectionList = this.selectionList; + config.readonlyContextList = this.rawViewMetadata.config.readonlyContextList; + } + + return config; + } + + private buildFieldMetaData() { + if (!this.isDDSourceDeferred || this.firstChildMeta.config.deferDatasource) { + return null; + } + + const { text, value } = this.firstChildMeta?.config?.datasource?.fields || {}; + const getProp = (prop: string) => (prop?.startsWith('@P') ? prop.substring(3) : prop); + + const fieldMetaData = { + datasourceMetadata: { + ...this.refFieldMetadata, + datasource: { + name: this.rawViewMetadata.config?.referenceList, + propertyForDisplayText: getProp(text), + propertyForValue: getProp(value) } - }); + } + }; + + if (this.rawViewMetadata.config?.parameters) { + fieldMetaData.datasourceMetadata.datasource['parameters'] = this.parameters; } + + return fieldMetaData; + } + + private isCreateNewRecordEnabled() { + const { features } = (PCore.getEnvironmentInfo().environmentInfoObject || {}) as any; + const isEnvLP = features?.form; + const isCreateNewRefEnabledInAuthoring = this.isCreationOfNewRecordAllowedForReference ?? isEnvLP?.isCreateNewReferenceEnabled; + const isCaseRef = this.referenceType === 'Case' || this.firstChildMeta?.config?.referenceType === 'Case'; + const hasAccess = PCore.getAccessPrivilege().hasCreateAccess(this.contextClass); + const isCreateNewRefEnabledForUser = isEnvLP ? isEnvLP.isCreateNewReferenceEnabled && hasAccess : isCaseRef; + + return isCreateNewRefEnabledInAuthoring && isCreateNewRefEnabledForUser; + } + + private getCreateNewRecordFn() { + const { disableStartingFieldsForReference = false } = PCore.getEnvironmentInfo().environmentInfoObject?.features?.form || ({} as any); + const isCaseRef = this.referenceType === 'Case' || this.firstChildMeta?.config?.referenceType === 'Case'; + + return () => { + if (isCaseRef) { + const startingFields: any = {}; + if (!disableStartingFieldsForReference) { + startingFields.pyAddCaseContextPage = { pyID: this.pConn$.getCaseInfo().getKey()?.split(' ')?.pop() }; + } + return this.pConn$.getActionsApi().createWork(this.contextClass, { + openCaseViewAfterCreate: false, + startingFields + }); + } + // Assumes Data reference type otherwise + return getPConnect().getActionsApi().showDataObjectCreateView(this.contextClass); + }; } } diff --git a/packages/angular-sdk-components/src/lib/_components/template/data-reference/search-form/search-form.component.html b/packages/angular-sdk-components/src/lib/_components/template/data-reference/search-form/search-form.component.html new file mode 100644 index 00000000..6d36b7c2 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/data-reference/search-form/search-form.component.html @@ -0,0 +1,39 @@ +
+
{{ propsToUse.label }}
+
+ + + {{ tab.name }} + + +
+
+ + {{ tab.name }} + +
+ + +
+
+
+ +
+
+
+ + +

Discard selections?

+ +

When changing search categories, any previous selections will be lost.

+
+ + + + +
+
diff --git a/packages/angular-sdk-components/src/lib/_components/template/data-reference/search-form/search-form.component.scss b/packages/angular-sdk-components/src/lib/_components/template/data-reference/search-form/search-form.component.scss new file mode 100644 index 00000000..da91d5d8 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/data-reference/search-form/search-form.component.scss @@ -0,0 +1,11 @@ +.psdk-full-width { + width: 100%; +} + +::ng-deep { + mat-tab-group { + .mat-mdc-tab-header .mat-mdc-tab-label-container .mat-mdc-tab-list { + display: none; + } + } +} diff --git a/packages/angular-sdk-components/src/lib/_components/template/data-reference/search-form/search-form.component.spec.ts b/packages/angular-sdk-components/src/lib/_components/template/data-reference/search-form/search-form.component.spec.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/angular-sdk-components/src/lib/_components/template/data-reference/search-form/search-form.component.ts b/packages/angular-sdk-components/src/lib/_components/template/data-reference/search-form/search-form.component.ts new file mode 100644 index 00000000..ab9e6067 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/data-reference/search-form/search-form.component.ts @@ -0,0 +1,167 @@ +import { Component, forwardRef, Input, OnChanges, OnInit, TemplateRef, ViewChild } from '@angular/core'; +import { FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { getFirstVisibleTabId, getActiveTabId, searchtabsClick } from '../../../../_helpers/tab-utils'; +import { MatRadioModule } from '@angular/material/radio'; +import { CommonModule } from '@angular/common'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatOptionModule } from '@angular/material/core'; +import { MatSelectModule } from '@angular/material/select'; +import { MatTabsModule } from '@angular/material/tabs'; +import { MatButtonModule } from '@angular/material/button'; +import { MatDialog, MatDialogModule, MatDialogActions, MatDialogContent, MatDialogTitle } from '@angular/material/dialog'; +import { ComponentMapperComponent } from '../../../../_bridge/component-mapper/component-mapper.component'; +import { getTabCountSources, getData } from './tabsData'; +import { getFieldMeta } from '../utils'; + +@Component({ + selector: 'app-search-form', + templateUrl: './search-form.component.html', + styleUrls: ['./search-form.component.scss'], + imports: [ + CommonModule, + ReactiveFormsModule, + MatFormFieldModule, + MatRadioModule, + MatOptionModule, + MatSelectModule, + MatTabsModule, + MatDialogModule, + MatDialogActions, + MatDialogContent, + MatDialogTitle, + MatButtonModule, + forwardRef(() => ComponentMapperComponent) + ] +}) +export class SearchFormComponent implements OnInit, OnChanges { + @Input() pConn$: typeof PConnect; + @Input() formGroup$: FormGroup; + @Input() searchSelectCacheKey; + + configProps$: any; + isInitialized = false; + + currentTabId: string; + nextTabId: string; + openDialog = false; + tabItems: any[] = []; + searchCategoriesComp: any; + propsToUse: any; + tabData: any = []; + tabCountSources: any; + deferLoadedTabs: any; + @ViewChild('dialogTemplate') dialogTemplate!: TemplateRef; + dialogRef: any; + constructor(private dialog: MatDialog) {} + + ngOnInit(): void { + this.isInitialized = true; + this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()); + this.propsToUse = { ...this.pConn$.getInheritedProps() }; + this.deferLoadedTabs = this.pConn$.getChildren()[2]; + const cache: any = PCore.getNavigationUtils().getComponentCache(this.searchSelectCacheKey) ?? {}; + const { selectedCategory } = cache; + const firstTabId = getFirstVisibleTabId(this.deferLoadedTabs, selectedCategory); + this.currentTabId = getActiveTabId(this.deferLoadedTabs.getPConnect().getChildren(), firstTabId); + this.updateSelf(); + } + + ngOnChanges() { + if (this.isInitialized) { + this.updateSelf(); + } + } + + // updateSelf + updateSelf(): void { + this.tabCountSources = getTabCountSources(this.deferLoadedTabs); + this.tabData = getData(this.deferLoadedTabs, this.tabCountSources, this.currentTabId, this.tabData); + this.tabItems = this.tabData?.filter(tab => tab.visibility()) || []; + this.initializeSearchCategories(); + } + + initializeSearchCategories(): void { + if (this.tabItems.length >= 3) { + this.searchCategoriesComp = 'dropdown'; + } else if (this.tabItems.length > 1) { + this.searchCategoriesComp = 'radio'; + } + } + + handleTabClick(event) { + const tabId = event.target.value; + const viewName = this.tabData + .find((tab: any) => tab.id === this.currentTabId) + ?.getPConnect() + .getConfigProps().name; + + if (this.checkIfSelectionsExist(this.pConn$)) { + event.preventDefault(); + this.nextTabId = tabId; + this.dialogRef = this.dialog.open(this.dialogTemplate, { + width: '400px' + }); + } else { + // @ts-ignore + this.publishEvent({ viewName, tabId }); + this.currentTabId = tabId; + this.tabData = getData(this.deferLoadedTabs, this.tabCountSources, this.currentTabId, this.tabData); + this.tabItems = this.tabData?.filter(tab => tab.visibility()) || []; + } + } + + clearSelectionAndSwitchTab(): void { + const viewName = this.tabItems + .find((tab: any) => tab.id === this.currentTabId) + .getPConnect() + .getConfigProps().name; + + this.publishEvent({ clearSelections: true, viewName }); + searchtabsClick(this.nextTabId, this.tabData, this.currentTabId); + this.onDialogClose(); + this.currentTabId = this.nextTabId; + this.tabData = getData(this.deferLoadedTabs, this.tabCountSources, this.currentTabId, this.tabData); + this.tabItems = this.tabData?.filter(tab => tab.visibility()) || []; + } + + onDialogClose(): void { + this.dialogRef.close(); + } + + publishEvent({ clearSelections, viewName }) { + const payload: any = {}; + + if (clearSelections) { + payload.clearSelections = clearSelections; + } + + if (viewName) { + payload.viewName = viewName; + } + + PCore.getPubSubUtils().publish('update-advanced-search-selections', payload); + } + + get activeTabPConnect() { + const tabData = this.tabItems.find(tab => tab.id === this.currentTabId); + return tabData.content?.getPConnect(); + } + + checkIfSelectionsExist(getPConnect) { + const { MULTI } = PCore.getConstants().LIST_SELECTION_MODE; + const { selectionMode, readonlyContextList, contextPage, contextClass, name } = getPConnect.getConfigProps(); + const isMultiSelectMode = selectionMode === MULTI; + + const dataRelationshipContext = contextClass && name ? name : null; + + const { compositeKeys } = getFieldMeta(getPConnect, dataRelationshipContext); + + let selectionsExist = false; + if (isMultiSelectMode) { + selectionsExist = readonlyContextList?.length > 0; + } else if (contextPage) { + selectionsExist = compositeKeys?.filter(key => !['', null, undefined].includes(contextPage[key]))?.length > 0; + } + return selectionsExist; + } +} diff --git a/packages/angular-sdk-components/src/lib/_components/template/data-reference/search-form/tabsData.ts b/packages/angular-sdk-components/src/lib/_components/template/data-reference/search-form/tabsData.ts new file mode 100644 index 00000000..e5c67df6 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/data-reference/search-form/tabsData.ts @@ -0,0 +1,160 @@ +import { getTabLabel } from '../../../../_helpers/tab-utils'; + +export function getTabCountSources(deferLoadedTabs) { + const availableTabs = deferLoadedTabs.getPConnect().getChildren() || []; + const viewName = deferLoadedTabs?.getPConnect()?.options?.viewName || null; + return availableTabs.reduce( + (prev, tab, index) => { + const config = tab.getPConnect().getConfigProps(); + const { value: showTabCount } = config.inheritedProps?.find(item => item.prop === 'showTabCount') || {}; + const { value } = config.inheritedProps?.find(item => item.prop === 'count') || {}; + const tabCountSource = config.inheritedProps?.find(item => item.prop === 'tabCount'); + const name = getTabLabel(tab.getPConnect()); + const tabId = `${viewName}-${config.name || name}-${index}`; + if (showTabCount) { + if (tabCountSource?.value?.fields?.count) { + const isPrefixedByDot = tabCountSource.value.fields.count.substring(0, 1) === '.'; + return { + ...prev, + dataPageSources: [ + ...prev.dataPageSources, + { + dataPageName: tabCountSource.value.source, + tabId, + tabCountProp: isPrefixedByDot ? tabCountSource.value.fields.count.substring(1) : tabCountSource.value.fields.count, + dataViewParameters: tabCountSource.value?.parameters || {} + } + ] + }; + } + if (Number.isInteger(value) && value % 1 === 0) { + return { + ...prev, + calculatedFields: [ + ...prev.calculatedFields, + { + count: value, + context: tab.getPConnect().getContextName(), + tabId + } + ] + }; + } + if (value?.isDeferred) { + return { + ...prev, + calculatedFields: [ + ...prev.calculatedFields, + { + propertyName: value.propertyName, + context: 'content', + tabId + } + ] + }; + } + } + return prev; + }, + { + dataPageSources: [], + calculatedFields: [] + } + ); +} + +function tabContent(id, index, overideTabContent, tab, data, currentTabId, template) { + if (id === currentTabId || template === 'HierarchicalForm') { + if (overideTabContent) { + return tab.getPConnect().getComponent(); + } + if (data[index]?.content) { + return data[index]?.content; + } + return tab.getPConnect().getComponent(); + } + if (template !== 'HierarchicalForm') { + return overideTabContent ? null : data[index]?.content; + } +} + +function getTabsData(deferLoadedTabs, countMetadata, currentTabId, data) { + const availableTabs = deferLoadedTabs.getPConnect().getChildren() || []; + const viewName = deferLoadedTabs?.getPConnect()?.options?.viewName || null; + return availableTabs.map((tab, index) => { + const config = tab.getPConnect().getConfigProps(); + const name = getTabLabel(tab.getPConnect()); + const tabId = `${viewName}-${config.name || name}-${index}`; + const count = countMetadata.find(item => item.tabId === tabId)?.count; + + return { + name, + id: tabId, + getPConnect: tab.getPConnect, + content: tabContent(tabId, index, '', tab, data, currentTabId, ''), + loaded: tabId === currentTabId || Boolean(data[index]?.content), + visibility: () => { + const tabConfig = tab.getPConnect().getConfigProps(); + const isVisible = !('visibility' in tabConfig) || tabConfig.visibility === true; + if (!isVisible) { + tab.getPConnect().removeNode(); + } + return isVisible; + }, + count + }; + }); +} + +export function getData(deferLoadedTabs, tabCountSources, currentTabId, data) { + let countMetadata; + let tabData; + const pConn = deferLoadedTabs.getPConnect(); + const { dataPageSources, calculatedFields } = tabCountSources; + const calculatedFieldsWithoutValue = calculatedFields.filter(item => item.propertyName); + if (dataPageSources.length) { + Promise.all(dataPageSources.map(item => PCore.getDataPageUtils().getPageDataAsync(item.dataPageName, '', item.dataViewParameters))) + .then(res => { + const temp = res.map((r, index) => ({ + ...dataPageSources[index], + count: r[dataPageSources[index].tabCountProp] + })); + countMetadata = temp; + tabData = getTabsData(deferLoadedTabs, countMetadata, currentTabId, data); + }) + .catch(err => { + console.log(err); + }); + } else if (calculatedFieldsWithoutValue.length) { + PCore.getViewRuleApi() + // @ts-ignore + .getCalculatedFields( + pConn.getCaseInfo().getKey(), + pConn.getCurrentView(), + calculatedFieldsWithoutValue.map(({ propertyName, context }) => ({ + name: propertyName, + context + })) + ) + .then(res => { + const values = (res?.data as any)?.caseInfo?.content || {}; + const temp = calculatedFields.map(field => ({ + ...field, + count: values[field.propertyName?.substring(1)] || field.count + })); + countMetadata = temp; + tabData = getTabsData(deferLoadedTabs, countMetadata, currentTabId, data); + }) + .catch(err => { + console.log(err); + }); + } else { + countMetadata = calculatedFields.map(field => ({ + ...field, + count: field.count + })); + tabData = getTabsData(deferLoadedTabs, countMetadata, currentTabId, data); + } + + return tabData; +} diff --git a/packages/angular-sdk-components/src/lib/_components/template/data-reference/utils.ts b/packages/angular-sdk-components/src/lib/_components/template/data-reference/utils.ts new file mode 100644 index 00000000..d160a504 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/data-reference/utils.ts @@ -0,0 +1,92 @@ +const isSelfReferencedProperty = (param, referenceProp) => { + const [, parentPropName] = param.split('.'); + const referencePropParent = referenceProp?.split('.').pop(); + return parentPropName === referencePropParent; +}; + +export function getFieldMeta(getPConnect, dataRelationshipContext) { + const pConn = getPConnect; + const { selectionMode, selectionList } = pConn.getConfigProps(); + const { MULTI } = PCore.getConstants().LIST_SELECTION_MODE; + + const isMultiSelectMode = selectionMode === MULTI; + + const pageReference = pConn.getPageReference(); + let referenceProp = isMultiSelectMode ? selectionList.substring(1) : pageReference.substring(pageReference.lastIndexOf('.') + 1); + // Replace here to use the context name instead + let contextPageReference = null; + if (dataRelationshipContext !== null && selectionMode === 'single') { + referenceProp = dataRelationshipContext; + contextPageReference = pageReference.concat('.').concat(referenceProp); + } + + const fieldMetadata = + (isMultiSelectMode ? pConn.getFieldMetadata(`${referenceProp}`) : pConn.getCurrentPageFieldMetadata(contextPageReference)) ?? {}; + const { datasource: { parameters: fieldParameters = {} } = {} } = fieldMetadata; + const compositeKeys: any = []; + Object.values(fieldParameters).forEach((param: any) => { + if (isSelfReferencedProperty(param, referenceProp)) { + compositeKeys.push(param.substring(param.lastIndexOf('.') + 1)); + } + }); + + return { compositeKeys, fieldMetadata }; +} + +/** + * returns array of self-referenced properties of the datasource + * Ex: returns ["@P .DataRef.pyGUID", "@P .DataRef.customerID"] + */ +const getCompositeKeys = (pConnect, property) => { + const fieldMetadata = pConnect.getFieldMetadata(property) || {}; + const { datasource: { parameters: fieldParameters = {} } = {} } = fieldMetadata; + const compositeKeys: any = []; + Object.values(fieldParameters).forEach(param => { + if (isSelfReferencedProperty(param, property)) { + compositeKeys.push(param); + } + }); + return compositeKeys; +}; + +export const getFirstChildConfig = ({ + firstChildMeta, + getPConnect, + rawViewMetadata, + contextClass, + dataReferenceConfigToChild, + isCreateNewReferenceEnabled, + disableStartingFieldsForReference, + pyID +}) => { + const config = { + ...firstChildMeta.config, + ...dataReferenceConfigToChild + }; + const compositeKeys = getCompositeKeys(getPConnect, dataReferenceConfigToChild?.dataRelationshipContext); + return { + ...config, + viewName: getPConnect.getCurrentView(), + referenceList: config.referenceList ?? rawViewMetadata.config.referenceList, + parameters: rawViewMetadata.config.parameters, + localeReference: rawViewMetadata.config.localeReference, + contextClass: config.contextClass || rawViewMetadata?.config?.contextClass || rawViewMetadata?.config?.targetObjectClass, + allowAddingNewRecords: firstChildMeta.type === 'SimpleTableSelect' && isCreateNewReferenceEnabled ? true : undefined, + actions: firstChildMeta.type === 'SimpleTableSelect' && + isCreateNewReferenceEnabled && [ + { + action: 'ADD_CASE', + config: { + label: '@L Add', + caseType: contextClass, + inputFields: disableStartingFieldsForReference + ? {} + : { + [`.pyAddCaseContextPage.${pyID}`]: `@P .${pyID}` + } + } + } + ], + compositeKeys + }; +}; diff --git a/packages/angular-sdk-components/src/lib/_components/template/default-form/default-form.component.ts b/packages/angular-sdk-components/src/lib/_components/template/default-form/default-form.component.ts index c341334c..913b08ad 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/default-form/default-form.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/default-form/default-form.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit, Input, forwardRef } from '@angular/core'; +import { Component, OnInit, Input, forwardRef, OnChanges } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormGroup } from '@angular/forms'; import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; @@ -28,10 +28,9 @@ interface DefaultFormProps { selector: 'app-default-form', templateUrl: './default-form.component.html', styleUrls: ['./default-form.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) -export class DefaultFormComponent extends FormTemplateBase implements OnInit { +export class DefaultFormComponent extends FormTemplateBase implements OnInit, OnChanges { @Input() override pConn$: typeof PConnect; @Input() formGroup$: FormGroup; @@ -60,6 +59,14 @@ export class DefaultFormComponent extends FormTemplateBase implements OnInit { this.updateSelf(); } + ngOnChanges(changes) { + const { pConn$ } = changes; + + if (pConn$.previousValue && !PCore.isDeepEqual(pConn$.previousValue.getConfigProps(), pConn$.currentValue.getConfigProps())) { + this.updateSelf(); + } + } + updateSelf() { const configProps = this.pConn$.getConfigProps() as DefaultFormProps; const kids = this.pConn$.getChildren(); diff --git a/packages/angular-sdk-components/src/lib/_components/template/default-page/default-page.component.html b/packages/angular-sdk-components/src/lib/_components/template/default-page/default-page.component.html new file mode 100644 index 00000000..4479c9c1 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/default-page/default-page.component.html @@ -0,0 +1,34 @@ +
+ +
+ + +
+

{{ title }}

+

{{ heading }}

+
+ +
+
+
diff --git a/packages/angular-sdk-components/src/lib/_components/template/default-page/default-page.component.scss b/packages/angular-sdk-components/src/lib/_components/template/default-page/default-page.component.scss new file mode 100644 index 00000000..7148d845 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/default-page/default-page.component.scss @@ -0,0 +1,31 @@ +.psdk-grid-filter-1 { + display: grid; + grid-template-columns: repeat(1, minmax(0, 1fr)); + column-gap: calc(2 * 0.5rem); + row-gap: calc(2 * 0.5rem); + align-items: start; +} + +.psdk-grid-filter-2 { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + column-gap: calc(2 * 0.5rem); + row-gap: calc(2 * 0.5rem); + align-items: start; +} + +.psdk-grid-filter-wide-narrow { + display: grid; + grid-template-columns: 7fr 3fr; + column-gap: calc(2 * 0.5rem); + row-gap: calc(2 * 0.5rem); + align-items: start; +} + +.psdk-grid-filter-narrow-wide { + display: grid; + grid-template-columns: 3fr 7fr; + column-gap: calc(2 * 0.5rem); + row-gap: calc(2 * 0.5rem); + align-items: start; +} diff --git a/packages/angular-sdk-components/src/lib/_components/template/default-page/default-page.component.spec.ts b/packages/angular-sdk-components/src/lib/_components/template/default-page/default-page.component.spec.ts new file mode 100644 index 00000000..964b5eb2 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/default-page/default-page.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; + +import { DefaultPageComponent } from './default-page.component'; + +describe('DefaultPageComponent', () => { + let component: DefaultPageComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [DefaultPageComponent] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(DefaultPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/angular-sdk-components/src/lib/_components/template/default-page/default-page.component.ts b/packages/angular-sdk-components/src/lib/_components/template/default-page/default-page.component.ts new file mode 100644 index 00000000..97a42b75 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/default-page/default-page.component.ts @@ -0,0 +1,64 @@ +import { Component, OnInit, Input, forwardRef, OnChanges, SimpleChanges } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { ReferenceComponent } from '../../infra/reference/reference.component'; +import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; + +interface DefaultPageProps { + // If any, enter additional props that only exist on this component + layout?: string; + title?: string; + heading?: string; + message?: string; + backgroundImage?: string; + enableBanner?: boolean; +} + +@Component({ + selector: 'app-default-page', + templateUrl: './default-page.component.html', + styleUrls: ['./default-page.component.scss'], + imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] +}) +export class DefaultPageComponent implements OnInit, OnChanges { + @Input() pConn$: typeof PConnect; + @Input() formGroup$: any; + + configProps$: DefaultPageProps; + arChildren$: any[]; + title?: string; + heading: any; + message?: string; + backgroundImage?: string; + layout$?: string; + enableBanner$?: boolean; + + constructor() { + this.backgroundImage = this.configProps$?.backgroundImage; + } + + ngOnInit() { + this.backgroundImage = this.configProps$?.backgroundImage; + this.updateSelf(); + } + + ngOnChanges(changes: SimpleChanges): void { + const { pConn$ } = changes; + this.backgroundImage = this.configProps$?.backgroundImage; + + if (pConn$.previousValue && pConn$.previousValue !== pConn$.currentValue) { + this.updateSelf(); + } + } + + updateSelf() { + this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as DefaultPageProps; + + this.layout$ = this.configProps$.layout; + this.heading = this.configProps$.heading; + this.message = this.configProps$.message; + this.backgroundImage = this.configProps$.backgroundImage; + this.enableBanner$ = this.configProps$.enableBanner; + + this.arChildren$ = ReferenceComponent.normalizePConnArray(this.pConn$.getChildren()); + } +} diff --git a/packages/angular-sdk-components/src/lib/_components/template/details-narrow-wide/details-narrow-wide.component.ts b/packages/angular-sdk-components/src/lib/_components/template/details-narrow-wide/details-narrow-wide.component.ts index 80f36dfe..e1dd3298 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/details-narrow-wide/details-narrow-wide.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/details-narrow-wide/details-narrow-wide.component.ts @@ -6,7 +6,6 @@ import { DetailsTemplateBase } from '../base/details-template-base'; selector: 'app-details-narrow-wide', templateUrl: './details-narrow-wide.component.html', styleUrls: ['./details-narrow-wide.component.scss'], - standalone: true, imports: [forwardRef(() => ComponentMapperComponent)] }) export class DetailsNarrowWideComponent extends DetailsTemplateBase { diff --git a/packages/angular-sdk-components/src/lib/_components/template/details-one-column/details-one-column.component.ts b/packages/angular-sdk-components/src/lib/_components/template/details-one-column/details-one-column.component.ts index d418b823..623413c5 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/details-one-column/details-one-column.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/details-one-column/details-one-column.component.ts @@ -6,7 +6,6 @@ import { DetailsTemplateBase } from '../base/details-template-base'; selector: 'app-details-one-column', templateUrl: './details-one-column.component.html', styleUrls: ['./details-one-column.component.scss'], - standalone: true, imports: [forwardRef(() => ComponentMapperComponent)] }) export class DetailsOneColumnComponent extends DetailsTemplateBase { diff --git a/packages/angular-sdk-components/src/lib/_components/template/details-sub-tabs/details-sub-tabs.component.ts b/packages/angular-sdk-components/src/lib/_components/template/details-sub-tabs/details-sub-tabs.component.ts index 8bca9561..e2970daa 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/details-sub-tabs/details-sub-tabs.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/details-sub-tabs/details-sub-tabs.component.ts @@ -9,7 +9,6 @@ import { DetailsTemplateBase } from '../base/details-template-base'; selector: 'app-details-sub-tabs', templateUrl: './details-sub-tabs.component.html', styleUrls: ['./details-sub-tabs.component.scss'], - standalone: true, imports: [MatTabsModule, CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class DetailsSubTabsComponent extends DetailsTemplateBase { diff --git a/packages/angular-sdk-components/src/lib/_components/template/details-three-column/details-three-column.component.ts b/packages/angular-sdk-components/src/lib/_components/template/details-three-column/details-three-column.component.ts index 88e154b8..443993cf 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/details-three-column/details-three-column.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/details-three-column/details-three-column.component.ts @@ -6,7 +6,6 @@ import { DetailsTemplateBase } from '../base/details-template-base'; selector: 'app-details-three-column', templateUrl: './details-three-column.component.html', styleUrls: ['./details-three-column.component.scss'], - standalone: true, imports: [forwardRef(() => ComponentMapperComponent)] }) export class DetailsThreeColumnComponent extends DetailsTemplateBase { diff --git a/packages/angular-sdk-components/src/lib/_components/template/details-two-column/details-two-column.component.ts b/packages/angular-sdk-components/src/lib/_components/template/details-two-column/details-two-column.component.ts index 219de1c8..4a5887aa 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/details-two-column/details-two-column.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/details-two-column/details-two-column.component.ts @@ -6,7 +6,6 @@ import { DetailsTemplateBase } from '../base/details-template-base'; selector: 'app-details-two-column', templateUrl: './details-two-column.component.html', styleUrls: ['./details-two-column.component.scss'], - standalone: true, imports: [forwardRef(() => ComponentMapperComponent)] }) export class DetailsTwoColumnComponent extends DetailsTemplateBase { diff --git a/packages/angular-sdk-components/src/lib/_components/template/details-wide-narrow/details-wide-narrow.component.ts b/packages/angular-sdk-components/src/lib/_components/template/details-wide-narrow/details-wide-narrow.component.ts index 18d91414..3d20a667 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/details-wide-narrow/details-wide-narrow.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/details-wide-narrow/details-wide-narrow.component.ts @@ -6,7 +6,6 @@ import { DetailsTemplateBase } from '../base/details-template-base'; selector: 'app-details-wide-narrow', templateUrl: './details-wide-narrow.component.html', styleUrls: ['./details-wide-narrow.component.scss'], - standalone: true, imports: [forwardRef(() => ComponentMapperComponent)] }) export class DetailsWideNarrowComponent extends DetailsTemplateBase { diff --git a/packages/angular-sdk-components/src/lib/_components/template/details/details.component.ts b/packages/angular-sdk-components/src/lib/_components/template/details/details.component.ts index eaa92239..76eb53cb 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/details/details.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/details/details.component.ts @@ -6,7 +6,6 @@ import { DetailsTemplateBase } from '../base/details-template-base'; selector: 'app-details', templateUrl: './details.component.html', styleUrls: ['./details.component.scss'], - standalone: true, imports: [forwardRef(() => ComponentMapperComponent)] }) export class DetailsComponent extends DetailsTemplateBase { diff --git a/packages/angular-sdk-components/src/lib/_components/template/dynamic-tabs/dynamic-tabs.component.ts b/packages/angular-sdk-components/src/lib/_components/template/dynamic-tabs/dynamic-tabs.component.ts index 1bd06cbe..957aa180 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/dynamic-tabs/dynamic-tabs.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/dynamic-tabs/dynamic-tabs.component.ts @@ -17,7 +17,6 @@ interface DynamicTabsProps { selector: 'app-dynamic-tabs', templateUrl: './dynamic-tabs.component.html', styleUrls: ['./dynamic-tabs.component.scss'], - standalone: true, imports: [CommonModule, MatTabsModule, forwardRef(() => ComponentMapperComponent)] }) export class DynamicTabsComponent implements OnInit, OnDestroy { diff --git a/packages/angular-sdk-components/src/lib/_components/template/field-group-list/field-group-list.component.scss b/packages/angular-sdk-components/src/lib/_components/template/field-group-list/field-group-list.component.scss index bd284c54..5cb2e4b0 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/field-group-list/field-group-list.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/template/field-group-list/field-group-list.component.scss @@ -1,5 +1,4 @@ .psdk-details-fields-label { - color: var(--app-label-color); margin: 8px 0px; } diff --git a/packages/angular-sdk-components/src/lib/_components/template/field-group-list/field-group-list.component.ts b/packages/angular-sdk-components/src/lib/_components/template/field-group-list/field-group-list.component.ts index a1ab1fad..6be1d62a 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/field-group-list/field-group-list.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/field-group-list/field-group-list.component.ts @@ -6,7 +6,6 @@ import { ComponentMapperComponent } from '../../../_bridge/component-mapper/comp selector: 'app-field-group-list', templateUrl: './field-group-list.component.html', styleUrls: ['./field-group-list.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class FieldGroupListComponent { diff --git a/packages/angular-sdk-components/src/lib/_components/template/field-group-template/field-group-template.component.ts b/packages/angular-sdk-components/src/lib/_components/template/field-group-template/field-group-template.component.ts index b3152f97..3bab518e 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/field-group-template/field-group-template.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/field-group-template/field-group-template.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit, Input, forwardRef, OnDestroy, OnChanges, AfterViewInit } from '@angular/core'; +import { Component, OnInit, Input, forwardRef, OnDestroy, OnChanges, signal } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormGroup } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; @@ -29,10 +29,9 @@ interface FieldGroupTemplateProps { selector: 'app-field-group-template', templateUrl: './field-group-template.component.html', styleUrls: ['./field-group-template.component.scss'], - standalone: true, imports: [CommonModule, MatButtonModule, forwardRef(() => ComponentMapperComponent)] }) -export class FieldGroupTemplateComponent implements OnInit, OnDestroy, OnChanges, AfterViewInit { +export class FieldGroupTemplateComponent implements OnInit, OnDestroy, OnChanges { @Input() configProps$: FieldGroupTemplateProps; @Input() pConn$: typeof PConnect; @Input() formGroup$: FormGroup; @@ -46,7 +45,7 @@ export class FieldGroupTemplateComponent implements OnInit, OnDestroy, OnChanges heading: any; children: any; menuIconOverride$: any; - referenceListLength: number; + referenceListLength = signal(null); fieldHeader: any; allowAdd = true; @@ -59,10 +58,6 @@ export class FieldGroupTemplateComponent implements OnInit, OnDestroy, OnChanges ) {} ngOnInit(): void { - // First thing in initialization is registering and subscribing to the AngularPConnect service - this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - this.updateSelf(); - this.menuIconOverride$ = this.utils.getImageSrc('trash', this.utils.getSDKStaticContentUrl()); const { allowActions, allowTableEdit, referenceList } = this.configProps$; @@ -87,16 +82,6 @@ export class FieldGroupTemplateComponent implements OnInit, OnDestroy, OnChanges } } - onStateChange() { - // Should always check the bridge to see if the component should - // update itself (re-render) - const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); - // ONLY call updateSelf when the component should update - if (bUpdateSelf) { - this.updateSelf(); - } - } - ngOnChanges(changes) { if (changes && changes.configProps$) { const props = changes.configProps$; @@ -108,16 +93,14 @@ export class FieldGroupTemplateComponent implements OnInit, OnDestroy, OnChanges } this.updateSelf(); + + setTimeout(() => { + this.angularPConnect.shouldComponentUpdate(this); + }, 100); } } } - ngAfterViewInit() { - const resolvedList = getReferenceList(this.pConn$); - // @ts-ignore - Expected 3 arguments, but got 1 - this.pConn$.getListActions().initDefaultPageInstructions(resolvedList); - } - updateSelf() { const inheritedProps: any = this.pConn$.getInheritedProps(); @@ -142,7 +125,10 @@ export class FieldGroupTemplateComponent implements OnInit, OnDestroy, OnChanges this.pConn$.setInheritedProp('displayMode', 'DISPLAY_ONLY'); } - if (this.referenceListLength != referenceList?.length) { + if (this.referenceListLength() != referenceList?.length) { + // @ts-ignore - Expected 3 arguments, but got 1 + this.pConn$.getListActions().initDefaultPageInstructions(resolvedList); + this.children = referenceList?.map((item, index) => { return { id: index, @@ -152,7 +138,7 @@ export class FieldGroupTemplateComponent implements OnInit, OnDestroy, OnChanges }; }); } - this.referenceListLength = referenceList?.length || 0; + this.referenceListLength.set(referenceList?.length || 0); } getStaticHeader = (heading, index) => { @@ -160,14 +146,14 @@ export class FieldGroupTemplateComponent implements OnInit, OnDestroy, OnChanges }; getDynamicHeader = (item, index) => { - if (this.fieldHeader === 'propertyRef' && this.heading && item[this.heading.substring(1)]) { + if (this.heading && item[this.heading.substring(1)]) { return item[this.heading.substring(1)]; } return `Row ${index + 1}`; }; addFieldGroupItem() { - this.pConn$.getListActions().insert({ classID: this.contextClass }, this.referenceListLength); + this.pConn$.getListActions().insert({ classID: this.contextClass }, this.referenceListLength() as number); } deleteFieldGroupItem(index) { diff --git a/packages/angular-sdk-components/src/lib/_components/template/field-value-list/field-value-list.component.ts b/packages/angular-sdk-components/src/lib/_components/template/field-value-list/field-value-list.component.ts index bcdf2502..543313e2 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/field-value-list/field-value-list.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/field-value-list/field-value-list.component.ts @@ -5,7 +5,6 @@ import { Component, Input } from '@angular/core'; selector: 'app-field-value-list', templateUrl: './field-value-list.component.html', styleUrls: ['./field-value-list.component.scss'], - standalone: true, imports: [CommonModule] }) export class FieldValueListComponent { diff --git a/packages/angular-sdk-components/src/lib/_components/template/inline-dashboard-page/inline-dashboard-page.component.ts b/packages/angular-sdk-components/src/lib/_components/template/inline-dashboard-page/inline-dashboard-page.component.ts index cbf4df8e..cd9cb907 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/inline-dashboard-page/inline-dashboard-page.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/inline-dashboard-page/inline-dashboard-page.component.ts @@ -15,7 +15,6 @@ interface InlineDashboardPageProps { selector: 'app-inline-dashboard-page', templateUrl: './inline-dashboard-page.component.html', styleUrls: ['./inline-dashboard-page.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class InlineDashboardPageComponent implements OnInit, OnChanges { @@ -46,7 +45,7 @@ export class InlineDashboardPageComponent implements OnInit, OnChanges { updateSelf() { this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as InlineDashboardPageProps; const arChildren$ = this.pConn$.getChildren(); - const allFilters = this.pConn$.getRawMetadata()?.children[1]; + const allFilters = this.pConn$.getRawMetadata()?.children?.[1]; const filterComponents = buildFilterComponents(this.pConn$, allFilters); this.inlineProps = this.configProps$; this.children[0] = arChildren$[0]; diff --git a/packages/angular-sdk-components/src/lib/_components/template/inline-dashboard/inline-dashboard.component.ts b/packages/angular-sdk-components/src/lib/_components/template/inline-dashboard/inline-dashboard.component.ts index 88b1b2c0..9fd43d01 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/inline-dashboard/inline-dashboard.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/inline-dashboard/inline-dashboard.component.ts @@ -13,7 +13,6 @@ interface InlineDashboardProps { selector: 'app-inline-dashboard', templateUrl: './inline-dashboard.component.html', styleUrls: ['./inline-dashboard.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class InlineDashboardComponent { diff --git a/packages/angular-sdk-components/src/lib/_components/template/list-page/list-page.component.ts b/packages/angular-sdk-components/src/lib/_components/template/list-page/list-page.component.ts index 3b08060a..2cdec41d 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/list-page/list-page.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/list-page/list-page.component.ts @@ -5,7 +5,6 @@ import { ComponentMapperComponent } from '../../../_bridge/component-mapper/comp selector: 'app-list-page', templateUrl: './list-page.component.html', styleUrls: ['./list-page.component.scss'], - standalone: true, imports: [forwardRef(() => ComponentMapperComponent)] }) export class ListPageComponent { diff --git a/packages/angular-sdk-components/src/lib/_components/template/list-view/list-view.component.html b/packages/angular-sdk-components/src/lib/_components/template/list-view/list-view.component.html index 297540cd..827ba165 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/list-view/list-view.component.html +++ b/packages/angular-sdk-components/src/lib/_components/template/list-view/list-view.component.html @@ -1,188 +1,196 @@
-

- {{ label }} {{ getResultsText() }} -

- - Search - - +
+

+ {{ label }} {{ getResultsText() }} +

+ + searchSearch + + +
-
- - - - +
- {{ dCol.config.label }} -
- -
-
- -
-
- - - - - - -
-
-
-
- - - - +
- {{ dCol.config.label }} -
- -
-
- -
-
- - - - - - -
-
-
-
-
- - - - - - - - - - -
- - - - - {{ dCol.config.label }} +
+ + + + + + + + + + + + + + + + +
+ + + + + + + + {{ dCol.config.label }} + {{ element[dCol.config.name] || '---' }}
+
+ + + + - + -
+ {{ getValue(col) }} {{ element[dCol.config.name] || '---' }}
-
- - - - - -
{{ dCol.config.label }}
-
-
- {{ utils.getGenericFieldsLocalizedValue('CosmosFields.fields.lists', 'No records found.') }} -
+
+
+ {{ utils.getGenericFieldsLocalizedValue('COSMOSFIELDS.lists', 'No records found.') }}
diff --git a/packages/angular-sdk-components/src/lib/_components/template/list-view/list-view.component.scss b/packages/angular-sdk-components/src/lib/_components/template/list-view/list-view.component.scss index 3f590816..225f9aa9 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/list-view/list-view.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/template/list-view/list-view.component.scss @@ -1,12 +1,16 @@ .psdk-list-header { - background-color: var(--app-form-color); - padding: 1rem; - margin: 0.5rem; - border-radius: 0.6125rem; + border: 1px solid var(--mat-sys-outline-variant); + background-color: var(--mat-sys-surface-container); } table { width: 100%; + border-bottom: 1px solid var(--mat-sys-on-secondary-container); +} + +.search-label { + display: flex; + align-items: center; } ::ng-deep .mat-sort-header-content { @@ -69,6 +73,7 @@ td.mat-mdc-footer-cell { padding: 0.125rem 0.125rem; min-width: unset; width: 1.1rem; + margin-right: 1rem; } .psdk-outer-div-in-form { @@ -110,11 +115,11 @@ td.mat-mdc-footer-cell { display: table; margin: auto; min-width: 100px; - background-color: var(--app-form-color); - border: 1px solid var(--app-inverse-form-color); + background-color: var(--mat-sys-surface); + border: 1px solid var(--mat-sys-outline-variant); border-radius: 10px; padding: 20px; - box-shadow: 0 0 10px 3px var(--app-box-shadow-color); + box-shadow: 0 0 10px 3px var(--mat-sys-level3); position: absolute; z-index: 99; } @@ -126,7 +131,7 @@ td.mat-mdc-footer-cell { align-items: center; height: 100%; width: 100%; - background-color: var(--app-dialog-background-color); + background-color: rgba(0, 0, 0, 0.5); position: fixed; z-index: 999; top: 0px; @@ -137,11 +142,11 @@ td.mat-mdc-footer-cell { display: table; margin: auto; min-width: 150px; - background-color: var(--app-form-color); - border: 1px solid var(--app-inverse-form-color); + background-color: var(--mat-sys-surface-container); + border: 1px solid var(--mat-sys-outline-variant); border-radius: 10px; padding: 20px; - box-shadow: 0 0 10px 3px var(--app-box-shadow-color); + box-shadow: 0 0 10px 3px var(--mat-sys-level3); } tr.mat-mdc-row { @@ -153,19 +158,10 @@ tr.mat-mdc-row { justify-content: center; display: flex; align-items: center; - border: 1px solid var(--app-neutral-light-color); + border: 1px solid var(--mat-sys-outline-variant); border-top: none; } -.psdk-table-field-link { - color: var(--app-primary-color); - padding: 0; - cursor: pointer; - border: 0; - background-color: transparent; - align-items: center; -} - .results-count { opacity: 0.7; font-size: 0.8rem; @@ -176,3 +172,11 @@ tr.mat-mdc-row { .label { margin: 8px; } + +::ng-deep th.mat-mdc-header-cell, +td.mat-mdc-cell, +td.mat-mdc-footer-cell { + border-right: 1px solid var(--mat-sys-on-secondary-container); + padding: 8px !important; + // min-width: 10rem; +} diff --git a/packages/angular-sdk-components/src/lib/_components/template/list-view/list-view.component.ts b/packages/angular-sdk-components/src/lib/_components/template/list-view/list-view.component.ts index 381d621d..239e6430 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/list-view/list-view.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/list-view/list-view.component.ts @@ -1,4 +1,5 @@ import { Component, OnInit, Input, ViewChild, forwardRef, OnDestroy } from '@angular/core'; +import { SelectionModel } from '@angular/cdk/collections'; import { CommonModule } from '@angular/common'; import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatOptionModule } from '@angular/material/core'; @@ -42,6 +43,10 @@ interface ListViewProps { value: any; readonlyContextList: any; label?: string; + displayAs?: string; + showRecords: boolean; + viewName?: string; + localeReference?: any; } export class Group { @@ -58,7 +63,6 @@ export class Group { selector: 'app-list-view', templateUrl: './list-view.component.html', styleUrls: ['./list-view.component.scss'], - standalone: true, imports: [ CommonModule, MatFormFieldModule, @@ -89,6 +93,7 @@ export class ListViewComponent implements OnInit, OnDestroy { @Input() payload; repeatList$: MatTableDataSource; + selection = new SelectionModel(true, []); fields$: any[]; displayedColumns$ = Array(); @@ -156,11 +161,13 @@ export class ListViewComponent implements OnInit, OnDestroy { query: any = null; paging: any; fieldDefs: any; - xRayApis = PCore.getDebugger().getXRayRuntime(); - xRayUid = this.xRayApis.startXRay(); checkBoxValue: string; label?: string = ''; - + uniqueId = crypto.randomUUID(); + displayAs: any; + showRecords: any; + identifier: string; + promotedFiltersId: string; constructor( private psService: ProgressSpinnerService, public utils: Utils @@ -172,12 +179,13 @@ export class ListViewComponent implements OnInit, OnDestroy { const defRowID = this.configProps$?.referenceType === 'Case' ? 'pyID' : 'pyGUID'; /** If compositeKeys is defined, use dynamic value, else fallback to pyID or pyGUID. */ this.compositeKeys = this.configProps$?.compositeKeys; - this.rowID = this.compositeKeys && this.compositeKeys?.length === 1 ? this.compositeKeys[0] : defRowID; + this.rowID = this.payload?.compositeKeys?.length === 1 ? this.payload?.compositeKeys[0] : defRowID; this.bShowSearch$ = this.utils.getBooleanValue(this.configProps$?.globalSearch ? this.configProps$.globalSearch : this.payload?.globalSearch); this.bColumnReorder$ = this.utils.getBooleanValue(this.configProps$.reorderFields); this.bGrouping$ = this.utils.getBooleanValue(this.configProps$.grouping); this.showDynamicFields = this.configProps$?.showDynamicFields; - + this.displayAs = this.configProps$.displayAs; + this.showRecords = this.configProps$.showRecords; this.menuSvgIcon$ = this.utils.getImageSrc('more', this.utils.getSDKStaticContentUrl()); this.arrowDownSvgIcon$ = this.utils.getImageSrc('arrow-down', this.utils.getSDKStaticContentUrl()); this.arrowUpSvgIcon$ = this.utils.getImageSrc('arrow-up', this.utils.getSDKStaticContentUrl()); @@ -206,6 +214,7 @@ export class ListViewComponent implements OnInit, OnDestroy { this.label = title; this.searchIcon$ = this.utils.getImageSrc('search', this.utils.getSDKStaticContentUrl()); + this.promotedFiltersId = `promoted-filters-queryable-${this.uniqueId}`; setTimeout(() => { PCore.getPubSubUtils().subscribe( PCore.getConstants().PUB_SUB_EVENTS.EVENT_DASHBOARD_FILTER_CHANGE, @@ -226,6 +235,15 @@ export class ListViewComponent implements OnInit, OnDestroy { false, this.pConn$.getContextName() ); + PCore.getPubSubUtils().subscribe( + PCore.getEvents().getTransientEvent().UPDATE_PROMOTED_FILTERS, + data => { + this.showRecords = data.showRecords; + const filterData = this.prepareFilters(data); + this.processFilterChange(filterData); + }, + this.promotedFiltersId + ); }, 0); if (this.configProps$) { if (!this.payload) { @@ -238,7 +256,6 @@ export class ListViewComponent implements OnInit, OnDestroy { listContext: this.listContext, ref: this.ref, showDynamicFields: this.showDynamicFields, - xRayUid: this.xRayUid, cosmosTableRef: this.cosmosTableRef, selectionMode: this.selectionMode }).then(response => { @@ -246,6 +263,29 @@ export class ListViewComponent implements OnInit, OnDestroy { this.getListData(); }); } + this.clearSelectionsAndUpdateTable(this.pConn$, this.uniqueId, this.configProps$?.viewName); + } + + clearSelectionsAndUpdateTable(getPConnect: any, uniqueId: string, viewName): void { + const clearSelectionsAndRefreshList = ({ viewName: name, clearSelections }: any) => { + if (name === viewName) { + const { selectionMode } = getPConnect.getRawConfigProps(); + if (!selectionMode) { + return; + } + if (clearSelections) { + if (selectionMode === 'single') { + getPConnect.getListActions().setSelectedRows({}); + } else { + getPConnect.getListActions().clearSelectedRows(); + } + } + } + }; + + this.identifier = `clear-and-update-advanced-search-selections-${uniqueId}`; + + PCore.getPubSubUtils().subscribe('update-advanced-search-selections', clearSelectionsAndRefreshList, this.identifier); } getFieldFromFilter(filter, dateRange = false) { @@ -260,82 +300,22 @@ export class ListViewComponent implements OnInit, OnDestroy { // Will be triggered when EVENT_DASHBOARD_FILTER_CHANGE fires processFilterChange(data) { - const { filterId, filterExpression } = data; - let dashboardFilterPayload: any = { - query: { - filter: {}, - select: [] - } - }; - - this.filters[filterId] = filterExpression; - let isDateRange = !!data.filterExpression?.AND; - // Will be AND by default but making it dynamic in case we support dynamic relational ops in future - const relationalOp = 'AND'; - - let field = this.getFieldFromFilter(filterExpression, isDateRange); - const selectParam: any[] = []; - // Constructing the select parameters list (will be sent in dashboardFilterPayload) - this.displayedColumns$?.forEach(col => { - selectParam.push({ - field: col - }); - }); - - // Checking if the triggered filter is applicable for this list - if (data.filterExpression !== null && !(this.displayedColumns$?.length && this.displayedColumns$?.includes(field))) { - return; - } - // This is a flag which will be used to reset dashboardFilterPayload in case we don't find any valid filters - let validFilter = false; - - let index = 1; - // Iterating over the current filters list to create filter data which will be POSTed - const filterKeys: any[] = Object.keys(this.filters); - const filterValues: any[] = Object.values(this.filters); - for (let filterIndex = 0; filterIndex < filterKeys.length; filterIndex++) { - const filter = filterValues[filterIndex]; - // If the filter is null then we can skip this iteration - if (filter === null) { - // eslint-disable-next-line no-continue - continue; - } + this.updateFiltersFromData(data); - // Checking if the filter is of type- Date Range - isDateRange = !!filter?.AND; - field = this.getFieldFromFilter(filter, isDateRange); + const selectParam = this.displayedColumns$?.map(col => ({ field: col })) || []; - if (!(this.displayedColumns$?.length && this.displayedColumns$?.includes(field))) { - // eslint-disable-next-line no-continue - continue; - } - // If we reach here that implies we've at least one valid filter, hence setting the flag - validFilter = true; - /** Below are the 2 cases for- Text & Date-Range filter types where we'll construct filter data which will be sent in the dashboardFilterPayload - * In Constellation DX Components, through Repeating Structures they might be using several APIs to do it. We're doing it here - */ - if (isDateRange) { - dashboardFilterPayload = this.filterBasedOnDateRange(dashboardFilterPayload, filter, relationalOp, selectParam, index); - } else { - dashboardFilterPayload.query.filter.filterConditions = { - ...dashboardFilterPayload.query.filter.filterConditions, - [`T${index++}`]: { ...filter.condition, ignoreCase: true } - }; + if (this.displayAs !== 'advancedSearch') { + const { filterExpression } = data; + const isDateRange = !!filterExpression?.AND; + const field = this.getFieldFromFilter(filterExpression, isDateRange); - if (dashboardFilterPayload.query.filter.logic) { - dashboardFilterPayload.query.filter.logic = `${dashboardFilterPayload.query.filter.logic} ${relationalOp} T${index - 1}`; - } else { - dashboardFilterPayload.query.filter.logic = `T${index - 1}`; - } - - dashboardFilterPayload.query.select = selectParam; + if (filterExpression !== null && !this.displayedColumns$?.includes(field)) { + return; } } - // Reset the dashboardFilterPayload if we end up with no valid filters for the list - if (!validFilter) { - dashboardFilterPayload = undefined; - } + const dashboardFilterPayload = this.buildFilterPayload(selectParam); + this.filterPayload = dashboardFilterPayload; this.getListData(); } @@ -370,10 +350,22 @@ export class ListViewComponent implements OnInit, OnDestroy { return PCore.getAnalyticsUtils().getDataViewMetadata(refList, this.showDynamicFields); } + getValue(col) { + return this.fieldDefs.find(f => f.name === col)?.label; + } + getListData() { + this.preparePayload(); const componentConfig = this.pConn$.getComponentConfig(); - if (this.configProps$) { - this.preparePayload(); + const columnFields = componentConfig.presets[0].children[0].children; + const columns = this.getHeaderCells(columnFields, this.fieldDefs); + this.fields$ = this.configProps$.presets[0].children[0].children; + this.displayedColumns$ = columns.map(col => { + return col.id; + }); + if (this.displayAs === 'advancedSearch' && !this.showRecords) { + Promise.resolve({ data: null }); + } else if (this.configProps$) { const refList = this.configProps$.referenceList; const fieldsMetaDataPromise = this.getFieldsMetadata(refList); // returns a promise @@ -399,17 +391,9 @@ export class ListViewComponent implements OnInit, OnDestroy { const fieldsMetaData = results[0]; const workListData = results[1]; - this.fields$ = this.configProps$.presets[0].children[0].children; - // this is an unresovled version of this.fields$, need unresolved, so can get the property reference - const columnFields = componentConfig.presets[0].children[0].children; - const tableDataResults = !this.bInForm$ ? workListData.data.data : workListData.data; - const columns = this.getHeaderCells(columnFields, this.fieldDefs); this.fields$ = this.updateFields(this.fields$, fieldsMetaData.data.fields, columns); - this.displayedColumns$ = columns.map(col => { - return col.id; - }); this.response = tableDataResults; this.updatedRefList = this.updateData(tableDataResults, this.fields$); if (this.selectionMode === SELECTION_MODE.SINGLE && this.updatedRefList?.length > 0) { @@ -421,6 +405,14 @@ export class ListViewComponent implements OnInit, OnDestroy { } this.repeatList$ = new MatTableDataSource(this.updatedRefList); + + if (this.configProps$?.readonlyContextList?.length > 0) { + const readonlyIds = new Set(this.configProps$.readonlyContextList.map(element => element[this.rowID])); + const rowsToSelect = this.repeatList$.data.filter(row => readonlyIds.has(row[this.rowID])); + if (rowsToSelect.length > 0) { + this.selection.select(...rowsToSelect); + } + } this.repeatList$.filterPredicate = this.customFilterPredicate.bind(this); // keeping an original copy to get back after possible sorts, filters and groupBy @@ -437,6 +429,33 @@ export class ListViewComponent implements OnInit, OnDestroy { } } + prepareFilters(data) { + return Object.entries(data.payload).reduce((acc, [field, value]) => { + if (value) { + let comparator = 'EQ'; + const filterRecord = this.listContext.meta.fieldDefs.filter(item => item.id === field); + if (filterRecord?.[0]?.meta.type === 'TextInput') { + comparator = 'CONTAINS'; + } + acc[field] = { + filterExpression: { + condition: { + lhs: { + field + }, + comparator, + rhs: { + value + } + } + }, + filterId: field + }; + } + return acc; + }, {}); + } + preparePayload() { const { fieldDefs, itemKey, patchQueryFields } = this.listContext.meta; this.fieldDefs = fieldDefs; @@ -478,6 +497,8 @@ export class ListViewComponent implements OnInit, OnDestroy { `dashboard-component-${'id'}`, this.pConn$.getContextName() ); + PCore.getPubSubUtils().unsubscribe('update-advanced-search-selections', this.identifier); + PCore.getPubSubUtils().unsubscribe(PCore.getEvents().getTransientEvent().UPDATE_PROMOTED_FILTERS, this.promotedFiltersId); } // ngAfterViewInit() { @@ -496,6 +517,7 @@ export class ListViewComponent implements OnInit, OnDestroy { const arReturn = arFields; arReturn.forEach((field, i) => { field.config = { ...field.config, ...fields[i], name: fields[i].id }; + field.config.label = PCore.getLocaleUtils().getLocaleValue(field.config.label, this.configProps$.localeReference); }); return arReturn; } @@ -521,13 +543,6 @@ export class ListViewComponent implements OnInit, OnDestroy { } } - isChecked(rowIn): any { - const initialVal = false; - return this.configProps$?.readonlyContextList?.reduce((acc, currRow) => { - return acc || rowIn[this.rowID] === currRow[this.rowID]; - }, initialVal); - } - fieldOnChange(row) { const value = row[this.rowID]; const reqObj = {}; @@ -544,32 +559,31 @@ export class ListViewComponent implements OnInit, OnDestroy { this.pConn$?.getListActions?.()?.setSelectedRows([reqObj]); } - onCheckboxClick(row, event) { - const value = row[this.rowID]; - const checked = event?.checked; - const reqObj: any = {}; - if (this.compositeKeys?.length > 1) { - const index = this.response.findIndex(element => element[this.rowID] === value); - const selectedRow = this.response[index]; - this.compositeKeys.forEach(element => { - reqObj[element] = selectedRow[element]; - }); - reqObj.$selected = checked; - } else { - reqObj[this.rowID] = value; - reqObj.$selected = checked; - } - this.pConn$?.getListActions()?.setSelectedRows([reqObj]); + onCheckboxClick(row) { + this.selection.toggle(row); + const requiredValue = this.getSelectedValue(row); + this.pConn$?.getListActions()?.setSelectedRows([requiredValue]); } - // rowClick(row) { - // switch (this.configProps$.rowClickAction) { - // case 'openAssignment': - // this.psService.sendMessage(true); - // this.openAssignment(row); - // break; - // } - // } + isAllSelected() { + const numSelected = this.selection.selected.length; + const numRows = this.repeatList$.data.length; + return numSelected === numRows; + } + + toggleAllRows() { + if (this.isAllSelected()) { + this.selection.clear(); + this.pConn$?.getListActions()?.clearSelectedRows(); + return; + } + if (this.selection.hasValue() && !this.isAllSelected()) { + this.pConn$?.getListActions()?.clearSelectedRows(); + } + this.selection.select(...this.repeatList$.data); + const requiredValues = this.repeatList$.data.map(row => this.getSelectedValue(row)); + this.pConn$?.getListActions()?.setSelectedRows(requiredValues); + } _getIconStyle(level): string { let sReturn = ''; @@ -1157,7 +1171,7 @@ export class ListViewComponent implements OnInit, OnDestroy { const seen = {}; return a.filter(item => { const k = key(item); - // eslint-disable-next-line no-return-assign, no-prototype-builtins + // eslint-disable-next-line no-prototype-builtins return seen.hasOwnProperty(k) ? false : (seen[k] = true); }); } @@ -1431,4 +1445,78 @@ export class ListViewComponent implements OnInit, OnDestroy { return select; } + + private getSelectedValue(row) { + const value = row[this.rowID]; + const checked = this.selection.isSelected(row); + const reqObj: any = {}; + if (this.compositeKeys?.length > 1) { + const index = this.response.findIndex(element => element[this.rowID] === value); + const selectedRow = this.response[index]; + this.compositeKeys.forEach(element => { + reqObj[element] = selectedRow[element]; + }); + reqObj.$selected = checked; + } else { + reqObj[this.rowID] = value; + reqObj.$selected = checked; + } + return reqObj; + } + + private updateFiltersFromData(data) { + if (this.displayAs === 'advancedSearch') { + this.filters = {}; + Object.values(data).forEach((value: any) => { + this.filters[value.filterId] = value.filterExpression; + }); + } else { + const { filterId, filterExpression } = data; + this.filters[filterId] = filterExpression; + } + } + + private buildFilterPayload(selectParam: any[]) { + const filterConditions = {}; + let logic = ''; + let index = 1; + const relationalOp = 'AND'; + + for (const currentFilter of Object.values(this.filters)) { + const filter: any = currentFilter; + if (!filter) continue; + + const isDateRange = !!filter.AND; + const field = this.getFieldFromFilter(filter, isDateRange); + + if (!this.displayedColumns$?.includes(field)) continue; + + if (logic) { + logic += ` ${relationalOp} `; + } + + if (isDateRange) { + const dateRelationalOp = filter.AND ? 'AND' : 'OR'; + filterConditions[`T${index}`] = { ...filter[relationalOp][0].condition }; + filterConditions[`T${index + 1}`] = { ...filter[relationalOp][1].condition }; + logic += `(T${index} ${dateRelationalOp} T${index + 1})`; + index += 2; + } else { + filterConditions[`T${index}`] = { ...filter.condition, ...(filter.condition.comparator === 'CONTAINS' && { ignoreCase: true }) }; + logic += `T${index}`; + index++; + } + } + + if (!logic) { + return undefined; + } + + return { + query: { + filter: { filterConditions, logic }, + select: selectParam + } + }; + } } diff --git a/packages/angular-sdk-components/src/lib/_components/template/list-view/listViewHelpers.ts b/packages/angular-sdk-components/src/lib/_components/template/list-view/listViewHelpers.ts index f70fa893..aab719ea 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/list-view/listViewHelpers.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/list-view/listViewHelpers.ts @@ -12,7 +12,6 @@ export function init(props) { ref, showDynamicFields, isDataObject, - xRayUid, cosmosTableRef } = props; let { editing, selectionMode } = props; @@ -67,8 +66,7 @@ export function init(props) { pConn$, compositeKeys, isSearchable, - isCacheable: true, - xRayUid + isCacheable: true }).then(async context => { return readContextResponse(context, { ...props, @@ -76,7 +74,6 @@ export function init(props) { selectionCountThreshold, ref, selectionMode, - xRayUid, cosmosTableRef }); }); diff --git a/packages/angular-sdk-components/src/lib/_components/template/list-view/utils.ts b/packages/angular-sdk-components/src/lib/_components/template/list-view/utils.ts index 8402e23e..d88523c2 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/list-view/utils.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/list-view/utils.ts @@ -550,6 +550,27 @@ function populateRenderingOptions(name, config, field) { config.cellRenderer = formatConstants.Integer; } } +function isFLProperty(label) { + return label?.startsWith('@FL'); +} + +function getFieldLabel(fieldConfig) { + const { label, classID, caption } = fieldConfig; + let fieldLabel = (label ?? caption)?.substring(4); + const labelSplit = fieldLabel?.split('.'); + const propertyName = labelSplit?.pop(); + const fieldMetaData: any = PCore.getMetadataUtils().getPropertyMetadata(propertyName, classID) ?? {}; + fieldLabel = fieldMetaData.label ?? fieldMetaData.caption ?? propertyName; + + const definedOnClassID = fieldMetaData.definedOnClassID; + const localeValue = PCore.getLocaleUtils().getLocaleValue( + fieldLabel, + `${definedOnClassID ?? fieldMetaData.classID ?? classID}.${propertyName}`, + PCore.getLocaleUtils().FIELD_LABELS_BUNDLE_KEY, + null + ); + return localeValue || fieldLabel; +} export function initializeColumns(fields: any[] = [], getMappedProperty: any = null) { return fields.map((field, originalColIndex) => { let name = field.config.value; @@ -562,7 +583,9 @@ export function initializeColumns(fields: any[] = [], getMappedProperty: any = n let label = field.config.label || field.config.caption; const { show = true, displayAs } = field.config; - if (label.startsWith('@')) { + if (isFLProperty(label)) { + label = getFieldLabel(field.config); + } else if (label.startsWith('@')) { label = label.substring(3); } @@ -653,7 +676,7 @@ export const readContextResponse = async (context, params) => { const { pConn$, apiContext, children, showDynamicFields, referenceList, isDataObject } = params; // let { listContext } = params; const { promisesResponseArray, apiContext: otherContext } = context; - // eslint-disable-next-line sonarjs/no-unused-collection + const listOfComponents: any[] = []; const { data: { fields: metaFields, classID, isQueryable } diff --git a/packages/angular-sdk-components/src/lib/_components/template/multi-reference-readonly/multi-reference-readonly.component.ts b/packages/angular-sdk-components/src/lib/_components/template/multi-reference-readonly/multi-reference-readonly.component.ts index 3af67f66..a91c724f 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/multi-reference-readonly/multi-reference-readonly.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/multi-reference-readonly/multi-reference-readonly.component.ts @@ -12,7 +12,6 @@ interface MultiReferenceReadOnlyProps { selector: 'app-multi-reference-readonly', templateUrl: './multi-reference-readonly.component.html', styleUrls: ['./multi-reference-readonly.component.scss'], - standalone: true, imports: [forwardRef(() => ComponentMapperComponent)] }) export class MultiReferenceReadonlyComponent implements OnInit, OnDestroy { diff --git a/packages/angular-sdk-components/src/lib/_components/template/narrow-wide-form/narrow-wide-form.component.ts b/packages/angular-sdk-components/src/lib/_components/template/narrow-wide-form/narrow-wide-form.component.ts index cbf66833..f55ce0e0 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/narrow-wide-form/narrow-wide-form.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/narrow-wide-form/narrow-wide-form.component.ts @@ -7,7 +7,6 @@ import { ComponentMapperComponent } from '../../../_bridge/component-mapper/comp selector: 'app-narrow-wide-form', templateUrl: './narrow-wide-form.component.html', styleUrls: ['./narrow-wide-form.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class NarrowWideFormComponent implements OnInit, OnChanges { diff --git a/packages/angular-sdk-components/src/lib/_components/template/object-page/object-page.component.html b/packages/angular-sdk-components/src/lib/_components/template/object-page/object-page.component.html new file mode 100644 index 00000000..86ab3c10 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/object-page/object-page.component.html @@ -0,0 +1 @@ + diff --git a/packages/angular-sdk-components/src/lib/_components/template/object-page/object-page.component.scss b/packages/angular-sdk-components/src/lib/_components/template/object-page/object-page.component.scss new file mode 100644 index 00000000..e69de29b diff --git a/packages/angular-sdk-components/src/lib/_components/template/object-page/object-page.component.spec.ts b/packages/angular-sdk-components/src/lib/_components/template/object-page/object-page.component.spec.ts new file mode 100644 index 00000000..f9405f6c --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/object-page/object-page.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ObjectPageComponent } from './object-page.component'; + +describe('ObjectPageComponent', () => { + let component: ObjectPageComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ObjectPageComponent] + }).compileComponents(); + + fixture = TestBed.createComponent(ObjectPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/angular-sdk-components/src/lib/_components/template/object-page/object-page.component.ts b/packages/angular-sdk-components/src/lib/_components/template/object-page/object-page.component.ts new file mode 100644 index 00000000..fc18ca55 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/object-page/object-page.component.ts @@ -0,0 +1,14 @@ +import { Component, forwardRef, Input } from '@angular/core'; +import { FormGroup } from '@angular/forms'; +import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; + +@Component({ + selector: 'lib-object-page', + imports: [forwardRef(() => ComponentMapperComponent)], + templateUrl: './object-page.component.html', + styleUrl: './object-page.component.scss' +}) +export class ObjectPageComponent { + @Input() pConn$: typeof PConnect; + @Input() formGroup$: FormGroup; +} diff --git a/packages/angular-sdk-components/src/lib/_components/template/one-column-page/one-column-page.component.ts b/packages/angular-sdk-components/src/lib/_components/template/one-column-page/one-column-page.component.ts index 7a4ab24a..c5fb31da 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/one-column-page/one-column-page.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/one-column-page/one-column-page.component.ts @@ -6,7 +6,6 @@ import { ComponentMapperComponent } from '../../../_bridge/component-mapper/comp selector: 'app-one-column-page', templateUrl: './one-column-page.component.html', styleUrls: ['./one-column-page.component.scss'], - standalone: true, imports: [forwardRef(() => ComponentMapperComponent)] }) export class OneColumnPageComponent { diff --git a/packages/angular-sdk-components/src/lib/_components/template/one-column-tab/one-column-tab.component.scss b/packages/angular-sdk-components/src/lib/_components/template/one-column-tab/one-column-tab.component.scss index 8f4e4428..0852c770 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/one-column-tab/one-column-tab.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/template/one-column-tab/one-column-tab.component.scss @@ -1,5 +1,5 @@ .psdk-one-column-tab { - background-color: var(--app-form-color); + background-color: var(--mat-sys-surface-container); margin-top: 0.5rem; margin-bottom: 0.5rem; border-radius: 0.3125rem; diff --git a/packages/angular-sdk-components/src/lib/_components/template/one-column-tab/one-column-tab.component.ts b/packages/angular-sdk-components/src/lib/_components/template/one-column-tab/one-column-tab.component.ts index 6d8fd4f8..324cb255 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/one-column-tab/one-column-tab.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/one-column-tab/one-column-tab.component.ts @@ -7,7 +7,6 @@ import { ComponentMapperComponent } from '../../../_bridge/component-mapper/comp selector: 'app-one-column-tab', templateUrl: './one-column-tab.component.html', styleUrls: ['./one-column-tab.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class OneColumnTabComponent implements OnInit, OnChanges { diff --git a/packages/angular-sdk-components/src/lib/_components/template/one-column/one-column.component.ts b/packages/angular-sdk-components/src/lib/_components/template/one-column/one-column.component.ts index 0951e075..5ccb7b64 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/one-column/one-column.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/one-column/one-column.component.ts @@ -8,7 +8,6 @@ import { FormTemplateBase } from '../base/form-template-base'; selector: 'app-one-column', templateUrl: './one-column.component.html', styleUrls: ['./one-column.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class OneColumnComponent extends FormTemplateBase implements OnInit, OnChanges { diff --git a/packages/angular-sdk-components/src/lib/_components/template/page/page.component.ts b/packages/angular-sdk-components/src/lib/_components/template/page/page.component.ts index eef282bd..3c605a5a 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/page/page.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/page/page.component.ts @@ -14,7 +14,6 @@ interface PageProps { selector: 'app-page', templateUrl: './page.component.html', styleUrls: ['./page.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class PageComponent implements OnInit, OnDestroy { diff --git a/packages/angular-sdk-components/src/lib/_components/template/promoted-filters/promoted-filters.component.ts b/packages/angular-sdk-components/src/lib/_components/template/promoted-filters/promoted-filters.component.ts index 8c4c9c06..cbb405d5 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/promoted-filters/promoted-filters.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/promoted-filters/promoted-filters.component.ts @@ -26,7 +26,6 @@ const SUPPORTED_TYPES_IN_PROMOTED_FILTERS = [ selector: 'app-promoted-filters', templateUrl: './promoted-filters.component.html', styleUrls: ['./promoted-filters.component.scss'], - standalone: true, imports: [CommonModule, MatButtonModule, forwardRef(() => ComponentMapperComponent)] }) export class PromotedFiltersComponent implements OnInit, OnDestroy { diff --git a/packages/angular-sdk-components/src/lib/_components/template/repeating-structures/repeating-structures.component.ts b/packages/angular-sdk-components/src/lib/_components/template/repeating-structures/repeating-structures.component.ts index 9610121d..5ef23c58 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/repeating-structures/repeating-structures.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/repeating-structures/repeating-structures.component.ts @@ -18,7 +18,6 @@ interface RepeatingStructuresProps { selector: 'app-repeating-structures', templateUrl: './repeating-structures.component.html', styleUrls: ['./repeating-structures.component.scss'], - standalone: true, imports: [CommonModule, MatFormFieldModule, MatIconModule, MatInputModule, MatTableModule, MatSortModule, MatPaginatorModule] }) export class RepeatingStructuresComponent implements OnInit, AfterViewInit { @@ -69,7 +68,6 @@ export class RepeatingStructuresComponent implements OnInit, AfterViewInit { } rowClick(row) { - // eslint-disable-next-line sonarjs/no-small-switch switch (this.configProps$.rowClickAction) { case 'openAssignment': this.psService.sendMessage(true); diff --git a/packages/angular-sdk-components/src/lib/_components/template/self-service-case-view/self-service-case-view.component.html b/packages/angular-sdk-components/src/lib/_components/template/self-service-case-view/self-service-case-view.component.html new file mode 100644 index 00000000..ffcf57dd --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/self-service-case-view/self-service-case-view.component.html @@ -0,0 +1,78 @@ +
+
+
{{ this.heading$ }}
+
+ + + + + + + + + +
+
+
+
+ + +
+
+

{{ heading$ }}

+
+
{{ currentCaseID }}
+
{{ id$ }}
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+
+
+
diff --git a/packages/angular-sdk-components/src/lib/_components/template/self-service-case-view/self-service-case-view.component.scss b/packages/angular-sdk-components/src/lib/_components/template/self-service-case-view/self-service-case-view.component.scss new file mode 100644 index 00000000..3f0854eb --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/self-service-case-view/self-service-case-view.component.scss @@ -0,0 +1,132 @@ +h1 { + font-size: 1.1rem; + line-height: 1.3rem; +} + +::ng-deep .mat-mdc-menu-panel { + overflow: unset; + max-width: unset; +} + +.psdk-case-view-label { + font-size: 1rem; + display: block; + transform: translateY(0.2em) scale(0.75) perspective(100px) translateZ(0.001px); + -ms-transform: translateY(0.2em) scale(0.75); + width: 133.33333%; + border-radius: 0.6125rem; +} + +.psdk-case-view { + box-sizing: border-box; + display: flex; +} + +.ng-case-view-toolbar { + padding: 0.625rem 0.625rem; +} + +.psdk-case-icon-div { + background-color: var(--mat-sys-on-primary-fixed); + border-radius: 1rem; + padding: 0.5rem 0.3rem 0.3rem 0.3rem; +} +.psdk-case-svg-icon { + width: 2rem; + padding: 0rem 0.3125rem; + filter: var(--app-white-color-filter); +} + +.psdk-case-view-info-box { + display: flex; + flex-direction: row; + padding: 0rem 0.3125rem 0rem 0rem; +} + +.psdk-case-view-info { + flex: 0 0 auto; + width: 25rem; + float: left; + // padding: 0rem 0.3125rem 0rem 0rem; + background-color: var(--mat-sys-surface-container); + height: 100%; +} + +.psdk-case-view-main { + flex-grow: 2; + float: left; + padding: 0rem 0.3125rem; + height: 100%; + padding-left: 0; +} + +.psdk-case-view-summary { + padding-left: 0.75rem; +} + +.psdk-case-view-heading { + display: block; + text-align: left; + padding-left: 0.5rem; + padding-bottom: 0; + padding-top: 5px; +} +.psdk-case-view-heading-id { + font-size: 0.9rem; + font-weight: normal; +} + +.psdk-case-view-buttons { + display: flex; + justify-content: flex-start; + padding: 0.3125rem; +} + +.psdk-case-view-utilities { + background-color: var(--mat-sys-surface-container); + width: 21.875rem; + float: left; + padding: 0rem 0.3125rem; +} + +.psdk-case-view-divider { + border-bottom: 0.0625rem solid var(--mat-sys-outline-variant); +} + +.psdk-status { + padding: 0.3125rem 0.3125rem; + background-color: var(--mat-sys-primary); + color: var(--mat-sys-surface-container); + width: fit-content; + margin: 0.625rem; +} + +.psdk-case-view-toolbar { + background-color: var(--mat-sys-primary); + justify-content: center; +} + +button { + margin: 0rem 0.3125rem; +} + +.psdk-case-view-toolbar-row { + padding-left: 1rem; + white-space: normal; + height: auto; +} + +.psdk-self-service-case-view-header { + height: 50px; + display: flex; + justify-content: space-between; + align-items: center; + background-color: var(--mat-sys-primary); + padding: 0px 8px; +} + +.heading { + font-size: 20px; + color: var(--mat-sys-on-primary); + font-weight: 600; +} diff --git a/packages/angular-sdk-components/src/lib/_components/template/self-service-case-view/self-service-case-view.component.spec.ts b/packages/angular-sdk-components/src/lib/_components/template/self-service-case-view/self-service-case-view.component.spec.ts new file mode 100644 index 00000000..5afb9f13 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/self-service-case-view/self-service-case-view.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; + +import { SelfServiceCaseViewComponent } from './self-service-case-view.component'; + +describe('SelfServiceCaseViewComponent', () => { + let component: SelfServiceCaseViewComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [SelfServiceCaseViewComponent] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(SelfServiceCaseViewComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/angular-sdk-components/src/lib/_components/template/self-service-case-view/self-service-case-view.component.ts b/packages/angular-sdk-components/src/lib/_components/template/self-service-case-view/self-service-case-view.component.ts new file mode 100644 index 00000000..f789d80a --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/template/self-service-case-view/self-service-case-view.component.ts @@ -0,0 +1,207 @@ +import { Component, OnInit, Input, forwardRef, OnDestroy } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormGroup } from '@angular/forms'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import { MatButtonModule } from '@angular/material/button'; +import { MatMenuModule } from '@angular/material/menu'; +import { interval } from 'rxjs'; +import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; +import { Utils } from '../../../_helpers/utils'; +import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; +import { prepareCaseSummaryData } from '../utils'; + +interface SelfServiceCaseViewProps { + // If any, enter additional props that only exist on this component + icon: string; + subheader: string; + header: string; + showCaseLifecycle: any; + showSummaryRegion: any; + showUtilitiesRegion: any; + showCaseActions: any; + caseClass: any; +} + +@Component({ + selector: 'app-self-service-case-view', + templateUrl: './self-service-case-view.component.html', + styleUrls: ['./self-service-case-view.component.scss'], + providers: [Utils], + imports: [CommonModule, MatToolbarModule, MatButtonModule, MatMenuModule, forwardRef(() => ComponentMapperComponent)] +}) +export class SelfServiceCaseViewComponent implements OnInit, OnDestroy { + @Input() pConn$: typeof PConnect; + @Input() formGroup$: FormGroup; + + // Used with AngularPConnect + angularPConnectData: AngularPConnectData = {}; + configProps$: SelfServiceCaseViewProps; + + arChildren$: any[]; + + heading$ = ''; + id$ = ''; + status$ = ''; + + arAvailableActions$: any[] = []; + arAvailabeProcesses$: any[] = []; + + caseSummaryPConn$: any; + currentCaseID = ''; + editAction: boolean; + localizedVal: any; + localeCategory = 'CaseView'; + localeKey: any; + showCaseLifecycle: boolean; + showSummaryRegion: boolean; + showUtilitiesRegion: boolean; + showCaseActions: boolean; + utilityRegion: any; + primarySummaryFields: any; + secondarySummaryFields: any; + + constructor( + private angularPConnect: AngularPConnectService, + private utils: Utils + ) {} + + ngOnInit(): void { + // First thing in initialization is registering and subscribing to the AngularPConnect service + this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); + this.checkAndUpdate(); + this.localizedVal = PCore.getLocaleUtils().getLocaleValue; + } + + ngOnDestroy(): void { + if (this.angularPConnectData.unsubscribeFn) { + this.angularPConnectData.unsubscribeFn(); + } + } + + // Callback passed when subscribing to store change + onStateChange() { + this.checkAndUpdate(); + } + + checkAndUpdate() { + // Should always check the bridge to see if the component should update itself (re-render) + const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); + + // ONLY call updateSelf when the component should update + // AND removing the "gate" that was put there since shouldComponentUpdate + // should be the real "gate" + if (bUpdateSelf) { + // generally, don't want to refresh everything when data changes in caseView, it is usually the + // case summary. But check if the case ID changes, this means a different case and we should + // update all. + if (this.hasCaseIDChanged()) { + this.fullUpdate(); + + // update okToInitFlowContainer, because case view was drawn, flow container will need to be init + // to match Nebula/Constellation + sessionStorage.setItem('okToInitFlowContainer', 'true'); + } else { + this.updateHeaderAndSummary(); + } + } + } + + hasCaseIDChanged(): boolean { + if (this.currentCaseID !== this.pConn$.getDataObject().caseInfo.ID) { + this.currentCaseID = this.pConn$.getDataObject().caseInfo.ID; + return true; + } + return false; + } + + updateHeaderAndSummary() { + this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as SelfServiceCaseViewProps; + + const kids = this.pConn$.getChildren() as any[]; + for (const kid of kids) { + const meta = kid.getPConnect().getRawMetadata(); + if (meta.type.toLowerCase() == 'region' && meta.name.toLowerCase() == 'summary') { + this.caseSummaryPConn$ = kid.getPConnect().getChildren()[0].getPConnect(); + } + } + + // have to put in a timeout, otherwise get an angular change event error + const timer = interval(100).subscribe(() => { + timer.unsubscribe(); + + this.heading$ = PCore.getLocaleUtils().getLocaleValue(this.configProps$.header, '', this.localeKey); + this.id$ = this.configProps$.subheader; + this.status$ = this.pConn$.getValue('.pyStatusWork'); + }); + } + + fullUpdate() { + this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as SelfServiceCaseViewProps; + this.localeKey = this.pConn$?.getCaseLocaleReference(); + this.updateHeaderAndSummary(); + + this.arChildren$ = this.pConn$.getChildren() as any[]; + + const caseInfo = this.pConn$.getDataObject().caseInfo; + this.currentCaseID = caseInfo.ID; + this.arAvailableActions$ = caseInfo?.availableActions ? caseInfo.availableActions : []; + this.editAction = this.arAvailableActions$.find(action => action.ID === 'pyUpdateCaseDetails'); + this.arAvailabeProcesses$ = caseInfo?.availableProcesses ? caseInfo.availableProcesses : []; + + const { showCaseLifecycle = true, showSummaryRegion = true, showUtilitiesRegion = true, showCaseActions = true, caseClass } = this.configProps$; + this.showCaseLifecycle = this.utils.getBooleanValue(showCaseLifecycle); + this.showSummaryRegion = this.utils.getBooleanValue(showSummaryRegion); + this.showUtilitiesRegion = this.utils.getBooleanValue(showUtilitiesRegion); + this.showCaseActions = this.utils.getBooleanValue(showCaseActions); + const isObjectType: boolean = (PCore.getCaseUtils() as any).isObjectCaseType(caseClass); + this.utilityRegion = isObjectType ? this.filterUtilities(this.arChildren$[2]) : this.filterUtilities(this.arChildren$[4]); + if (this.showSummaryRegion) { + const { primarySummaryFields, secondarySummaryFields } = prepareCaseSummaryData( + this.arChildren$[0], + (config: any) => config?.availableInChannel?.selfService === true + ); + this.primarySummaryFields = primarySummaryFields; + this.secondarySummaryFields = secondarySummaryFields; + } + } + + filterUtilities(utils) { + let utilsMeta; + const pConnect = utils.getPConnect(); + utilsMeta = pConnect.getRawMetadata?.(); + if (!utilsMeta?.children?.length) return; + utilsMeta = { + ...utilsMeta, + children: utilsMeta.children.filter((child: any) => child.config?.availableInChannel?.selfService === true) + }; + return utilsMeta.children?.length ? pConnect.createComponent(utilsMeta) : undefined; + } + + isUtilitiesRegionNotEmpty() { + if (this.utilityRegion && this.utilityRegion.getPConnect()?.getChildren()?.length > 0) { + return this.utilityRegion + .getPConnect() + .getChildren() + .some((prop: { getPConnect: () => any }) => prop.getPConnect().getConfigProps().visibility !== false); + } + return false; + } + + updateSelf() { + this.fullUpdate(); + } + + _menuActionClick(data) { + const actionsAPI = this.pConn$.getActionsApi(); + const openLocalAction = actionsAPI.openLocalAction.bind(actionsAPI); + + openLocalAction(data.ID, { ...data, containerName: 'modal', type: 'express' }); + } + + _menuProcessClick(data) { + const actionsAPI = this.pConn$.getActionsApi(); + const openProcessAction = actionsAPI.openProcessAction.bind(actionsAPI); + + openProcessAction(data.ID, { ...data }); + } +} diff --git a/packages/angular-sdk-components/src/lib/_components/template/simple-table-manual/helpers.ts b/packages/angular-sdk-components/src/lib/_components/template/simple-table-manual/helpers.ts index 8a1dca81..099e4f69 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/simple-table-manual/helpers.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/simple-table-manual/helpers.ts @@ -126,11 +126,125 @@ export const buildMetaForListView = (fieldMetadata, fields, type, ruleClass, nam }; }; -export const buildFieldsForTable = (configFields, fields, showDeleteButton) => { +const PRIMARY_FIELDS = 'pyPrimaryFields'; +const SUPPORTED_FIELD_TYPES = [ + 'Address', + 'TextArea', + 'TextInput', + 'Phone', + 'Email', + 'Time', + 'URL', + 'Percentage', + 'Integer', + 'Decimal', + 'Date', + 'DateTime', + 'Currency', + 'Checkbox', + 'Dropdown', + 'AutoComplete', + 'UserReference', + 'RichText' +]; + +export const getConfigFields = (rawFields, contextClass, primaryFieldsViewIndex) => { + let primaryFields: any = []; + let configFields: any = []; + + if (primaryFieldsViewIndex > -1) { + let primaryFieldVMD: any = PCore.getMetadataUtils().resolveView(PRIMARY_FIELDS); + if (Array.isArray(primaryFieldVMD)) { + primaryFieldVMD = primaryFieldVMD.find(primaryFieldView => primaryFieldView.classID === contextClass); + primaryFields = primaryFieldVMD?.children?.[0]?.children || []; + } else if (primaryFieldVMD?.classID === contextClass) { + primaryFields = primaryFieldVMD?.children?.[0]?.children || []; + } + + if (primaryFields.length) { + primaryFields = primaryFields.filter(primaryField => SUPPORTED_FIELD_TYPES.includes(primaryField.type)); + } + } + + configFields = [...rawFields.slice(0, primaryFieldsViewIndex), ...primaryFields, ...rawFields.slice(primaryFieldsViewIndex + 1)]; + // filter duplicate fields after combining raw fields and primary fields + return configFields.filter((field, index) => configFields.findIndex(_field => field.config?.value === _field.config?.value) === index); +}; + +export function isFLProperty(label) { + return label?.startsWith('@FL'); +} + +/** + * [getFieldLabel] + * Description - A utility that returns resolved field label for "@FL" annotation i.e from data model. + * @param {Object} fieldConfig + * @returns {string} resolved label string + * + * example: + * fieldConfig = {label: "@FL .pyID", classID: "TestCase-Work"}; + * return "Case ID" + */ +export function getFieldLabel(fieldConfig) { + const { label, classID, caption } = fieldConfig; + let fieldLabel = (label ?? caption)?.substring(4); + const labelSplit = fieldLabel?.split('.'); + const propertyName = labelSplit?.pop(); + const fieldMetaData: any = PCore.getMetadataUtils().getPropertyMetadata(propertyName, classID) ?? {}; + fieldLabel = fieldMetaData.label ?? fieldMetaData.caption ?? propertyName; + return fieldLabel; +} + +export const updateFieldLabels = (fields, configFields, primaryFieldsViewIndex, pConnect, options) => { + const labelsOfFields: any = []; + const { columnsRawConfig = [] } = options; + fields.forEach((field, idx) => { + const rawColumnConfig = columnsRawConfig[idx]?.config; + if (field.config.value === PRIMARY_FIELDS) { + labelsOfFields.push(''); + } else if (isFLProperty(rawColumnConfig?.label ?? rawColumnConfig?.caption)) { + labelsOfFields.push(getFieldLabel(rawColumnConfig) || field.config.label || field.config.caption); + } else { + labelsOfFields.push(field.config.label || field.config.caption); + } + }); + + if (primaryFieldsViewIndex > -1) { + const totalPrimaryFieldsColumns = configFields.length - fields.length + 1; + if (totalPrimaryFieldsColumns) { + const primaryFieldLabels: any = []; + for (let i = primaryFieldsViewIndex; i < primaryFieldsViewIndex + totalPrimaryFieldsColumns; i += 1) { + let label = configFields[i].config?.label; + if (isFLProperty(label)) { + label = getFieldLabel(configFields[i].config); + } else if (label.startsWith('@')) { + label = label.substring(3); + } + if (pConnect) { + label = pConnect.getLocalizedValue(label); + } + primaryFieldLabels.push(label); + } + labelsOfFields.splice(primaryFieldsViewIndex, 1, ...primaryFieldLabels); + } else { + labelsOfFields.splice(primaryFieldsViewIndex, 1); + } + } + return labelsOfFields; +}; + +export const buildFieldsForTable = (configFields, pConnect, showDeleteButton, options) => { + const { primaryFieldsViewIndex, fields } = options; + + // get resolved field labels for primary fields raw config included in configFields + const fieldsLabels = updateFieldLabels(fields, configFields, primaryFieldsViewIndex, pConnect, { + columnsRawConfig: pConnect.getRawConfigProps()?.children?.find(item => item?.name === 'Columns')?.children + }); + const fieldDefs = configFields?.map((field, index) => { return { type: 'text', - label: fields[index].config.label || fields[index].config.caption, + label: fieldsLabels[index], fillAvailableSpace: !!field.config.fillAvailableSpace, id: `${index}`, name: field.config.value.substr(4), @@ -290,7 +404,7 @@ export const createPConnect = (contextName, referenceList, pageReference) => { // create PConnect object const config = { meta: {}, options }; - const { getPConnect } = PCore.createPConnect(config); + const { getPConnect } = PCore.createPConnect(config as any); return getPConnect(); }; diff --git a/packages/angular-sdk-components/src/lib/_components/template/simple-table-manual/simple-table-manual.component.html b/packages/angular-sdk-components/src/lib/_components/template/simple-table-manual/simple-table-manual.component.html index e167b987..f59f789d 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/simple-table-manual/simple-table-manual.component.html +++ b/packages/angular-sdk-components/src/lib/_components/template/simple-table-manual/simple-table-manual.component.html @@ -44,7 +44,7 @@

@@ -58,7 +58,7 @@

- {{ utils.getGenericFieldsLocalizedValue('CosmosFields.fields.lists', 'No records found.') }} + {{ utils.getGenericFieldsLocalizedValue('COSMOSFIELDS.lists', 'No records found.') }}
@@ -82,7 +82,7 @@

@@ -90,7 +90,7 @@

- {{ utils.getGenericFieldsLocalizedValue('CosmosFields.fields.lists', 'No records found.') }} + {{ utils.getGenericFieldsLocalizedValue('COSMOSFIELDS.lists', 'No records found.') }} diff --git a/packages/angular-sdk-components/src/lib/_components/template/simple-table-manual/simple-table-manual.component.scss b/packages/angular-sdk-components/src/lib/_components/template/simple-table-manual/simple-table-manual.component.scss index 99fd122a..a7bf1f33 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/simple-table-manual/simple-table-manual.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/template/simple-table-manual/simple-table-manual.component.scss @@ -26,7 +26,7 @@ table { ::ng-deep th.mat-mdc-header-cell, td.mat-mdc-cell, td.mat-mdc-footer-cell { - border-right: 1px solid var(--app-neutral-light-color); + border-right: 1px solid var(--mat-sys-outline-variant); padding: 8px !important; min-width: 10rem; } @@ -76,13 +76,6 @@ td.mat-mdc-cell:last-child { padding-left: 0.625rem; } -.psdk-icon-search { - vertical-align: sub; - padding: 0rem 0.125rem; - min-width: unset; - width: 1.1rem; -} - .psdk-outer-div-in-form { display: inline-grid; } @@ -121,7 +114,7 @@ td.mat-mdc-cell:last-child { display: table; margin: auto; min-width: 100px; - background-color: var(--app-form-color); + background-color: var(--mat-sys-surface-container); border: 1px solid var(--app-inverse-form-color); border-radius: 10px; padding: 20px; @@ -137,7 +130,6 @@ td.mat-mdc-cell:last-child { align-items: center; height: 100%; width: 100%; - background-color: var(--app-dialog-background-color); position: fixed; z-index: 999; top: 0px; @@ -148,7 +140,6 @@ td.mat-mdc-cell:last-child { display: table; margin: auto; min-width: 150px; - background-color: var(--app-form-color); border: 1px solid var(--app-inverse-form-color); border-radius: 10px; padding: 20px; @@ -160,7 +151,6 @@ tr.mat-mdc-row { } tr.mat-mdc-header-row { - background: var(--app-table-header-background-color); } .psdk-data-readonly { @@ -171,13 +161,13 @@ tr.mat-mdc-header-row { .psdk-no-records { height: 56px; text-align: center; - border: 1px solid var(--app-neutral-light-color); + border: 1px solid var(--mat-sys-outline-variant); border-top: none; - background: var(--app-form-color); } .psdk-utility-card-action-svg-icon { width: 1.4rem; + filter: var(--app-primary-color-filter); } .label { diff --git a/packages/angular-sdk-components/src/lib/_components/template/simple-table-manual/simple-table-manual.component.ts b/packages/angular-sdk-components/src/lib/_components/template/simple-table-manual/simple-table-manual.component.ts index 2abc3bc8..6f60d0e7 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/simple-table-manual/simple-table-manual.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/simple-table-manual/simple-table-manual.component.ts @@ -9,6 +9,7 @@ import { MatMenuModule } from '@angular/material/menu'; import { MatOptionModule } from '@angular/material/core'; import { MatSelectModule } from '@angular/material/select'; import { MatSort, MatSortModule } from '@angular/material/sort'; +import { MatIcon } from '@angular/material/icon'; import { MatTableDataSource, MatTableModule } from '@angular/material/table'; import isEqual from 'fast-deep-equal'; @@ -62,7 +63,6 @@ class Group { selector: 'app-simple-table-manual', templateUrl: './simple-table-manual.component.html', styleUrls: ['./simple-table-manual.component.scss'], - standalone: true, imports: [ CommonModule, MatTableModule, @@ -74,8 +74,10 @@ class Group { MatOptionModule, MatSelectModule, MatInputModule, + MatIcon, forwardRef(() => ComponentMapperComponent) - ] + ], + providers: [DatapageService] }) export class SimpleTableManualComponent implements OnInit, OnDestroy { @ViewChild(MatSort) sort: MatSort; @@ -216,7 +218,6 @@ export class SimpleTableManualComponent implements OnInit, OnDestroy { this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as SimpleTableManualProps; if (this.configProps$.visibility != null) { - // eslint-disable-next-line no-multi-assign this.bVisible$ = this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility); } @@ -307,6 +308,7 @@ export class SimpleTableManualComponent implements OnInit, OnDestroy { this.defaultView = editModeConfig ? editModeConfig.defaultView : viewForAddAndEditModal; this.bUseSeparateViewForEdit = editModeConfig ? editModeConfig.useSeparateViewForEdit : useSeparateViewForEdit; this.editView = editModeConfig ? editModeConfig.editView : viewForEditModal; + const primaryFieldsViewIndex = resolvedFields.findIndex(field => field.config.value === 'pyPrimaryFields'); // const showDeleteButton = !this.readOnlyMode && !hideDeleteRow; // Nebula has other handling for isReadOnlyMode but has Cosmos-specific code @@ -317,8 +319,11 @@ export class SimpleTableManualComponent implements OnInit, OnDestroy { // Nebula does). It will also have the "label", and "meta" contains the original, // unchanged config info. For now, much of the info here is carried over from // Nebula and we may not end up using it all. - this.fieldDefs = buildFieldsForTable(rawFields, resolvedFields, showDeleteButton); - + this.fieldDefs = buildFieldsForTable(rawFields, this.pConn$, showDeleteButton, { + primaryFieldsViewIndex, + fields: resolvedFields + }); + this.fieldDefs = this.fieldDefs?.filter(field => !(field.meta?.config?.hide === true)); this.initializeDefaultPageInstructions(); // end of from Nebula @@ -334,10 +339,15 @@ export class SimpleTableManualComponent implements OnInit, OnDestroy { // from from the fieldDefs. This "name" is the value that // we'll share to connect things together in the table. + const labelsMap = this.fieldDefs.reduce((acc, curr) => { + return { ...acc, [curr.name]: curr.label }; + }, {}); + this.processedFields = []; this.processedFields = resolvedFields.map((field, i) => { field.config.name = this.displayedColumns[i]; // .config["value"].replace(/ ./g,"_"); // replace space dot with underscore + field.config.label = labelsMap[field.config.name] || field.config.label; return field; }); @@ -817,7 +827,7 @@ export class SimpleTableManualComponent implements OnInit, OnDestroy { const seen = {}; return a.filter(item => { const k = key(item); - // eslint-disable-next-line no-return-assign, no-prototype-builtins + // eslint-disable-next-line no-prototype-builtins return seen.hasOwnProperty(k) ? false : (seen[k] = true); }); } @@ -908,7 +918,7 @@ export class SimpleTableManualComponent implements OnInit, OnDestroy { // return the value that should be shown as the contents for the given row data // of the given row field - getRowValue(inRowData: Object, inColKey: string): any { + getRowValue(inRowData: object, inColKey: string): any { // See what data (if any) we have to display const refKeys: string[] = inColKey.split('.'); let valBuilder = inRowData; @@ -951,6 +961,7 @@ export class SimpleTableManualComponent implements OnInit, OnDestroy { if (this.allowEditingInModal && this.defaultView) { this.pConn$ .getActionsApi() + // @ts-expect-error .openEmbeddedDataModal( this.defaultView, this.pConn$ as any, @@ -972,6 +983,7 @@ export class SimpleTableManualComponent implements OnInit, OnDestroy { if (data) { this.pConn$ .getActionsApi() + // @ts-expect-error .openEmbeddedDataModal( this.bUseSeparateViewForEdit ? this.editView : this.defaultView, this.pConn$ as any, @@ -993,24 +1005,32 @@ export class SimpleTableManualComponent implements OnInit, OnDestroy { this.referenceList.forEach((element, index) => { const data: any = []; this.rawFields?.forEach(item => { - item = { - ...item, - config: { ...item.config, label: '', displayMode: this.readOnlyMode || this.allowEditingInModal ? 'DISPLAY_ONLY' : undefined } - }; - const referenceListData = getReferenceList(this.pConn$); - const isDatapage = referenceListData.startsWith('D_'); - const pageReferenceValue = isDatapage ? `${referenceListData}[${index}]` : `${this.pConn$.getPageReference()}${referenceListData}[${index}]`; - const config = { - meta: item, - options: { - context, - pageReference: pageReferenceValue, - referenceList: referenceListData, - hasForm: true - } - }; - const view = PCore.createPConnect(config); - data.push(view); + if (!item?.config?.hide) { + item = { + ...item, + config: { + ...item.config, + label: '', + displayMode: this.readOnlyMode || this.allowEditingInModal ? 'DISPLAY_ONLY' : undefined + } + }; + const referenceListData = getReferenceList(this.pConn$); + const isDatapage = referenceListData.startsWith('D_'); + const pageReferenceValue = isDatapage + ? `${referenceListData}[${index}]` + : `${this.pConn$.getPageReference()}${referenceListData}[${index}]`; + const config = { + meta: item, + options: { + context, + pageReference: pageReferenceValue, + referenceList: referenceListData, + hasForm: true + } + }; + const view = PCore.createPConnect(config); + data.push(view); + } }); eleData.push(data); }); diff --git a/packages/angular-sdk-components/src/lib/_components/template/simple-table-select/simple-table-select.component.ts b/packages/angular-sdk-components/src/lib/_components/template/simple-table-select/simple-table-select.component.ts index 3934b070..915f120b 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/simple-table-select/simple-table-select.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/simple-table-select/simple-table-select.component.ts @@ -8,7 +8,6 @@ import { ComponentMapperComponent } from '../../../_bridge/component-mapper/comp selector: 'app-simple-table-select', templateUrl: './simple-table-select.component.html', styleUrls: ['./simple-table-select.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class SimpleTableSelectComponent implements OnInit, OnDestroy { diff --git a/packages/angular-sdk-components/src/lib/_components/template/simple-table/simple-table.component.ts b/packages/angular-sdk-components/src/lib/_components/template/simple-table/simple-table.component.ts index 8f0d5ffd..f5eed9c7 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/simple-table/simple-table.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/simple-table/simple-table.component.ts @@ -28,7 +28,6 @@ interface SimpleTableProps { selector: 'app-simple-table', templateUrl: './simple-table.component.html', styleUrls: ['./simple-table.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class SimpleTableComponent implements OnInit, OnDestroy { @@ -80,7 +79,6 @@ export class SimpleTableComponent implements OnInit, OnDestroy { this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as SimpleTableProps; if (this.configProps$.visibility != null) { - // eslint-disable-next-line no-multi-assign this.bVisible$ = this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility); } diff --git a/packages/angular-sdk-components/src/lib/_components/template/single-reference-readonly/single-reference-readonly.component.html b/packages/angular-sdk-components/src/lib/_components/template/single-reference-readonly/single-reference-readonly.component.html index fdeb4e31..e7a9f97d 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/single-reference-readonly/single-reference-readonly.component.html +++ b/packages/angular-sdk-components/src/lib/_components/template/single-reference-readonly/single-reference-readonly.component.html @@ -1 +1,4 @@ - +
+
{{ label }}
+ +
diff --git a/packages/angular-sdk-components/src/lib/_components/template/single-reference-readonly/single-reference-readonly.component.scss b/packages/angular-sdk-components/src/lib/_components/template/single-reference-readonly/single-reference-readonly.component.scss index e69de29b..81e901d9 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/single-reference-readonly/single-reference-readonly.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/template/single-reference-readonly/single-reference-readonly.component.scss @@ -0,0 +1,21 @@ +.psdk-grid-display { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + column-gap: calc(2 * 0.5rem); + row-gap: calc(2 * 0.5rem); + align-items: center; + margin-top: 1rem; +} + +.psdk-grid-nondisplay { + margin-top: 1rem; +} + +.psdk-label { + color: var(--app-label-color); + margin: 8px 0px; +} + +.psdk-value { + margin: 8px 0px; +} diff --git a/packages/angular-sdk-components/src/lib/_components/template/single-reference-readonly/single-reference-readonly.component.ts b/packages/angular-sdk-components/src/lib/_components/template/single-reference-readonly/single-reference-readonly.component.ts index f633e881..13c635d3 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/single-reference-readonly/single-reference-readonly.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/single-reference-readonly/single-reference-readonly.component.ts @@ -1,15 +1,115 @@ -import { Component, Input, forwardRef } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { Component, Input, forwardRef, OnInit, OnDestroy } from '@angular/core'; import { FormGroup } from '@angular/forms'; +import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; +import { getDataRelationshipContextFromKey } from '../../../_helpers/objectReference-utils'; @Component({ selector: 'app-single-reference-readonly', templateUrl: './single-reference-readonly.component.html', styleUrls: ['./single-reference-readonly.component.scss'], - standalone: true, - imports: [forwardRef(() => ComponentMapperComponent)] + imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) -export class SingleReferenceReadonlyComponent { +export class SingleReferenceReadonlyComponent implements OnInit, OnDestroy { @Input() pConn$: typeof PConnect; @Input() formGroup$: FormGroup; + @Input() dataRelationshipContext?: any; + + angularPConnectData: AngularPConnectData = {}; + configProps: any; + component: any; + label: string; + newPconn: typeof PConnect; + displayMode: string; + + constructor(private angularPConnect: AngularPConnectService) {} + + ngOnInit(): void { + // First thing in initialization is registering and subscribing to the AngularPConnect service + this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); + this.checkAndUpdate(); + } + + ngOnDestroy(): void { + if (this.angularPConnectData.unsubscribeFn) { + this.angularPConnectData.unsubscribeFn(); + } + } + + // Callback passed when subscribing to store change + onStateChange() { + this.checkAndUpdate(); + } + + checkAndUpdate() { + // Should always check the bridge to see if the component should + // update itself (re-render) + const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this); + + // ONLY call updateSelf when the component should update + if (bUpdateSelf) { + this.updateSelf(); + } + } + + updateSelf() { + this.configProps = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()); + const rawViewMetadata = this.pConn$.getRawMetadata(); + const label = this.configProps.label; + const showLabel = this.configProps.showLabel; + const propsToUse = { label, showLabel, ...this.pConn$.getInheritedProps() }; + const type = (rawViewMetadata?.config as any)?.componentType; + this.displayMode = this.configProps.displayMode; + const targetObjectType = this.configProps.targetObjectType; + const referenceType = targetObjectType === 'case' ? 'Case' : 'Data'; + const hideLabel = this.configProps.hideLabel; + // const additionalFields = this.configProps.additionalFields; + const displayAs = this.configProps.displayAs ?? 'readonly'; + const dataRelationshipContext = (rawViewMetadata?.config as any)?.displayField + ? getDataRelationshipContextFromKey((rawViewMetadata?.config as any)?.displayField) + : this.dataRelationshipContext; + if (propsToUse.showLabel === false) { + propsToUse.label = ''; + } + this.label = propsToUse.label; + + const editableComponents = ['AutoComplete', 'SimpleTableSelect', 'Dropdown', 'RadioButtons']; + const config: any = { + ...rawViewMetadata?.config, + primaryField: (rawViewMetadata?.config as any)?.displayField, + label: this.label + }; + + const activeViewRuleClass = (rawViewMetadata?.config as any)?.targetObjectClass; + if (editableComponents.includes(type)) { + config.caseClass = activeViewRuleClass; + config.text = config.primaryField; + config.caseID = config.value; + config.contextPage = `@P .${dataRelationshipContext}`; + config.resourceParams = { + workID: displayAs === 'table' ? (config as any)?.selectionKey : config.value + }; + config.resourcePayload = { + caseClassName: activeViewRuleClass + }; + } + + this.component = this.pConn$.createComponent( + { + type: 'SemanticLink', + config: { + ...config, + displayMode: this.displayMode, + referenceType, + hideLabel, + dataRelationshipContext + } + }, + '', + 0, + {} + ); + this.newPconn = this.component.getPConnect(); + } } diff --git a/packages/angular-sdk-components/src/lib/_components/template/sub-tabs/sub-tabs.component.ts b/packages/angular-sdk-components/src/lib/_components/template/sub-tabs/sub-tabs.component.ts index e6b5b75e..813653aa 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/sub-tabs/sub-tabs.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/sub-tabs/sub-tabs.component.ts @@ -10,7 +10,6 @@ import { ComponentMapperComponent } from '../../../_bridge/component-mapper/comp selector: 'app-sub-tabs', templateUrl: './sub-tabs.component.html', styleUrls: ['./sub-tabs.component.scss'], - standalone: true, imports: [MatTabsModule, CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class SubTabsComponent implements OnInit, OnDestroy { diff --git a/packages/angular-sdk-components/src/lib/_components/template/three-column-page/three-column-page.component.ts b/packages/angular-sdk-components/src/lib/_components/template/three-column-page/three-column-page.component.ts index 90473116..fd4c2eff 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/three-column-page/three-column-page.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/three-column-page/three-column-page.component.ts @@ -6,7 +6,6 @@ import { ComponentMapperComponent } from '../../../_bridge/component-mapper/comp selector: 'app-three-column-page', templateUrl: './three-column-page.component.html', styleUrls: ['./three-column-page.component.scss'], - standalone: true, imports: [forwardRef(() => ComponentMapperComponent)] }) export class ThreeColumnPageComponent { diff --git a/packages/angular-sdk-components/src/lib/_components/template/three-column/three-column.component.ts b/packages/angular-sdk-components/src/lib/_components/template/three-column/three-column.component.ts index 276de00e..aef4dfea 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/three-column/three-column.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/three-column/three-column.component.ts @@ -8,7 +8,6 @@ import { FormTemplateBase } from '../base/form-template-base'; selector: 'app-three-column', templateUrl: './three-column.component.html', styleUrls: ['./three-column.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class ThreeColumnComponent extends FormTemplateBase implements OnInit, OnChanges { diff --git a/packages/angular-sdk-components/src/lib/_components/template/two-column-page/two-column-page.component.ts b/packages/angular-sdk-components/src/lib/_components/template/two-column-page/two-column-page.component.ts index cea47bab..9db9706b 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/two-column-page/two-column-page.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/two-column-page/two-column-page.component.ts @@ -7,7 +7,6 @@ import { ComponentMapperComponent } from '../../../_bridge/component-mapper/comp selector: 'app-two-column-page', templateUrl: './two-column-page.component.html', styleUrls: ['./two-column-page.component.scss'], - standalone: true, imports: [forwardRef(() => ComponentMapperComponent)] }) export class TwoColumnPageComponent implements OnInit, OnDestroy { diff --git a/packages/angular-sdk-components/src/lib/_components/template/two-column-tab/two-column-tab.component.ts b/packages/angular-sdk-components/src/lib/_components/template/two-column-tab/two-column-tab.component.ts index f26297f3..d4be8725 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/two-column-tab/two-column-tab.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/two-column-tab/two-column-tab.component.ts @@ -7,7 +7,6 @@ import { ComponentMapperComponent } from '../../../_bridge/component-mapper/comp selector: 'app-two-column-tab', templateUrl: './two-column-tab.component.html', styleUrls: ['./two-column-tab.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class TwoColumnTabComponent implements OnInit, OnChanges { diff --git a/packages/angular-sdk-components/src/lib/_components/template/two-column/two-column.component.ts b/packages/angular-sdk-components/src/lib/_components/template/two-column/two-column.component.ts index 27c7a721..8e485b93 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/two-column/two-column.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/two-column/two-column.component.ts @@ -8,7 +8,6 @@ import { FormTemplateBase } from '../base/form-template-base'; selector: 'app-two-column', templateUrl: './two-column.component.html', styleUrls: ['./two-column.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class TwoColumnComponent extends FormTemplateBase implements OnInit, OnChanges { diff --git a/packages/angular-sdk-components/src/lib/_components/template/utils.ts b/packages/angular-sdk-components/src/lib/_components/template/utils.ts index 083301e5..16cfebc1 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/utils.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/utils.ts @@ -37,3 +37,45 @@ export const evaluateAllowRowAction = (allowRowDelete, rowData) => { } return false; }; + +export function prepareCaseSummaryData(caseSummaryRegion, portalSpecificVisibilityChecker?) { + const filterVisibleChildren = children => { + return children + ?.getPConnect() + ?.getChildren() + ?.filter(child => { + const configProps = child.getPConnect().getConfigProps(); + const defaultVisibilityCn = !('visibility' in configProps) || configProps.visibility === true; + return defaultVisibilityCn && (portalSpecificVisibilityChecker?.(configProps) ?? true); + }); + }; + const convertChildrenToSummaryData = children => { + return children?.map(childItem => { + const childPConnData = childItem.getPConnect().resolveConfigProps(childItem.getPConnect().getRawMetadata()); + childPConnData.kid = childItem.getPConnect(); + return childPConnData; + }); + }; + + const summaryFieldChildren = caseSummaryRegion + .getPConnect() + .getChildren()[0] + ?.getPConnect() + ?.getReferencedViewPConnect() + ?.getPConnect() + ?.getChildren(); + + const primarySummaryFields = + summaryFieldChildren && summaryFieldChildren.length > 0 + ? convertChildrenToSummaryData(filterVisibleChildren(summaryFieldChildren[0])) + : undefined; + const secondarySummaryFields = + summaryFieldChildren && summaryFieldChildren.length > 1 + ? convertChildrenToSummaryData(filterVisibleChildren(summaryFieldChildren[1])) + : undefined; + + return { + primarySummaryFields, + secondarySummaryFields + }; +} diff --git a/packages/angular-sdk-components/src/lib/_components/template/wide-narrow-form/wide-narrow-form.component.ts b/packages/angular-sdk-components/src/lib/_components/template/wide-narrow-form/wide-narrow-form.component.ts index c6a9b5da..b59a0a6f 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/wide-narrow-form/wide-narrow-form.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/wide-narrow-form/wide-narrow-form.component.ts @@ -8,7 +8,6 @@ import { FormTemplateBase } from '../base/form-template-base'; selector: 'app-wide-narrow-form', templateUrl: './wide-narrow-form.component.html', styleUrls: ['./wide-narrow-form.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class WideNarrowFormComponent extends FormTemplateBase implements OnInit, OnChanges { diff --git a/packages/angular-sdk-components/src/lib/_components/template/wide-narrow-page/wide-narrow-page.component.ts b/packages/angular-sdk-components/src/lib/_components/template/wide-narrow-page/wide-narrow-page.component.ts index 66b35217..8c51571a 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/wide-narrow-page/wide-narrow-page.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/wide-narrow-page/wide-narrow-page.component.ts @@ -8,7 +8,6 @@ import { ComponentMapperComponent } from '../../../_bridge/component-mapper/comp selector: 'app-wide-narrow-page', templateUrl: './wide-narrow-page.component.html', styleUrls: ['./wide-narrow-page.component.scss'], - standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)] }) export class WideNarrowPageComponent implements OnInit, OnDestroy { diff --git a/packages/angular-sdk-components/src/lib/_components/template/wss-nav-bar/wss-nav-bar.component.html b/packages/angular-sdk-components/src/lib/_components/template/wss-nav-bar/wss-nav-bar.component.html index 01c6b630..5aaabe69 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/wss-nav-bar/wss-nav-bar.component.html +++ b/packages/angular-sdk-components/src/lib/_components/template/wss-nav-bar/wss-nav-bar.component.html @@ -1,21 +1,23 @@ - +
-
{{ portalApp$ }}
+
{{ appName$ }}
+ +
-
+
{{ page.pyLabel }}
- + @@ -24,7 +26,6 @@
- diff --git a/packages/angular-sdk-components/src/lib/_components/template/wss-nav-bar/wss-nav-bar.component.scss b/packages/angular-sdk-components/src/lib/_components/template/wss-nav-bar/wss-nav-bar.component.scss index 6348d5df..b4768865 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/wss-nav-bar/wss-nav-bar.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/template/wss-nav-bar/wss-nav-bar.component.scss @@ -15,16 +15,12 @@ padding-top: 0.625rem; cursor: pointer; padding-right: 1rem; - &:hover { - background-color: var(--app-neutral-color); - } align-items: center; } .psdk-nav-logo { - width: 3.75rem; - padding: 0.625rem; - margin-right: 1.25rem; + max-width: 100%; + height: 3rem; } .psdk-nav-svg-icon { @@ -108,14 +104,11 @@ .psdk-nav-button-span { padding: 0 1rem; - color: var(--app-nav-color); - - &:hover { - background-color: var(--app-neutral-color); - } } .psdk-nav-oper-avatar { + border-radius: 100%; + background-color: var(--mat-sys-primary); margin: 0rem; padding: 0rem; min-width: 2.5rem; @@ -127,12 +120,14 @@ align-items: center; text-align: center; display: inline-flex; - background: var(--app-neutral-color); - color: var(--app-form-color); font-weight: normal; font-size: 1rem; } +mat-toolbar { + background-color: var(--mat-sys-surface-variant); +} + mat-list { padding: 0; } @@ -147,10 +142,6 @@ mat-list-item { cursor: pointer !important; height: auto !important; - &:hover { - // background-color: rgba(0, 0, 0, 0.5); - } - .flex-box { display: flex; align-items: center; diff --git a/packages/angular-sdk-components/src/lib/_components/template/wss-nav-bar/wss-nav-bar.component.ts b/packages/angular-sdk-components/src/lib/_components/template/wss-nav-bar/wss-nav-bar.component.ts index 48e152cf..8c98a152 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/wss-nav-bar/wss-nav-bar.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/wss-nav-bar/wss-nav-bar.component.ts @@ -19,7 +19,6 @@ interface WssNavBarProps { templateUrl: './wss-nav-bar.component.html', styleUrls: ['./wss-nav-bar.component.scss'], providers: [Utils], - standalone: true, imports: [CommonModule, MatListModule, MatMenuModule, MatIconModule, MatToolbarModule] }) export class WssNavBarComponent implements OnInit, OnDestroy { @@ -28,6 +27,7 @@ export class WssNavBarComponent implements OnInit, OnDestroy { @Input() pages$: any[]; @Input() caseTypes$: any[]; @Input() homePage: any; + @Input() portalLogoImage$: string; // For interaction with AngularPConnect angularPConnectData: AngularPConnectData = {}; @@ -37,10 +37,6 @@ export class WssNavBarComponent implements OnInit, OnDestroy { navExpandCollapse$: string; bShowCaseTypes$ = false; - portalApp$: string | undefined = ''; - portalLogoImage$: string; - showAppName$ = false; - portalOperator$: string | undefined; portalOperatorInitials$: string; @@ -127,12 +123,8 @@ export class WssNavBarComponent implements OnInit, OnDestroy { // const oData = this.pConn$.getDataObject(); - this.portalLogoImage$ = this.utils.getSDKStaticContentUrl().concat('assets/pzpega-logo-mark.svg'); this.portalOperator$ = PCore.getEnvironmentInfo().getOperatorName(); this.portalOperatorInitials$ = this.utils.getInitials(this.portalOperator$ ?? ''); - this.showAppName$ = this.configProps$.showAppName; - - this.portalApp$ = PCore.getEnvironmentInfo().getApplicationLabel(); }); } diff --git a/packages/angular-sdk-components/src/lib/_components/widget/app-announcement/app-announcement.component.html b/packages/angular-sdk-components/src/lib/_components/widget/app-announcement/app-announcement.component.html index ae9fb90e..768bd7be 100644 --- a/packages/angular-sdk-components/src/lib/_components/widget/app-announcement/app-announcement.component.html +++ b/packages/angular-sdk-components/src/lib/_components/widget/app-announcement/app-announcement.component.html @@ -3,11 +3,10 @@

{{ configProps$.header }}

{{ configProps$.description }}

-

{{ configProps$.label }}

  • {{ detail }}
- See what's new + See what's new diff --git a/packages/angular-sdk-components/src/lib/_components/widget/app-announcement/app-announcement.component.scss b/packages/angular-sdk-components/src/lib/_components/widget/app-announcement/app-announcement.component.scss index 4dec48b8..a4125cf8 100644 --- a/packages/angular-sdk-components/src/lib/_components/widget/app-announcement/app-announcement.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/widget/app-announcement/app-announcement.component.scss @@ -10,10 +10,10 @@ ul { padding-inline-start: 20px; } .psdk-announcement { - background-color: var(--app-form-color); + background-color: var(--mat-sys-surface-container); padding: 1rem; margin: 1rem 0; border-radius: 0.6125rem; border-left: 6px solid; - border-left-color: var(--app-primary-color); + border-left-color: var(--mat-sys-primary); } diff --git a/packages/angular-sdk-components/src/lib/_components/widget/app-announcement/app-announcement.component.ts b/packages/angular-sdk-components/src/lib/_components/widget/app-announcement/app-announcement.component.ts index cc59a11c..2d8fed8e 100644 --- a/packages/angular-sdk-components/src/lib/_components/widget/app-announcement/app-announcement.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/widget/app-announcement/app-announcement.component.ts @@ -15,7 +15,6 @@ interface AppAnnouncementProps { selector: 'app-app-announcement', templateUrl: './app-announcement.component.html', styleUrls: ['./app-announcement.component.scss'], - standalone: true, imports: [CommonModule, MatButtonModule] }) export class AppAnnouncementComponent implements OnInit { diff --git a/packages/angular-sdk-components/src/lib/_components/widget/attachment/Attachment.types.ts b/packages/angular-sdk-components/src/lib/_components/widget/attachment/Attachment.types.ts new file mode 100644 index 00000000..7d89ec1f --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/widget/attachment/Attachment.types.ts @@ -0,0 +1,92 @@ +export interface ResponseProps { + ID: string; + extension: string; + createDateTime?: Date | string | number; + createUser?: string; + name: string; +} + +export interface AttachmentActions { + rel: string; + href: string; + title: string; + type: string; +} + +export interface AttachmentLinks { + delete: AttachmentActions; + download: AttachmentActions; + edit: AttachmentActions; +} +export interface FileObject extends File { + icon?: string; + ID: string; + fileName: string; + category: string; + responseType: string; + fileType: string; + mimeType: string; + extension: string; + thumbnail?: string; + nameWithExt: string; + inProgress?: boolean; + progress?: number; + handle: string; + label: string; + delete?: boolean; + error?: boolean; + description: string; + + props: { + icon?: string; + id: string; + error?: string; + format?: string; + name: string; + thumbnail?: string; + onPreview?: () => void; + onDelete?: () => void; + onOpen?: () => void; + onEdit?: () => void; + onCancel?: () => void; + }; + responseProps: ResponseProps; + value?: { + filename: string; + ID: string; + thumbnail: string; + }; + categoryName: string; + createTime: string; + createdBy: string; + createdByName: string; + links: AttachmentLinks; + name: string; + meta?: any; +} + +export interface ReduxAttachments { + ID?: string; + pzInsKey?: string; + FileName: string; + Category: string; + MimeType?: string; + FileExtension: string; + error: string | null; + localAttachment: boolean; + thumbnail?: string; + fileIndex?: number; + instruction?: string; +} + +export interface PageInstructionOptions { + allowMultiple: boolean; + isMultiAttachmentInInlineEditTable: boolean; + attachmentCount: number; + insertPageInstruction: boolean; + deletePageInstruction: boolean; + deleteIndex: number; + insertRedux: boolean; + isOldAttachment: boolean; + deleteRedux: boolean; +} diff --git a/packages/angular-sdk-components/src/lib/_components/widget/attachment/AttachmentUtils.ts b/packages/angular-sdk-components/src/lib/_components/widget/attachment/AttachmentUtils.ts new file mode 100644 index 00000000..08799459 --- /dev/null +++ b/packages/angular-sdk-components/src/lib/_components/widget/attachment/AttachmentUtils.ts @@ -0,0 +1,287 @@ +import download from 'downloadjs'; + +import type { FileObject, PageInstructionOptions, ReduxAttachments } from './Attachment.types'; + +const megabyteSize = 1048576; + +export const isContentBinary = (headers: Record) => { + return headers && headers['content-transfer-encoding'] === 'binary'; +}; + +export const isContentBase64 = (headers: Record) => { + return headers && headers['content-transfer-encoding'] === 'base64'; +}; + +export const validateMaxSize = (fileObj: Record, maxSizeInMB: string) => { + const fileSize = (fileObj['size'] / megabyteSize).toFixed(2); + return parseFloat(fileSize) < parseFloat(maxSizeInMB); +}; + +export const validateFileExtension = (fileObj: Record, allowedExtensions: string) => { + if (!allowedExtensions) { + return true; + } + const allowedExtensionList = allowedExtensions + .toLowerCase() + .split(',') + .map(item => item.replaceAll('.', '').trim()); + const extension = fileObj['name'].split('.').pop()?.toLowerCase() || ''; + return allowedExtensionList.includes(extension); +}; + +export const fileDownload = (data: string | Blob, fileName: string, ext: string | null, headers: Record) => { + const name = ext ? `${fileName}.${ext}` : fileName; + // Temp fix: downloading EMAIl type attachment as html file + if (ext === 'html') { + download(isContentBase64(headers) ? atob(data as string) : data, name, 'text/html'); + } else if (isContentBinary(headers)) { + download(data, name); + } else { + download(atob(data as string), name); + } +}; + +export const fileDownloadVar = (content: { data: string; headers: Record }, type: string, name: string, extension: string) => { + if (type === 'FILE' || type === undefined) { + fileDownload(content.data, name, extension, content.headers); + } else if (type === 'URL') { + let { data } = content; + if (!/^(http|https):\/\//.test(data)) { + data = `//${data}`; + } + window.open(content.data, '_blank'); + } else if (type === 'EMAIL') { + // Temp Fix: for EMAIL type attachment + fileDownload(content.data, name, 'html', content.headers); + } +}; + +export const getMappedValue = (value: string): string => { + return PCore.getEnvironmentInfo().getKeyMapping(value) ?? value; +}; + +const generateInstructions = ( + files: FileObject[], + pConn: typeof PConnect, + attachmentsInModal: ReduxAttachments[] | Pick[], + options: { + allowMultiple: boolean; + isMultiAttachmentInInlineEditTable: boolean; + attachmentCount: number; + insertPageInstruction: boolean; + deletePageInstruction: boolean; + deleteIndex: number; + } +) => { + const { allowMultiple, isMultiAttachmentInInlineEditTable, attachmentCount, insertPageInstruction, deletePageInstruction, deleteIndex } = options; + const transformedAttachments: ReduxAttachments[] = []; + let valueRef = pConn.getStateProps().value; + valueRef = valueRef?.indexOf('.') === 0 ? valueRef.substring(1) : valueRef; + const uniqueKey = getMappedValue('pzInsKey'); + files.forEach((file, index) => { + const filename = file.value?.filename || file.props?.name || ''; + const payload = { + [uniqueKey]: file.value?.ID || file.props?.id, + FileName: filename, + Category: '', + // MimeType: getMimeTypeFromFile(filename), + FileExtension: filename.split('.').pop() ?? filename, + error: file.props?.error || null, + localAttachment: true, + thumbnail: file.value?.thumbnail + }; + transformedAttachments.push(payload); + if (payload.error) { + return; // Don't process page instructions for error files, skip current iteration + } + if (allowMultiple) { + if (isMultiAttachmentInInlineEditTable) { + if (insertPageInstruction) { + attachmentsInModal.push({ ...payload, instruction: 'insert' } as any); + } else if (deletePageInstruction) { + (attachmentsInModal as Pick[]).push({ + instruction: 'delete', + fileIndex: deleteIndex + }); + } + } else if (insertPageInstruction) { + pConn.getListActions().insert({ ID: payload[uniqueKey] }, attachmentCount + index, undefined, { + skipStateUpdate: true + }); + } else if (deletePageInstruction) { + pConn.getListActions().deleteEntry(deleteIndex, undefined, { skipStateUpdate: true }); + } + } else if (insertPageInstruction) { + pConn.getListActions().replacePage(`.${valueRef}`, { ID: payload[uniqueKey] }, { skipStateUpdate: true }); + } else if (deletePageInstruction) { + pConn.getListActions().deletePage(`.${valueRef}`, { skipStateUpdate: true }); + } + }); + return transformedAttachments; +}; + +export const updateReduxState = ( + transformedAttachments: ReduxAttachments[], + pConn: typeof PConnect, + valueRef: string, + options: PageInstructionOptions +) => { + const { allowMultiple, isOldAttachment, insertRedux, deleteRedux } = options; + let deleteIndex = -1; + + if (allowMultiple || isOldAttachment) { + transformedAttachments.forEach(attachment => { + const key = isOldAttachment ? `${valueRef}.pxResults` : valueRef; + const existingAttachments: ReduxAttachments[] = PCore.getStoreValue(`.${key}`, pConn.getPageReference(), pConn.getContextName()) || []; + + if (insertRedux) { + const actionPayLoad = { + type: 'LIST_ACTION', + payload: { + instruction: 'INSERT', + context: pConn.getContextName(), + referenceList: `${pConn.getPageReference()}.${key}`, + listIndex: existingAttachments.length, + content: attachment + } + }; + PCore.getStore()?.dispatch(actionPayLoad); + } else if (deleteRedux) { + const uniqueKey = getMappedValue('pzInsKey'); + deleteIndex = existingAttachments.findIndex( + existingAttachment => + existingAttachment[uniqueKey as keyof ReduxAttachments] === transformedAttachments[0][uniqueKey as keyof ReduxAttachments] + ); + const actionPayLoad = { + type: 'LIST_ACTION', + payload: { + instruction: 'DELETE', + context: pConn.getContextName(), + referenceList: `${pConn.getPageReference()}.${key}`, + listIndex: deleteIndex + } + }; + PCore.getStore()?.dispatch(actionPayLoad); + } + }); + } else if (insertRedux) { + const actionPayLoad = { + type: 'LIST_ACTION', + payload: { + instruction: 'REPLACE', + context: pConn.getContextName(), + referenceList: `${pConn.getPageReference()}.${valueRef}`, + content: transformedAttachments[0] + } + }; + PCore.getStore()?.dispatch(actionPayLoad); + } else if (deleteRedux) { + const actionPayLoad = { + type: 'LIST_ACTION', + payload: { + instruction: 'DELETEPAGE', + context: pConn.getContextName(), + referenceList: `${pConn.getPageReference()}.${valueRef}` + } + }; + PCore.getStore()?.dispatch(actionPayLoad); + } +}; + +export const insertAttachments = ( + files: FileObject[], + pConn: typeof PConnect, + attachmentsInModal: ReduxAttachments[], + options: PageInstructionOptions +) => { + const { isMultiAttachmentInInlineEditTable } = options; + let valueRef = pConn.getStateProps().value; + valueRef = valueRef?.indexOf('.') === 0 ? valueRef.substring(1) : valueRef; + const transformedAttachments = generateInstructions(files, pConn, attachmentsInModal, { + ...options, + insertPageInstruction: true + }); + + if (isMultiAttachmentInInlineEditTable) { + return; // For attachments within modal, redux update is not necessary yet, as modal isn't submitted at this stage + } + updateReduxState(transformedAttachments, pConn, valueRef, { ...options, insertRedux: true }); +}; + +export const deleteAttachments = ( + files: FileObject[], + pConn: typeof PConnect, + attachmentsInModal: Pick[], + options: PageInstructionOptions +) => { + const { isMultiAttachmentInInlineEditTable } = options; + let valueRef = pConn.getStateProps().value; + valueRef = valueRef?.indexOf('.') === 0 ? valueRef.substring(1) : valueRef; + const transformedAttachments = generateInstructions(files, pConn, attachmentsInModal, { + ...options, + deletePageInstruction: true + }); + + if (isMultiAttachmentInInlineEditTable) { + return; // For attachments within modal, redux update is not necessary yet, as modal isn't submitted at this stage + } + updateReduxState(transformedAttachments, pConn, valueRef, { ...options, deleteRedux: true }); +}; + +export const clearFieldErrorMessages = (pConn: typeof PConnect) => { + const fieldName = pConn.getStateProps().value; + PCore.getMessageManager().clearMessages({ + type: PCore.getConstants().MESSAGES.MESSAGES_TYPE_ERROR, + property: fieldName, + pageReference: pConn.getPageReference(), + context: pConn.getContextName() + }); +}; + +export const onFileDownload = (responseProps, context) => { + const { ID, name, extension, type, category, responseType } = responseProps; + + if (category !== 'pxDocument') { + ( + PCore.getAttachmentUtils().downloadAttachment(ID, context, responseType) as Promise<{ + data: string; + headers: Record; + }> + ) + .then(content => { + fileDownloadVar(content, type, name, extension); + }) + + .catch(console.error); + } else { + ( + PCore.getAttachmentUtils().downloadDocument(ID, context) as Promise<{ + data: string; + headers: Record; + }> + ) + .then(content => { + fileDownloadVar(content, type, name, extension); + }) + + .catch(console.error); + } +}; + +// Prepares new structure as per Cosmos component +export const transformAttachments = attachments => { + const transformedFiles = [...attachments]; + let deleteIndex = -1; + transformedFiles.forEach(attachment => { + attachment.props.id = attachment.responseProps.ID; + attachment.props.format = attachment.props.name.split('.').pop(); + if (attachment.props.error) { + attachment.responseProps.deleteIndex = deleteIndex; + } else { + deleteIndex += 1; + attachment.responseProps.deleteIndex = deleteIndex; + } + }); + + return transformedFiles; +}; diff --git a/packages/angular-sdk-components/src/lib/_components/widget/attachment/attachment.component.html b/packages/angular-sdk-components/src/lib/_components/widget/attachment/attachment.component.html index 3e1cd4be..73261f3d 100644 --- a/packages/angular-sdk-components/src/lib/_components/widget/attachment/attachment.component.html +++ b/packages/angular-sdk-components/src/lib/_components/widget/attachment/attachment.component.html @@ -25,7 +25,7 @@

{{ validateMessage }}
-
+
@@ -36,7 +36,7 @@
{{ file.props.meta }}
-
@@ -45,7 +45,7 @@ - +
diff --git a/packages/angular-sdk-components/src/lib/_components/widget/attachment/attachment.component.scss b/packages/angular-sdk-components/src/lib/_components/widget/attachment/attachment.component.scss index c015c9d6..6f4e9354 100644 --- a/packages/angular-sdk-components/src/lib/_components/widget/attachment/attachment.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/widget/attachment/attachment.component.scss @@ -5,7 +5,7 @@ } .psdk-modal-file-selector { - border: 1px dashed var(--app-neutral-dark-color); + border: 1px dashed var(--mat-sys-neutral-variant20); width: 100%; padding: 0.3rem; text-align: center; @@ -16,15 +16,13 @@ display: inline; content: ' *'; vertical-align: top; - color: var(--app-neutral-dark-color); } .file-error { - color: var(--app-error-light-color); } .psdk-modal-file-selector-error { - border: 1px dashed var(--app-error-light-color); + border: 1px dashed var(--mat-sys-error); width: 100%; padding: 0.3rem; text-align: center; @@ -47,14 +45,14 @@ } .psdk-attachment-list { - border: 1px solid var(--app-neutral-color); + border: 1px solid var(--mat-sys-secondary); } ::ng-deep .mat-mdc-form-field-infix { width: auto; } .psdk-modal-file-selector { - border: 1px dashed var(--app-neutral-dark-color); + border: 1px dashed var(--mat-sys-neutral-variant20); padding: 0.5rem; text-align: center; position: relative; @@ -64,15 +62,13 @@ display: inline; content: ' *'; vertical-align: top; - color: var(--app-neutral-dark-color); } .file-error { - color: var(--app-error-light-color); } .psdk-modal-file-selector-error { - border: 1px dashed var(--app-error-light-color); + border: 1px dashed var(--mat-sys-error); padding: 0.5rem; text-align: center; position: relative; @@ -94,7 +90,7 @@ } .psdk-attachment-list { - border: 1px solid var(--app-neutral-color); + border: 1px solid var(--mat-sys-secondary); } ::ng-deep .mat-mdc-form-field-infix { @@ -130,6 +126,7 @@ .psdk-attachment-card-svg-icon { width: 2.5rem; + filter: var(--app-primary-color-filter); } .psdk-utility-button { @@ -142,6 +139,7 @@ .psdk-utility-card-action-svg-icon { width: 1.4rem; display: inline-block; + filter: var(--app-primary-color-filter); } .file-div { @@ -153,7 +151,7 @@ } .file-div-error { - border: 1px dashed var(--app-error-light-color); + border: 1px dashed var(--mat-sys-error); width: 100%; padding: 0.5rem; text-align: center; @@ -169,5 +167,4 @@ display: inline; content: ' *'; vertical-align: top; - color: var(--app-neutral-dark-color); } diff --git a/packages/angular-sdk-components/src/lib/_components/widget/attachment/attachment.component.ts b/packages/angular-sdk-components/src/lib/_components/widget/attachment/attachment.component.ts index 94eaf6bd..0ab18f1f 100644 --- a/packages/angular-sdk-components/src/lib/_components/widget/attachment/attachment.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/widget/attachment/attachment.component.ts @@ -1,29 +1,39 @@ -import { Component, OnInit, Input, NgZone, forwardRef, OnDestroy, ViewChild, ElementRef } from '@angular/core'; +import { Component, OnInit, Input, OnDestroy, ViewChild, ElementRef } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { CommonModule } from '@angular/common'; import { MatButtonModule } from '@angular/material/button'; import { MatMenuModule } from '@angular/material/menu'; import { MatIconModule } from '@angular/material/icon'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; -import download from 'downloadjs'; import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect'; import { Utils } from '../../../_helpers/utils'; -import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component'; import { PConnFieldProps } from '../../../_types/PConnProps.interface'; +import { + clearFieldErrorMessages, + deleteAttachments, + getMappedValue, + insertAttachments, + onFileDownload, + transformAttachments, + validateFileExtension, + validateMaxSize +} from './AttachmentUtils'; +import { PageInstructionOptions } from './Attachment.types'; interface AttachmentProps extends Omit { // If any, enter additional props that only exist on this component value: any; extensions: any; allowMultiple: boolean; + isTableFormatter: boolean; + editMode: string; } @Component({ selector: 'app-attachment', templateUrl: './attachment.component.html', styleUrls: ['./attachment.component.scss'], - standalone: true, - imports: [CommonModule, MatProgressSpinnerModule, MatMenuModule, MatIconModule, MatButtonModule, forwardRef(() => ComponentMapperComponent)] + imports: [CommonModule, MatProgressSpinnerModule, MatMenuModule, MatIconModule, MatButtonModule] }) export class AttachmentComponent implements OnInit, OnDestroy { @Input() pConn$: typeof PConnect; @@ -33,73 +43,74 @@ export class AttachmentComponent implements OnInit, OnDestroy { angularPConnectData: AngularPConnectData = {}; @ViewChild('uploader', { static: false }) fileInput: ElementRef; + localizationService: any; + contextName: string; + actionSequencer: any; + caseID: any; label$ = ''; value$: any; bRequired$ = false; bReadonly$ = false; bDisabled$ = false; bVisible$ = true; - bLoading$ = false; - bShowSelector$ = true; - att_categoryName: string; - fileTemp: any = {}; - caseID: any; allowMultiple$ = false; extensions$ = ''; + displayMode: string | undefined; status = ''; validateMessage: string | undefined = ''; valueRef: string; - imagePath$: string; localizedVal = PCore.getLocaleUtils().getLocaleValue; - localeCategory = 'CosmosFields'; - uploadMultipleFilesLabel = this.localizedVal('file_upload_text_multiple', this.localeCategory); - uploadSingleFileLabel = this.localizedVal('file_upload_text_one', this.localeCategory); + uploadMultipleFilesLabel = this.localizedVal('file_upload_text_multiple', 'CosmosFields'); + uploadSingleFileLabel = this.localizedVal('file_upload_text_one', 'CosmosFields'); filesWithError: any = []; files: any = []; - categoryName: string; - displayMode: string | undefined; srcImg: any; deleteIcon: string; tempFilesToBeUploaded: any[]; + attachments: any; + attachmentCount: number = 0; + isOldAttachment = false; + multiAttachmentsInInlineEdit: any = []; + isMultiAttachmentInInlineEditTable; + overrideLocalState = false; + constructor( private angularPConnect: AngularPConnectService, - private utils: Utils, - private ngZone: NgZone + private utils: Utils ) {} ngOnInit(): void { - // // First thing in initialization is registering and subscribing to the AngularPConnect service - this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); - this.caseID = PCore.getStoreValue('.pyID', 'caseInfo.content', this.pConn$.getContextName()); this.srcImg = this.utils.getImageSrc('document-doc', this.utils.getSDKStaticContentUrl()); this.deleteIcon = this.utils.getImageSrc('trash', this.utils.getSDKStaticContentUrl()); - this.checkAndUpdate(); - this.getAttachments(); - } - getAttachments() { - let tempUploadedFiles = this.getCurrentAttachmentsList(this.getAttachmentKey(this.valueRef), this.pConn$.getContextName()); - tempUploadedFiles = tempUploadedFiles.filter(f => f.label === this.valueRef && f.delete !== true); - this.files?.map(f => { - return f.responseProps?.pzInsKey && !f.responseProps.pzInsKey.includes('temp') - ? { - ...f, - props: { - ...f.props, - onDelete: () => this.deleteFile(f) - } - } - : { ...f }; - }); - this.files = [...this.files, ...tempUploadedFiles]; - PCore.getPubSubUtils().subscribe( - PCore.getConstants().PUB_SUB_EVENTS.CASE_EVENTS.ASSIGNMENT_SUBMISSION, - this.resetAttachmentStoredState.bind(this), - this.caseID - ); - return () => { - PCore.getPubSubUtils().unsubscribe(PCore.getConstants().PUB_SUB_EVENTS.CASE_EVENTS.ASSIGNMENT_SUBMISSION, this.caseID); - }; + this.localizationService = this.pConn$.getLocalizationService(); + this.contextName = this.pConn$.getContextName(); + this.actionSequencer = PCore.getActionsSequencer(); + + this.caseID = PCore.getStoreValue(`.${getMappedValue('pyID')}`, PCore.getResolvedConstantValue('caseInfo.content'), this.contextName); + + this.displayMode = this.pConn$.getConfigProps().displayMode; + + if (this.displayMode !== 'DISPLAY_ONLY') { + PCore.getPubSubUtils().subscribe( + PCore.getConstants().PUB_SUB_EVENTS.CASE_EVENTS.ASSIGNMENT_SUBMISSION, + () => { + this.overrideLocalState = true; + }, + this.caseID + ); + } + + const { value } = this.pConn$.getConfigProps(); + const rawValue = this.pConn$.getComponentConfig().value; + const isAttachmentAnnotationPresent = typeof rawValue === 'object' ? false : rawValue?.includes('@ATTACHMENT'); + const { attachments, isOldAttachment } = isAttachmentAnnotationPresent ? value : PCore.getAttachmentUtils().prepareAttachmentData(value); + this.isOldAttachment = isOldAttachment; + this.attachments = attachments; + this.files = transformAttachments(attachments); + + this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange); + this.checkAndUpdate(); } checkAndUpdate() { @@ -121,27 +132,15 @@ export class AttachmentComponent implements OnInit, OnDestroy { updateSelf() { const configProps: AttachmentProps = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as AttachmentProps; const stateProps = this.pConn$.getStateProps(); - const { value, label, extensions, displayMode } = configProps; + const { value, label, required, disabled, readOnly, extensions, displayMode, isTableFormatter, allowMultiple, editMode } = configProps; - if (configProps.required != null) { - this.bRequired$ = this.utils.getBooleanValue(configProps.required); - } + this.bRequired$ = this.utils.getBooleanValue(required); if (configProps.visibility != null) { this.bVisible$ = this.utils.getBooleanValue(configProps.visibility); } - - // disabled - if (configProps.disabled != undefined) { - this.bDisabled$ = this.utils.getBooleanValue(configProps.disabled); - } - - if (configProps.readOnly != null) { - this.bReadonly$ = this.utils.getBooleanValue(configProps.readOnly); - } - - if (configProps.allowMultiple != null) { - this.allowMultiple$ = this.utils.getBooleanValue(configProps.allowMultiple); - } + this.bDisabled$ = this.utils.getBooleanValue(disabled); + this.bReadonly$ = this.utils.getBooleanValue(readOnly); + this.allowMultiple$ = this.utils.getBooleanValue(allowMultiple); this.label$ = label; this.value$ = value; @@ -151,142 +150,113 @@ export class AttachmentComponent implements OnInit, OnDestroy { this.extensions$ = extensions; this.valueRef = this.pConn$.getStateProps().value; this.valueRef = this.valueRef.startsWith('.') ? this.valueRef.substring(1) : this.valueRef; - this.displayMode = displayMode; - /* this is a temporary fix because required is supposed to be passed as a boolean and NOT as a string */ - let { required, disabled } = configProps; - [required, disabled] = [required, disabled].map(prop => prop === true || (typeof prop === 'string' && prop === 'true')); - this.categoryName = ''; - if (value && value.pyCategoryName) { - this.categoryName = value.pyCategoryName; - } + this.pConn$.setReferenceList(`.${this.valueRef}`); - if (value?.pxResults && +value.pyCount > 0) { - this.files = value.pxResults.map(f => this.buildFilePropsFromResponse(f)); + this.displayMode = displayMode; + this.isMultiAttachmentInInlineEditTable = isTableFormatter && allowMultiple && editMode === 'tableRows'; + + const rawValue = this.pConn$.getComponentConfig().value; + const isAttachmentAnnotationPresent = typeof rawValue === 'object' ? false : rawValue?.includes('@ATTACHMENT'); + const { attachments, isOldAttachment } = isAttachmentAnnotationPresent ? value : PCore.getAttachmentUtils().prepareAttachmentData(value); + const isAttachmentsChanged = !PCore.isDeepEqual(this.attachments, attachments); + this.isOldAttachment = isOldAttachment; + this.attachments = attachments; + + // update the attachments shown in the UI + if (isAttachmentsChanged) { + this.updateAttachments(); } - - this.updateAttachments(); - } - - buildFilePropsFromResponse(respObj) { - return { - props: { - meta: `${respObj.pyCategoryName}, ${respObj.pxCreateOperator}`, - name: respObj.pyAttachName, - icon: this.utils.getIconFromFileType(respObj.pyMimeFileExtension) - }, - responseProps: { - ...respObj - } - }; } updateAttachments() { - if (this.files.length > 0 && this.displayMode !== 'DISPLAY_ONLY') { - const currentAttachmentList = this.getCurrentAttachmentsList(this.getAttachmentKey(this.valueRef), this.pConn$.getContextName()); - // block duplicate files to redux store when added 1 after another to prevent multiple duplicates being added to the case on submit - const tempFiles = this.files.filter(f => currentAttachmentList.findIndex(fr => fr.ID === f.ID) === -1 && !f.inProgress && f.responseProps); - const updatedAttList = [...currentAttachmentList, ...tempFiles]; - this.updateAttachmentState(this.pConn$, this.getAttachmentKey(this.valueRef), updatedAttList); + if (this.overrideLocalState) { + const serverFiles = transformAttachments(this.attachments); + this.overrideLocalState = false; + this.attachmentCount = this.attachments.length; + this.filesWithError = []; + this.files = serverFiles; + } else { + // Determine whether refresh call has overridden any error files in redux, push error files back to redux from local state to perform client side validation during assignment submit + const errorFiles = this.attachments.filter(attachment => attachment.props.error); + if (errorFiles.length === 0 && this.filesWithError.length > 0) { + // Check if local file state contains error files and push those to redux + const uniqueKey = getMappedValue('pzInsKey'); + const transformedErrorFiles = this.filesWithError.map(errorFile => { + const filename = errorFile.props.name; + return { + [uniqueKey]: errorFile.props.id, + FileName: filename, + Category: '', + FileExtension: filename.split('.').pop() ?? filename, + error: errorFile.props.error || null + }; + }); + let key = ''; + let updatedAttachments: any = []; + if (this.allowMultiple$ || this.isOldAttachment) { + key = this.isOldAttachment ? `${this.valueRef}.pxResults` : this.valueRef; + const existingAttachments = PCore.getStoreValue(`.${key}`, this.pConn$.getPageReference(), this.pConn$.getContextName()) || []; + updatedAttachments = [...existingAttachments, ...transformedErrorFiles]; + } else { + key = this.valueRef; + updatedAttachments = transformedErrorFiles[0]; + } + PCore.getStateUtils().updateState(this.pConn$.getContextName(), key, updatedAttachments, { + pageReference: this.pConn$.getPageReference(), + isArrayDeepMerge: false, + removePropertyFromChangedList: true + }); + } } } - resetAttachmentStoredState() { - PCore.getStateUtils().updateState(this.pConn$?.getContextName(), this.getAttachmentKey(this.valueRef), undefined, { - pageReference: 'context_data', - isArrayDeepMerge: false - }); - } - downloadFile(fileObj: any) { - PCore.getAttachmentUtils() - // @ts-ignore - 3rd parameter "responseEncoding" should be optional - .downloadAttachment(fileObj.pzInsKey, this.pConn$.getContextName()) - .then((content: any) => { - const extension = fileObj.pyAttachName.split('.').pop(); - this.fileDownload(content.data, fileObj.pyFileName, extension); - }) - .catch(e => { - console.log(e); - }); - } - - fileDownload = (data, fileName, ext) => { - const file = ext ? `${fileName}.${ext}` : fileName; - download(atob(data), file); - }; - - getAttachmentKey = (name = '') => (name ? `attachmentsList.${name}` : 'attachmentsList'); - - getCurrentAttachmentsList(key, context) { - return PCore.getStoreValue(`.${key}`, 'context_data', context) || []; - } - - validateMaxSize(fileObj, maxSizeInMB): boolean { - const fileSize = (fileObj.size / 1048576).toFixed(2); - return parseFloat(fileSize) < parseFloat(maxSizeInMB); + onFileDownload(fileObj, this.contextName); } - validateFileExtension = (fileObj, allowedExtensions) => { - if (!allowedExtensions) { - return true; + deleteFile(file, fileIndex: number) { + if (this.filesWithError.length > 0) { + this.filesWithError = this.filesWithError.filter(fileWithError => fileWithError.props.id !== file.props.id); + if (this.filesWithError.length === 0) { + clearFieldErrorMessages(this.pConn$); + } } - const allowedExtensionList = allowedExtensions - .toLowerCase() - .split(',') - .map(item => item.replaceAll('.', '').trim()); - const extension = fileObj.name.split('.').pop().toLowerCase(); - return allowedExtensionList.includes(extension); - }; - - updateAttachmentState(pConn, key, attachments) { - PCore.getStateUtils().updateState(this.pConn$.getContextName(), key, attachments, { - pageReference: 'context_data', - isArrayDeepMerge: false - }); - } - deleteFile(file) { - const attachmentsList: any[] = []; - let currentAttachmentList = this.getCurrentAttachmentsList(this.getAttachmentKey(this.valueRef), this.pConn$.getContextName()); - - // If file to be deleted is the one added in previous stage i.e. for which a file instance is created in server - // no need to filter currentAttachmentList as we will get another entry of file in redux with delete & label - // eslint-disable-next-line no-unsafe-optional-chaining - if (this.value$ && this.value$?.pxResults && +this.value$?.pyCount > 0 && file.responseProps && file?.responseProps?.pzInsKey !== 'temp') { - const updatedAttachments = this.files.map(f => { - if (f.responseProps && f.responseProps.pzInsKey === file.responseProps.pzInsKey) { - return { ...f, delete: true, label: this.valueRef }; + if (file.inProgress) { + // @ts-ignore - Expected 1 arguments, but got 2.ts(2554) + PCore.getAttachmentUtils().cancelRequest(file.props.id, this.contextName); + this.actionSequencer.deRegisterBlockingAction(this.contextName).catch(() => {}); + this.files = this.files.filter(localFile => localFile.props.id !== file.props.id); + } else { + deleteAttachments([file], this.pConn$, this.multiAttachmentsInInlineEdit, { + allowMultiple: this.allowMultiple$, + isOldAttachment: this.isOldAttachment, + isMultiAttachmentInInlineEditTable: this.isMultiAttachmentInInlineEditTable, + attachmentCount: this.attachmentCount, + deleteIndex: fileIndex + } as any); + + // Filter out without deleted file and reset the file indexes + let tempLocalFiles = [...this.files]; + tempLocalFiles = tempLocalFiles.filter(localFile => localFile.props.id !== file.props.id); + tempLocalFiles.forEach(localFile => { + if (!localFile.props.error && !file.props.error) { + const updatedDeleteIndex = + localFile.responseProps.deleteIndex > fileIndex ? localFile.responseProps.deleteIndex - 1 : localFile.responseProps.deleteIndex; + + localFile.responseProps.deleteIndex = updatedDeleteIndex; } - return f; }); - - // updating the redux store to help form-handler in passing the data to delete the file from server - this.updateAttachmentState(this.pConn$, this.getAttachmentKey(this.valueRef), [...updatedAttachments]); - const newlyAddedFiles = this.files.filter(f => !!f.ID); - const filesPostDelete = this.files.filter( - f => f.responseProps?.pzInsKey !== 'temp' && f.responseProps?.pzInsKey !== file.responseProps?.pzInsKey - ); - this.files = [...filesPostDelete, ...newlyAddedFiles]; - } // if the file being deleted is the added in this stage i.e. whose data is not yet created in server - else { - // filter newly added files in this stage, later the updated current stage files will be added to redux once files state is updated - currentAttachmentList = currentAttachmentList.filter(f => f.ID !== file.ID); - this.files = this.files.filter(f => f.ID !== file.ID); - - this.updateAttachmentState(this.pConn$, this.getAttachmentKey(this.valueRef), [...currentAttachmentList, ...attachmentsList]); - if (file.inProgress) { - // @ts-ignore - 3rd parameter "responseEncoding" should be optional - PCore.getAttachmentUtils().cancelRequest(file.ID, this.pConn$.getContextName()); + this.files = tempLocalFiles; + if (!file.props.error) { + this.attachmentCount -= 1; } } - this.filesWithError = this.filesWithError?.filter(f => f.ID !== file.ID); - if (this.filesWithError.length === 0) { - this.clearFieldErrorMessages(); + if (this.fileInput?.nativeElement) { + this.fileInput.nativeElement.value = ''; } - // eslint-disable-next-line @typescript-eslint/no-unused-expressions - this.fileInput && this.fileInput.nativeElement.value ? null : ''; } onFileAdded(event) { @@ -296,102 +266,121 @@ export class AttachmentComponent implements OnInit, OnDestroy { this.tempFilesToBeUploaded = [ ...addedFiles.map((f: any, index) => { f.ID = `${new Date().getTime()}I${index}`; - f.inProgress = true; f.props = { type: f.type, name: f.name, + id: f.ID, + format: f.name.split('.').pop(), icon: this.utils.getIconFromFileType(f.type), - onDelete: () => this.deleteFile(f) + thumbnail: window.URL.createObjectURL(f) }; - if (!this.validateMaxSize(f, maxAttachmentSize)) { + + if (!validateMaxSize(f, maxAttachmentSize)) { f.props.error = true; - f.inProgress = false; - f.props.meta = this.pConn$.getLocalizedValue(`File is too big. Max allowed size is ${maxAttachmentSize}MB.`, '', ''); - } else if (!this.validateFileExtension(f, this.extensions$)) { + f.props.meta = this.localizationService.getLocalizedText(`File is too big. Max allowed size is ${maxAttachmentSize}MB.`); + } else if (!validateFileExtension(f, this.extensions$)) { f.props.error = true; - f.inProgress = false; - f.props.meta = `${this.pConn$.getLocalizedValue( - 'File has invalid extension. Allowed extensions are:', - '', + f.props.meta = `${this.localizationService.getLocalizedText('File has invalid extension. Allowed extensions are:')} ${this.extensions$.replaceAll( + '.', '' - )} ${this.extensions$.replaceAll('.', '')}`; + )}`; } + if (f.props.error) { - const fieldName = this.pConn$.getStateProps().value; - const context = this.pConn$.getContextName(); + const fieldName = (this.pConn$.getStateProps() as any).value; PCore.getMessageManager().addMessages({ messages: [ { type: 'error', - message: this.pConn$.getLocalizedValue('Error with one or more files', '', '') + message: this.localizationService.getLocalizedText('Error with one or more files') } ], property: fieldName, pageReference: this.pConn$.getPageReference(), - context + context: this.contextName }); } return f; }) ]; + const tempFilesWithError = this.tempFilesToBeUploaded.filter(f => f.props.error); if (tempFilesWithError.length > 0) { - this.filesWithError = tempFilesWithError; + this.filesWithError = [...this.filesWithError, ...tempFilesWithError]; + + insertAttachments(tempFilesWithError, this.pConn$, this.multiAttachmentsInInlineEdit, { + allowMultiple: this.allowMultiple$, + isOldAttachment: this.isOldAttachment, + isMultiAttachmentInInlineEditTable: this.isMultiAttachmentInInlineEditTable, + attachmentCount: this.attachmentCount + } as PageInstructionOptions); } + if (!this.allowMultiple$) { this.files = [...this.tempFilesToBeUploaded]; } else { this.files = [...this.files, ...this.tempFilesToBeUploaded]; } - this.uploadFiles(); + + this.actionSequencer.registerBlockingAction(this.contextName).then(() => { + this.uploadFiles(); + }); + } + + onUploadProgress(id, ev) { + const progress = Math.floor((ev.loaded / ev.total) * 100); + this.files = this.files.map(localFile => { + if (localFile.props?.id === id) { + localFile.inProgress = true; + localFile.props.progress = progress; + } + return localFile; + }); } - clearFieldErrorMessages() { - const fieldName = this.pConn$.getStateProps().value; - const context = this.pConn$.getContextName(); - PCore.getMessageManager().clearMessages({ - type: PCore.getConstants().MESSAGES.MESSAGES_TYPE_ERROR, + populateErrorAndUpdateRedux(file) { + const fieldName = (this.pConn$.getStateProps() as any).value; + // set errors to property to block submit even on errors in file upload + PCore.getMessageManager().addMessages({ + messages: [ + { + type: 'error', + message: this.localizationService.getLocalizedText('Error with one or more files') + } + ], property: fieldName, pageReference: this.pConn$.getPageReference(), - context + context: this.contextName }); + insertAttachments([file], this.pConn$, this.multiAttachmentsInInlineEdit, { + allowMultiple: this.allowMultiple$, + isOldAttachment: this.isOldAttachment, + isMultiAttachmentInInlineEditTable: this.isMultiAttachmentInInlineEditTable, + attachmentCount: this.attachmentCount + } as any); } - onUploadProgress() {} - - errorHandler(isFetchCanceled, attachedFile) { + errorHandler(isFetchCanceled, file) { return error => { if (!isFetchCanceled(error)) { - let uploadFailMsg = this.pConn$.getLocalizedValue('Something went wrong', '', ''); + let uploadFailMsg = this.localizationService.getLocalizedText('Something went wrong'); if (error.response && error.response.data && error.response.data.errorDetails) { - uploadFailMsg = this.pConn$.getLocalizedValue(error.response.data.errorDetails[0].localizedValue, '', ''); + uploadFailMsg = this.localizationService.getLocalizedText(error.response.data.errorDetails[0].localizedValue); } - this.files.map(f => { - if (f.ID === attachedFile.ID) { - f.props.meta = uploadFailMsg; - f.props.error = true; - f.props.onDelete = () => this.deleteFile(f); - f.props.icon = this.utils.getIconFromFileType(f.type); - f.props.name = this.pConn$.getLocalizedValue('Unable to upload file', '', ''); - f.inProgress = false; - const fieldName = this.pConn$.getStateProps().value; - const context = this.pConn$.getContextName(); - // set errors to property to block submit even on errors in file upload - PCore.getMessageManager().addMessages({ - messages: [ - { - type: 'error', - message: this.pConn$.getLocalizedValue('Error with one or more files', '', '') - } - ], - property: fieldName, - pageReference: this.pConn$.getPageReference(), - context - }); - delete f.props.progress; + this.files = this.files.map(localFile => { + if (localFile.props.id === file.props.id) { + localFile.props.meta = uploadFailMsg; + localFile.props.error = true; + localFile.props.icon = this.utils.getIconFromFileType(localFile.type); + localFile.props.name = this.localizationService.getLocalizedText('Unable to upload file'); + localFile.inProgress = false; + delete localFile.props.progress; + this.filesWithError.push(localFile); + + this.populateErrorAndUpdateRedux(localFile); } - return f; + return localFile; }); } throw error; @@ -403,48 +392,70 @@ export class AttachmentComponent implements OnInit, OnDestroy { .filter(e => { const isFileUploaded = e.props && e.props.progress === 100; const fileHasError = e.props && e.props.error; - const isFileUploadedinLastStep = e.responseProps && e.responseProps.pzInsKey; - return !isFileUploaded && !fileHasError && !isFileUploadedinLastStep; + const isFileUploadedInLastStep = e.responseProps && e.responseProps.ID !== 'temp'; + const isFileUploadInProgress = e.inProgress; + return !isFileUploadInProgress && !isFileUploaded && !fileHasError && !isFileUploadedInLastStep; }) - .map(f => - window.PCore.getAttachmentUtils().uploadAttachment( - f, - () => { - this.onUploadProgress(); + .map(file => + PCore.getAttachmentUtils().uploadAttachment( + file, + ev => { + this.onUploadProgress(file.props.id, ev); }, isFetchCanceled => { - return this.errorHandler(isFetchCanceled, f); + return this.errorHandler(isFetchCanceled, file); }, - this.pConn$.getContextName() + this.contextName ) ); + Promise.allSettled(filesToBeUploaded) .then((fileResponses: any) => { fileResponses = fileResponses.filter(fr => fr.status !== 'rejected'); // in case of deleting an in progress file, promise gets cancelled but still enters then block if (fileResponses.length > 0) { - this.files.forEach(f => { - const index = fileResponses.findIndex((fr: any) => fr.value.clientFileID === f.ID); + this.files = this.files.map(localFile => { + // if attach field has multiple files & in bw any error files are present + // Example : files = [properFile1, errFile, errFile, properFile2] + // indexes for delete & preview should be for files [properFile1, properFile2] which is [1,2] + const index = fileResponses.findIndex(fileResponse => fileResponse.value.clientFileID === localFile.props.id); if (index >= 0) { - f.props.meta = this.pConn$.getLocalizedValue('Uploaded successfully', '', ''); - f.props.progress = 100; - f.inProgress = false; - f.handle = fileResponses[index].value.ID; - f.label = this.valueRef; - f.category = this.categoryName; - f.responseProps = { + fileResponses[index].value.thumbnail = localFile.props.thumbnail; + localFile.inProgress = false; + localFile.ID = fileResponses[index].value.ID; + localFile.props.id = fileResponses[index].value.ID; + localFile.props.meta = this.localizationService.getLocalizedText('Uploaded successfully'); + localFile.props.progress = 100; + localFile.handle = fileResponses[index].value.ID; + localFile.label = this.valueRef; + localFile.responseProps = { pzInsKey: 'temp', - pyAttachName: f.props.name + pyAttachName: localFile.props.name }; } + + return localFile; }); - this.updateAttachments(); + + insertAttachments(fileResponses, this.pConn$, this.multiAttachmentsInInlineEdit, { + allowMultiple: this.allowMultiple$, + isOldAttachment: this.isOldAttachment, + isMultiAttachmentInInlineEditTable: this.isMultiAttachmentInInlineEditTable, + attachmentCount: this.attachmentCount, + insert: true + } as any); + + this.attachmentCount += fileResponses.length; + if (this.filesWithError?.length === 0) { - this.clearFieldErrorMessages(); + clearFieldErrorMessages(this.pConn$); } } + + this.actionSequencer.deRegisterBlockingAction(this.contextName).catch(() => {}); }) .catch(error => { console.log(error); + this.actionSequencer.cancelDeferredActionsOnError(this.contextName); }); } @@ -453,6 +464,8 @@ export class AttachmentComponent implements OnInit, OnDestroy { this.angularPConnectData.unsubscribeFn(); } - PCore.getPubSubUtils().unsubscribe(PCore.getConstants().PUB_SUB_EVENTS.CASE_EVENTS.ASSIGNMENT_SUBMISSION, this.caseID); + if (this.displayMode !== 'DISPLAY_ONLY') { + PCore.getPubSubUtils().unsubscribe(PCore.getConstants().PUB_SUB_EVENTS.CASE_EVENTS.ASSIGNMENT_SUBMISSION, this.caseID); + } } } diff --git a/packages/angular-sdk-components/src/lib/_components/widget/case-history/case-history.component.ts b/packages/angular-sdk-components/src/lib/_components/widget/case-history/case-history.component.ts index 1fbd1dae..be31746a 100644 --- a/packages/angular-sdk-components/src/lib/_components/widget/case-history/case-history.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/widget/case-history/case-history.component.ts @@ -11,7 +11,6 @@ interface CaseHistoryProps { selector: 'app-case-history', templateUrl: './case-history.component.html', styleUrls: ['./case-history.component.scss'], - standalone: true, imports: [CommonModule, MatTableModule] }) export class CaseHistoryComponent implements OnInit { diff --git a/packages/angular-sdk-components/src/lib/_components/widget/feed-container/feed-container.component.scss b/packages/angular-sdk-components/src/lib/_components/widget/feed-container/feed-container.component.scss index 7b08b327..c81e22e4 100644 --- a/packages/angular-sdk-components/src/lib/_components/widget/feed-container/feed-container.component.scss +++ b/packages/angular-sdk-components/src/lib/_components/widget/feed-container/feed-container.component.scss @@ -1,5 +1,5 @@ .psdk-pulse-divider { - border-bottom: 0.0625rem solid var(--app-neutral-light-color); + border-bottom: 0.0625rem solid var(--mat-sys-outline-variant); } .psdk-full-width { @@ -17,7 +17,6 @@ padding: 0rem 0.125rem; min-width: unset; display: inline-block; - color: var(--app-primary-color); } .psdk-send-svg-icon { @@ -52,8 +51,6 @@ align-items: center; text-align: center; display: flex; - background: var(--app-primary-color); - color: var(--app-form-color); font-weight: bold; font-size: 1.25rem; } @@ -70,8 +67,8 @@ align-items: center; text-align: center; display: flex; - background: var(--app-primary-color); - color: var(--app-form-color); + background: var(--mat-sys-primary); + color: var(--mat-sys-on-primary); font-weight: bold; font-size: 1.5625rem; } @@ -95,7 +92,6 @@ } .psdk-pulse-message-time { - color: var(--app-pulse-message-color); } .psdk-pulse-message-text { @@ -141,7 +137,6 @@ } .psdk-pulse-reply-message { - background-color: var(--app-pulse-message-background-color); border-radius: 0.625rem; padding: 0rem 1.25rem; white-space: pre-line; @@ -170,7 +165,6 @@ } .psdk-pulse-reply-time { - color: var(--app-pulse-message-color); padding-left: 0.625rem; } diff --git a/packages/angular-sdk-components/src/lib/_components/widget/feed-container/feed-container.component.ts b/packages/angular-sdk-components/src/lib/_components/widget/feed-container/feed-container.component.ts index e3962ca7..a9ea39da 100644 --- a/packages/angular-sdk-components/src/lib/_components/widget/feed-container/feed-container.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/widget/feed-container/feed-container.component.ts @@ -14,7 +14,6 @@ import { Utils } from '../../../_helpers/utils'; templateUrl: './feed-container.component.html', styleUrls: ['./feed-container.component.scss'], providers: [Utils], - standalone: true, imports: [CommonModule, MatFormFieldModule, MatInputModule, MatGridListModule, MatButtonModule] }) export class FeedContainerComponent implements OnInit, OnDestroy { @@ -30,7 +29,7 @@ export class FeedContainerComponent implements OnInit, OnDestroy { currentUserName$: string; pulseMessages$: any[]; - showReplyComment$: Object = {}; + showReplyComment$: object = {}; svgComment$: string; svgLike$: string; @@ -40,7 +39,7 @@ export class FeedContainerComponent implements OnInit, OnDestroy { pulseConversation: string; userData: Map = new Map(); - pulseComment: Object = {}; + pulseComment: object = {}; // functions actionsAPI: any; diff --git a/packages/angular-sdk-components/src/lib/_components/widget/file-utility/file-utility.component.html b/packages/angular-sdk-components/src/lib/_components/widget/file-utility/file-utility.component.html index 3d5fd73a..f831d601 100644 --- a/packages/angular-sdk-components/src/lib/_components/widget/file-utility/file-utility.component.html +++ b/packages/angular-sdk-components/src/lib/_components/widget/file-utility/file-utility.component.html @@ -15,7 +15,7 @@
-
+

{{ pConn$.getLocalizedValue('Add local files', '', '') }}

@@ -40,7 +40,7 @@

{{ pConn$.getLocalizedValue('Add local files', '', '') }}

-