diff --git a/.github/workflows/npm-publish-beta.yml b/.github/workflows/npm-publish-beta.yml new file mode 100644 index 00000000..888371c4 --- /dev/null +++ b/.github/workflows/npm-publish-beta.yml @@ -0,0 +1,55 @@ +name: Build and Publish NPM Package + +on: + push: + branches: + - develop + - main + +jobs: + deploy-beta: + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/develop' + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: 16 + registry-url: https://registry.npmjs.org/ + + - name: Install dependencies + run: npm install + + - name: Build + run: npm ci && npm run build:prod + + - name: Publish to npm (beta version) + run: npm run npm:publish:beta + env: + NODE_AUTH_TOKEN: ${{secrets.NPM_AUTH_TOKEN}} + deploy-release: + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/main' + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: 16 + registry-url: https://registry.npmjs.org/ + + - name: Install dependencies + run: npm install + + - name: Build + run: npm ci && npm run build:prod + + - name: Publish to npm (release version) + run: npm run npm:publish:latest + env: + NODE_AUTH_TOKEN: ${{secrets.NPM_AUTH_TOKEN}} diff --git a/CHANGELOG.MD b/CHANGELOG.MD index 20782ab8..b66498f9 100644 --- a/CHANGELOG.MD +++ b/CHANGELOG.MD @@ -1,20 +1,31 @@ - -# [1.0.0-alpha.0](https://github.com/ng-bootstrap/ng-bootstrap/compare/9f8f37b...1.0.0-alpha.0) (2023-06-10) + +# [1.0.0](https://github.com/reloadly-ui/reloadly-ui/compare/9f8f37b...1.0.0-alpha.0) (2023-09-26) ### Features Initial release with the following directives: +* accordion * badge * breadcrumbs -* buttons +* button +* checkbox +* dropdown-select +* range-slider +* search-bar * dropdown +* form-group +* input-group +* menu +* modal * pagination * preloader +* quick-action * select * sidebar -* svg +* icons * switch +* stepper +* selection-grid * table -* tag * tooltip diff --git a/CONTRIBUTING.MD b/CONTRIBUTING.MD index 639af817..cb329563 100644 --- a/CONTRIBUTING.MD +++ b/CONTRIBUTING.MD @@ -3,10 +3,9 @@ We are always looking for quality contributions and will be happy to accept your Pull Requests as long as they adhere to some basic rules: - Please make sure that your contribution fits well in the project's context: - - we are aiming at rebuilding bootstrap components in pure Angular, without any dependencies on any external JavaScript library; - - the only dependency should be bootstrap CSS and its markup structure + - we are aiming at building UI components in pure Angular, without any dependencies on any external JavaScript library; + - the only dependency should be angular - Please assure that you are submitting quality code, specifically make sure that: - your component has accompanying tests and all the tests are passing - your PR doesn't break the build; check the GitHub-CI build status after opening a PR and push corrective commits if anything goes wrong - - your commits conform to the conventions established [here](DEVELOPER.md#commit-messages) - - your component follows all the conventions stated [here](https://github.com/reloadly/reloadly-ui/wiki/Contributions%3A-Code-conventions) + - your code formatting style should match the existing formatting standards. diff --git a/README.md b/README.md index b377ed62..605bae27 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,7 @@ Angular UI library for building rich UI experiences -[![npm version](https://badge.fury.io/js/%40ng-bootstrap%2Fng-bootstrap.svg)](https://badge.fury.io/js/%40ng-bootstrap%2Fng-bootstrap) -[![Build Status](https://github.com/ng-bootstrap/ng-bootstrap/workflows/ci/badge.svg?branch=master)](https://github.com/ng-bootstrap/ng-bootstrap/actions) -[![codecov](https://codecov.io/gh/ng-bootstrap/ng-bootstrap/branch/master/graph/badge.svg)](https://codecov.io/gh/ng-bootstrap/ng-bootstrap) -[![devDependency Status](https://david-dm.org/ng-bootstrap/ng-bootstrap/dev-status.svg?branch=master)](https://david-dm.org/ng-bootstrap/ng-bootstrap#info=devDependencies) -[![Sauce Test Status](https://saucelabs.com/browser-matrix/pkozlowski.svg)](https://saucelabs.com/u/pkozlowski) +[![npm version](https://badge.fury.io/js/reloadly-ui.svg)](https://badge.fury.io/js/reloadly-ui) Please check our [demo site](https://ui.reloadly.com) and the list of [issues](https://github.com/reloadly/reloadly-ui/issues) to see all the things we are working on. Feel free to make comments there. @@ -58,15 +54,7 @@ Our code is automatically tested on all supported browsers. ## Getting help -Please, do not open issues for the general support questions as we want to keep GitHub issues for bug reports and feature requests. You've got much better chances of getting your question answered on [StackOverflow](http://stackoverflow.com/questions/tagged/reloadly-ui) where maintainers are looking at questions tagged with `ng-bootstrap`. - -StackOverflow is a much better place to ask questions since: - -- there are hundreds of people willing to help on StackOverflow -- questions and answers stay available for public viewing so your question/answer might help someone else -- Stack Overflow's voting system assures that the best answers are prominently visible. - -To save your and our time we will be systematically closing all the issues that are requests for general support and redirecting people to StackOverflow. +Please, do not open issues for the general support questions as we want to keep GitHub issues for bug reports and feature requests. For general support questions you can try StackOverflow and tag the question with the `reloadly-ui` tag. ## Do you think you've found a bug? @@ -74,13 +62,11 @@ We want to fix it ASAP! But before fixing a bug we need to reproduce and confirm We ask you to respect two things: -- fill the GitHub issue template by providing the bug description and appropriate versions of Angular, ng-bootstrap and TypeScript -- provide a use-case that fails with a **minimal reproduction scenario** using [StackBlitz](https://stackblitz.com) (you can start by forking one from our [demo page](https://ui.reloadly.com/#/components)) +- fill the GitHub issue template by providing the bug description and appropriate versions of Angular, reloadly-ui and TypeScript +- provide a use-case that fails with a **minimal reproduction scenario** using [StackBlitz](https://stackblitz.com) A minimal reproduction scenario allows us to quickly confirm a bug (or point out a coding problem) as well as confirm that we are fixing the right problem. -Please note that **we will be insisting on a minimal reproduction scenario** in order to save maintainers time and ultimately be able to fix more bugs. We'll mark the issue as non-actionable without it and close if not heard from the reporter. - Interestingly, from our experience users often find coding problems themselves while preparing a minimal StackBlitz. We understand that sometimes it might be hard to extract essential bits of code from a larger code-base but we really need to isolate the problem before we can fix it. ## Contributing to the project diff --git a/package-lock.json b/package-lock.json index 4a5310ce..6f98a7fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "reloadly-ui", - "version": "0.0.1-beta.13", + "version": "1.0.0-beta", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "reloadly-ui", - "version": "0.0.1-beta.13", + "version": "1.0.0-beta", "license": "MIT", "devDependencies": { "@angular-devkit/build-angular": "^16.2.0", @@ -21,15 +21,15 @@ "@angular/platform-browser-dynamic": "^16.1.8", "@angular/router": "^16.1.8", "@types/jasmine": "~4.3.5", - "jasmine-core": "~5.1.0", + "jasmine-core": "~5.1.1", "karma": "~6.4.2", "karma-coverage": "~2.2.1", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", "ng-packagr": "^16.2.0", "node-sass": "^9.0.0", - "nodemon": "^3.0.1", - "tslib": "^2.6.1", + "nodemon": "^3.0.2", + "tslib": "^2.6.2", "typescript": "~5.1.6", "zone.js": "~0.13.1" }, @@ -52,12 +52,12 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1602.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.0.tgz", - "integrity": "sha512-ZRmUTBeD+uGr605eOHnsovEn6f1mOBI+kxP64DRvagNweX5TN04s3iyQ8jmLSAHQD9ush31LFxv3dVNxv3ceXQ==", + "version": "0.1602.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.4.tgz", + "integrity": "sha512-SQr/FZ8wEOGC6EM+7V5rWyb/qpK0LFND/WbES5l+Yvwv+TEyPihsh5QCPmvPxi45eFbaHPrXkIZnvxnkxRDN/A==", "dev": true, "dependencies": { - "@angular-devkit/core": "16.2.0", + "@angular-devkit/core": "16.2.4", "rxjs": "7.8.1" }, "engines": { @@ -67,15 +67,15 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.2.0.tgz", - "integrity": "sha512-miylwjOqvlKmYrzS84bjRaJrecZxOXH9xsPVvQE8VBe8UKePJjRAL6yyOqXUOGtzlch2YmT98RAnuni7y0FEAw==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.2.4.tgz", + "integrity": "sha512-qWWjw321+qKzQ3U+arPJ5fdqxZ/aeT5HuxAtA7xqNu/cqnqvRZ8RVbbnugFx4U1R271tABT+N+N1kkIep/vlDg==", "dev": true, "dependencies": { "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1602.0", - "@angular-devkit/build-webpack": "0.1602.0", - "@angular-devkit/core": "16.2.0", + "@angular-devkit/architect": "0.1602.4", + "@angular-devkit/build-webpack": "0.1602.4", + "@angular-devkit/core": "16.2.4", "@babel/core": "7.22.9", "@babel/generator": "7.22.9", "@babel/helper-annotate-as-pure": "7.22.5", @@ -87,7 +87,7 @@ "@babel/runtime": "7.22.6", "@babel/template": "7.22.5", "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "16.2.0", + "@ngtools/webpack": "16.2.4", "@vitejs/plugin-basic-ssl": "1.0.1", "ansi-colors": "4.1.3", "autoprefixer": "10.4.14", @@ -188,13 +188,35 @@ } } }, + "node_modules/@angular-devkit/build-angular/node_modules/@ngtools/webpack": { + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.4.tgz", + "integrity": "sha512-ILri2xJ6vMUaFxHJABGF/H7/pYoBkuXTFlHCeFee9pHA+EHkxoiwezLf8baiFT3IGOmdG6GOUlfh/4QicGLdTQ==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.0.0", + "typescript": ">=4.9.3 <5.2", + "webpack": "^5.54.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/tslib": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", + "dev": true + }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1602.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1602.0.tgz", - "integrity": "sha512-KdSr6iAcO30i/LIGL8mYi+d1buVXuDCp2dptzEJ4vxReOMFJca90KLwb+tVHEqqnDb0WkNfWm8Ii2QYh2FrNyA==", + "version": "0.1602.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1602.4.tgz", + "integrity": "sha512-QOnMfAOFrAQKOw+odgymragqzv6Ts5/Ni7/SJ1iLwlQcH6TajT6373fSCDFdKV40ntF53yjnexIsLx81/dK+Cg==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1602.0", + "@angular-devkit/architect": "0.1602.4", "rxjs": "7.8.1" }, "engines": { @@ -208,14 +230,15 @@ } }, "node_modules/@angular-devkit/core": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.0.tgz", - "integrity": "sha512-l1k6Rqm3YM16BEn3CWyQKrk9xfu+2ux7Bw3oS+h1TO4/RoxO2PgHj8LLRh/WNrYVarhaqO7QZ5ePBkXNMkzJ1g==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.4.tgz", + "integrity": "sha512-VCZ1z1lDbFkbYkQ6ZMEFfmNzkMEOCBKSzAhWutRyd7oM02by4/5SvDSXd5BMvMxWhPJ/567DdSPOfhhnXQkkDg==", "dev": true, "dependencies": { "ajv": "8.12.0", "ajv-formats": "2.1.1", "jsonc-parser": "3.2.0", + "picomatch": "2.3.1", "rxjs": "7.8.1", "source-map": "0.7.4" }, @@ -234,12 +257,12 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.2.0.tgz", - "integrity": "sha512-QMDJXPE0+YQJ9Ap3MMzb0v7rx6ZbBEokmHgpdIjN3eILYmbAdsSGE8HTV8NjS9nKmcyE9OGzFCMb7PFrDTlTAw==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.2.4.tgz", + "integrity": "sha512-TsSflKJlaHzKgcU/taQg5regmBP/ggvwVtAbJRBWmCaeQJzobFo68+rtwfYfvuQXKAR6KsbSJc97mqmq6zmTwQ==", "dev": true, "dependencies": { - "@angular-devkit/core": "16.2.0", + "@angular-devkit/core": "16.2.4", "jsonc-parser": "3.2.0", "magic-string": "0.30.1", "ora": "5.4.1", @@ -252,9 +275,9 @@ } }, "node_modules/@angular/animations": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.2.1.tgz", - "integrity": "sha512-XVabK9fRKJaYPhW5wn8ySL4KL45N5Np+xOssWhLPDRDBdZjl62MExfpvMkamdkos6E1n1IGsy9wSemjnR4WKhg==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.2.6.tgz", + "integrity": "sha512-NHnHdZFKLr1PB8RhscjsE/DMSVHhtjCqc3bhtOiOMYfAgm4nYrSFvp6nAaT5OoMTeAWuM0n8/HvAiFweEQgVQA==", "dev": true, "dependencies": { "tslib": "^2.3.0" @@ -263,19 +286,19 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/core": "16.2.1" + "@angular/core": "16.2.6" } }, "node_modules/@angular/cli": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.2.0.tgz", - "integrity": "sha512-xT8vJOyw6Rc2364XDW2jHagLgKu7342ktd/lt+c0u6R+AB2XVFMePR7VceLohX9N/vRUsbQ0nVSZr+ru/hA+HA==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.2.4.tgz", + "integrity": "sha512-OjnlQ2wzhkc1q3iDbWtLeaXoPzS0BtevazT7vmB/MiNVgjDcF3bPFQTcBBvtWAF0wN9jgPC712X8ucwdEAOMlg==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1602.0", - "@angular-devkit/core": "16.2.0", - "@angular-devkit/schematics": "16.2.0", - "@schematics/angular": "16.2.0", + "@angular-devkit/architect": "0.1602.4", + "@angular-devkit/core": "16.2.4", + "@angular-devkit/schematics": "16.2.4", + "@schematics/angular": "16.2.4", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.3", "ini": "4.1.1", @@ -301,9 +324,9 @@ } }, "node_modules/@angular/common": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.2.1.tgz", - "integrity": "sha512-druackA5JQpvfS8cD8DFtPRXGRKbhx3mQ778t1n6x3fXpIdGaAX+nSAgAKhIoF7fxWmu0KuHGzb+3BFlZRyTXw==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.2.6.tgz", + "integrity": "sha512-BjnahvtJHh2zXfCZjpWit+zMkggl/PrgUtPd02egzLmEKyXIMmQLYNpDZ+Pqgpb7eefU8yBPhL7WA2oKFjHjSg==", "dev": true, "dependencies": { "tslib": "^2.3.0" @@ -312,14 +335,14 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/core": "16.2.1", + "@angular/core": "16.2.6", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.2.1.tgz", - "integrity": "sha512-dPauu+ESn79d66U9nBvnunNuBk/UMqnm7iL9Q31J8OKYN/4vrKbsO57pmULOft/GRAYsE3FdLBH0NkocFZKIMQ==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.2.6.tgz", + "integrity": "sha512-FKv9isn8BdM9TydyhdqcFhFD8nn11+fGqg3qbIQnOlnLb0ryYign93zBmlx/qFu46PvPtTmhsa4saE2NwvrSbg==", "dev": true, "dependencies": { "tslib": "^2.3.0" @@ -328,7 +351,7 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/core": "16.2.1" + "@angular/core": "16.2.6" }, "peerDependenciesMeta": { "@angular/core": { @@ -337,9 +360,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.2.1.tgz", - "integrity": "sha512-A5SyNZTZnXSCL5JVXHKbYj9p2dRYoeFnb6hGQFt2AuCcpUjVIIdwHtre3YzkKe5sFwepPctdoRe2fRXlTfTRjA==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.2.6.tgz", + "integrity": "sha512-rzyI4dKVj8T9dCnZCIffoxZ2PplYLmC9yd65VoaKxOQFxf/95/hgIRdt5kafjnZvzFN1qUbQuEfyviY+KFdQKg==", "dev": true, "dependencies": { "@babel/core": "7.22.5", @@ -360,7 +383,7 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/compiler": "16.2.1", + "@angular/compiler": "16.2.6", "typescript": ">=4.9.3 <5.2" } }, @@ -404,9 +427,9 @@ } }, "node_modules/@angular/core": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.2.1.tgz", - "integrity": "sha512-Y+0jssQnJPovxMv9cDKYlp6BBHeFBLOHd/+FPv5IIGD1c7NwBP/TImJxCaIV78a57xnO8L0SFacDg/kULzvKrg==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.2.6.tgz", + "integrity": "sha512-F7kJbkVHLupdVQbwjjEuWp5rtxmfnL571VtqRN/8OJZAI2OjZjnSbL+FRZGEZHDmOZ2cNgPKpYt/d3nbK8hpSw==", "dev": true, "dependencies": { "tslib": "^2.3.0" @@ -420,9 +443,9 @@ } }, "node_modules/@angular/forms": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.2.1.tgz", - "integrity": "sha512-cCygiLfBAsVHdtKmNptlk2IgXu0wjRc8kSiiSnJkfK6U/NiNg8ADMiN7iYgKW2TD1ZRw+7dYZV856lxEy2n0+A==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.2.6.tgz", + "integrity": "sha512-TsSpV6Oh0Z5WlCmRB6jEsChLA8ChBn8CY1uOkTh4YQEzdMCwvBvc1Q2DugER5iGvZU/hRNgjyHX7VR3ysB3JlQ==", "dev": true, "dependencies": { "tslib": "^2.3.0" @@ -431,16 +454,16 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/common": "16.2.1", - "@angular/core": "16.2.1", - "@angular/platform-browser": "16.2.1", + "@angular/common": "16.2.6", + "@angular/core": "16.2.6", + "@angular/platform-browser": "16.2.6", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/platform-browser": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.2.1.tgz", - "integrity": "sha512-SH8zRiRAcw0B5/tVlEc5U/lN5F8g+JizSuu7BQvpCAQEDkM6IjF9LP36Bjav7JuadItbWLfT6peWYa1sJvax2w==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.2.6.tgz", + "integrity": "sha512-jXtarSZ/n6ytZQ9+Y0aDuazz5POz4UmLN3GxIWtc4kqPOQp4o3DCM16Ig4ioSm53Z/WSDASVaMwtRWN5SXCKfw==", "dev": true, "dependencies": { "tslib": "^2.3.0" @@ -449,9 +472,9 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/animations": "16.2.1", - "@angular/common": "16.2.1", - "@angular/core": "16.2.1" + "@angular/animations": "16.2.6", + "@angular/common": "16.2.6", + "@angular/core": "16.2.6" }, "peerDependenciesMeta": { "@angular/animations": { @@ -460,9 +483,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.2.1.tgz", - "integrity": "sha512-dKMCSrbD/joOMXM1mhDOKNDZ1BxwO9r9uu5ZxY0L/fWm/ousgMucNikLr38vBudgWM8CN6BuabzkxWKcqi3k4g==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.2.6.tgz", + "integrity": "sha512-i3prfdjnOMMemQMLk7vywGueDsjRIcug+jNf4ZdSb4AEaAhv86mzt5z3iNNSSA3bec7oJfrxOayMz3o6zq3QXA==", "dev": true, "dependencies": { "tslib": "^2.3.0" @@ -471,16 +494,16 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/common": "16.2.1", - "@angular/compiler": "16.2.1", - "@angular/core": "16.2.1", - "@angular/platform-browser": "16.2.1" + "@angular/common": "16.2.6", + "@angular/compiler": "16.2.6", + "@angular/core": "16.2.6", + "@angular/platform-browser": "16.2.6" } }, "node_modules/@angular/router": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.2.1.tgz", - "integrity": "sha512-C0WfcktsC25G37unxdH/5I7PbkVBSEB1o+0DJK9/HG97r1yzEkptF6fbRIzDBTS7dX0NfWN/PTAKF0ep7YlHvA==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.2.6.tgz", + "integrity": "sha512-huORA6D1UriaswbvVgfxpYQJofZ3hSDdJYRMI4lDcu1n6CaCoYnj8E3rqaU5U1Va0OeFmxzOuXG+3WyL+YfZgg==", "dev": true, "dependencies": { "tslib": "^2.3.0" @@ -489,9 +512,9 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/common": "16.2.1", - "@angular/core": "16.2.1", - "@angular/platform-browser": "16.2.1", + "@angular/common": "16.2.6", + "@angular/core": "16.2.6", + "@angular/platform-browser": "16.2.6", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -502,12 +525,12 @@ "dev": true }, "node_modules/@babel/code-frame": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", - "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "dependencies": { - "@babel/highlight": "^7.22.10", + "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" }, "engines": { @@ -515,9 +538,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz", + "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==", "dev": true, "engines": { "node": ">=6.9.0" @@ -590,25 +613,25 @@ } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", - "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", "dev": true, "dependencies": { - "@babel/types": "^7.22.10" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", "browserslist": "^4.21.9", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -627,15 +650,15 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz", - "integrity": "sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", + "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -659,9 +682,9 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", - "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -701,22 +724,36 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name/node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -735,40 +772,40 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", + "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", "@babel/helper-simple-access": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -799,14 +836,14 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", - "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.9" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -816,13 +853,13 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { @@ -878,58 +915,86 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz", - "integrity": "sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", "dev": true, "dependencies": { "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.10" + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz", - "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==", + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.1.tgz", + "integrity": "sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.10", - "@babel/types": "^7.22.10" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.0", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", - "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, @@ -938,9 +1003,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", - "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -950,9 +1015,9 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "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.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "version": "7.22.15", + "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.22.15.tgz", + "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -965,14 +1030,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", + "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" + "@babel/plugin-transform-optional-chaining": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -985,6 +1050,7 @@ "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", @@ -1015,6 +1081,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead.", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", @@ -1278,9 +1345,9 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz", - "integrity": "sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz", + "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", @@ -1328,9 +1395,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", - "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz", + "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1359,12 +1426,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", + "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, @@ -1376,18 +1443,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", + "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -1415,9 +1482,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", - "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz", + "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1461,9 +1528,9 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", + "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1493,9 +1560,9 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", + "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1509,9 +1576,9 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", + "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1541,9 +1608,9 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", + "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1572,9 +1639,9 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", + "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1603,12 +1670,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz", + "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1619,12 +1686,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", + "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" }, @@ -1636,15 +1703,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz", + "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==", "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -1701,9 +1768,9 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", + "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1717,9 +1784,9 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", + "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1733,16 +1800,16 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", + "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" + "@babel/plugin-transform-parameters": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -1768,9 +1835,9 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", + "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1784,9 +1851,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz", - "integrity": "sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz", + "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1801,9 +1868,9 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", + "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1832,13 +1899,13 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", + "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, @@ -2215,19 +2282,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz", - "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz", + "integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.10", - "@babel/types": "^7.22.10", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2236,12 +2303,12 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "dependencies": { - "@babel/types": "^7.22.10", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -2251,13 +2318,13 @@ } }, "node_modules/@babel/types": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", - "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2825,22 +2892,6 @@ "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", "dev": true }, - "node_modules/@ngtools/webpack": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.0.tgz", - "integrity": "sha512-c9jv4r7GnLTpnPOeF+a9yAm/3/2wwl9lMBU32i9hlY+q/Hqde4PiL95bUOLnRRL1I64DV7BFTlSZqSPgDpFXZQ==", - "dev": true, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.0.0", - "typescript": ">=4.9.3 <5.2", - "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", @@ -3034,6 +3085,60 @@ "node": ">= 10" } }, + "node_modules/@npmcli/run-script/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "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" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/cacache/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@npmcli/run-script/node_modules/http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", @@ -3083,7 +3188,7 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/run-script/node_modules/minipass": { + "node_modules/@npmcli/run-script/node_modules/make-fetch-happen/node_modules/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", @@ -3092,6 +3197,21 @@ "node": ">=8" } }, + "node_modules/@npmcli/run-script/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@npmcli/run-script/node_modules/minipass-fetch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", @@ -3109,15 +3229,6 @@ "encoding": "^0.1.13" } }, - "node_modules/@npmcli/run-script/node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", - "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/@npmcli/run-script/node_modules/node-gyp": { "version": "9.4.0", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", @@ -3199,9 +3310,9 @@ } }, "node_modules/@rollup/plugin-json": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", - "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.1.tgz", + "integrity": "sha512-RgVfl5hWMkxN1h/uZj8FVESvPuBJ/uf6ly6GTj0GONnkfoBN5KC0MSz+PN2OLDgYXMhtG0mWpTrkiOjoxAIevw==", "dev": true, "dependencies": { "@rollup/pluginutils": "^5.0.1" @@ -3210,7 +3321,7 @@ "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { @@ -3219,9 +3330,9 @@ } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.0.tgz", - "integrity": "sha512-mKur03xNGT8O9ODO6FtT43ITGqHWZbKPdVJHZb+iV9QYcdlhUUB0wgknvA4KCUmC5oHJF6O2W1EgmyOQyVUI4Q==", + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", + "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", "dev": true, "dependencies": { "@rollup/pluginutils": "^5.0.1", @@ -3235,7 +3346,7 @@ "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^2.78.0||^3.0.0" + "rollup": "^2.78.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { @@ -3244,9 +3355,9 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.3.tgz", - "integrity": "sha512-hfllNN4a80rwNQ9QCxhxuHCGHMAvabXqxNdaChUSSadMre7t4iEUI6fFAhBOn/eIYTgYVhBv7vCLsAJ4u3lf3g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", "dev": true, "dependencies": { "@types/estree": "^1.0.0", @@ -3257,7 +3368,7 @@ "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { @@ -3266,13 +3377,13 @@ } }, "node_modules/@schematics/angular": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.0.tgz", - "integrity": "sha512-Ib0/ZCkjWt7a5p3209JVwEWwf41v03K3ylvlxLIEo1ZGijAZAlrBj4GrA5YQ+TmPm2hRyt+owss7x91/x+i0Gw==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.4.tgz", + "integrity": "sha512-ZFPxn0yihdNcg5UpJvnfxIpv4GuW6nYDkgeIlYb5k/a0dKSW8wE8Akcl1JhJtdKJ0RVcn1OwZDmx028JCbZJLA==", "dev": true, "dependencies": { - "@angular-devkit/core": "16.2.0", - "@angular-devkit/schematics": "16.2.0", + "@angular-devkit/core": "16.2.4", + "@angular-devkit/schematics": "16.2.4", "jsonc-parser": "3.2.0" }, "engines": { @@ -3325,6 +3436,60 @@ "node": ">= 10" } }, + "node_modules/@sigstore/sign/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "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" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@sigstore/sign/node_modules/http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", @@ -3374,7 +3539,7 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@sigstore/sign/node_modules/minipass": { + "node_modules/@sigstore/sign/node_modules/make-fetch-happen/node_modules/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", @@ -3383,6 +3548,21 @@ "node": ">=8" } }, + "node_modules/@sigstore/sign/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@sigstore/sign/node_modules/minipass-fetch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", @@ -3394,19 +3574,10 @@ "minizlib": "^2.1.2" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/@sigstore/sign/node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", - "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" } }, "node_modules/@sigstore/tuf": { @@ -3484,9 +3655,9 @@ } }, "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.3.tgz", + "integrity": "sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==", "dev": true, "dependencies": { "@types/connect": "*", @@ -3494,27 +3665,27 @@ } }, "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.11.tgz", + "integrity": "sha512-isGhjmBtLIxdHBDl2xGwUzEM8AOyOvWsADWq7rqirdi/ZQoHnLWErHvsThcEzTX8juDRiZtzp2Qkv5bgNh6mAg==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "version": "3.4.36", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", + "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.1.tgz", + "integrity": "sha512-iaQslNbARe8fctL5Lk+DsmgWOM83lM+7FzP0eQUJs1jd3kBE8NWqBTIT2S8SqQOJjxvt2eyIjpOuYeRXq2AdMw==", "dev": true, "dependencies": { "@types/express-serve-static-core": "*", @@ -3528,18 +3699,18 @@ "dev": true }, "node_modules/@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "version": "2.8.14", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.14.tgz", + "integrity": "sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/eslint": { - "version": "8.44.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", - "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", + "version": "8.44.3", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.3.tgz", + "integrity": "sha512-iM/WfkwAhwmPff3wZuPLYiHX18HI24jU8k1ZSH7P8FHwxTjZ2P6CoX2wnF43oprR+YXJM6UUxATkNvyv/JHd+g==", "dev": true, "dependencies": { "@types/estree": "*", @@ -3547,9 +3718,9 @@ } }, "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "version": "3.7.5", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.5.tgz", + "integrity": "sha512-JNvhIEyxVW6EoMIFIvj93ZOywYFatlpu9deeH6eSx6PE3WHYvHaQtmHmQeNw7aA81bYGBPPQqdtBm6b1SsQMmA==", "dev": true, "dependencies": { "@types/eslint": "*", @@ -3557,15 +3728,15 @@ } }, "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz", + "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==", "dev": true }, "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "version": "4.17.18", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.18.tgz", + "integrity": "sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==", "dev": true, "dependencies": { "@types/body-parser": "*", @@ -3575,9 +3746,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "version": "4.17.37", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.37.tgz", + "integrity": "sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==", "dev": true, "dependencies": { "@types/node": "*", @@ -3587,66 +3758,66 @@ } }, "node_modules/@types/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.2.tgz", + "integrity": "sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==", "dev": true }, "node_modules/@types/http-proxy": { - "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "version": "1.17.12", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.12.tgz", + "integrity": "sha512-kQtujO08dVtQ2wXAuSFfk9ASy3sug4+ogFR8Kd8UgP8PEuc1/G/8yjYRmp//PcDNJEUKOza/MrQu15bouEUCiw==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/jasmine": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.3.5.tgz", - "integrity": "sha512-9YHUdvuNDDRJYXZwHqSsO72Ok0vmqoJbNn73ttyITQp/VA60SarnZ+MPLD37rJAhVoKp+9BWOvJP5tHIRfZylQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.3.6.tgz", + "integrity": "sha512-3N0FpQTeiWjm+Oo1WUYWguUS7E6JLceiGTriFrG8k5PU7zRLJCzLcWURU3wjMbZGS//a2/LgjsnO3QxIlwxt9g==", "dev": true }, "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", + "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", "dev": true }, "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.3.tgz", + "integrity": "sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==", "dev": true }, "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.3.tgz", + "integrity": "sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==", "dev": true }, "node_modules/@types/node": { - "version": "20.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.0.tgz", - "integrity": "sha512-Mgq7eCtoTjT89FqNoTzzXg2XvCi5VMhRV6+I2aYanc6kQCBImeNaAYRs/DyoVqk1YEUJK5gN9VO7HRIdz4Wo3Q==", + "version": "20.7.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.0.tgz", + "integrity": "sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg==", "dev": true }, "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz", + "integrity": "sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==", "dev": true }, "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "version": "6.9.8", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", + "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==", "dev": true }, "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.5.tgz", + "integrity": "sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==", "dev": true }, "node_modules/@types/resolve": { @@ -3662,9 +3833,9 @@ "dev": true }, "node_modules/@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.2.tgz", + "integrity": "sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==", "dev": true, "dependencies": { "@types/mime": "^1", @@ -3672,18 +3843,18 @@ } }, "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.2.tgz", + "integrity": "sha512-asaEIoc6J+DbBKXtO7p2shWUpKacZOoMBEGBgPG91P8xhO53ohzHWGCs4ScZo5pQMf5ukQzVT9fhX1WzpHihig==", "dev": true, "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", - "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.3.tgz", + "integrity": "sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==", "dev": true, "dependencies": { "@types/http-errors": "*", @@ -3692,18 +3863,18 @@ } }, "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "version": "0.3.34", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.34.tgz", + "integrity": "sha512-R+n7qBFnm/6jinlteC9DBL5dGiDGjWAvjo4viUanpnc/dG1y7uDoacXPIQ/PQEg1fI912SMHIa014ZjRpvDw4g==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.6.tgz", + "integrity": "sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg==", "dev": true, "dependencies": { "@types/node": "*" @@ -4382,13 +4553,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", - "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.4.tgz", + "integrity": "sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg==", "dev": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.4.2", - "core-js-compat": "^3.31.0" + "core-js-compat": "^3.32.2" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -4562,9 +4733,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", "dev": true, "funding": [ { @@ -4581,10 +4752,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -4654,15 +4825,15 @@ } }, "node_modules/cacache": { - "version": "17.1.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", - "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.0.tgz", + "integrity": "sha512-I7mVOPl3PUCeRub1U8YoGz2Lqv9WOBpobZ8RyWFXmReuILz+3OAyTa5oH3QPdtKZD7N0Yk00aLfzn0qvp8dZ1w==", "dev": true, "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", "glob": "^10.2.2", - "lru-cache": "^7.7.1", + "lru-cache": "^10.0.1", "minipass": "^7.0.3", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", @@ -4673,7 +4844,7 @@ "unique-filename": "^3.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/cacache/node_modules/brace-expansion": { @@ -4686,19 +4857,19 @@ } }, "node_modules/cacache/node_modules/glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", + "jackspeak": "^2.3.5", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" }, "bin": { - "glob": "dist/cjs/src/bin.js" + "glob": "dist/esm/bin.mjs" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -4708,12 +4879,12 @@ } }, "node_modules/cacache/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", "dev": true, "engines": { - "node": ">=12" + "node": "14 || >=16.14" } }, "node_modules/cacache/node_modules/minimatch": { @@ -4780,9 +4951,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001521", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001521.tgz", - "integrity": "sha512-fnx1grfpEOvDGH+V17eccmNjucGUnCbP6KL+l5KqBIerp26WK/+RQ7CIDE37KGJjaPyqWXXlFUyKiWmvdNNKmQ==", + "version": "1.0.30001566", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz", + "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==", "dev": true, "funding": [ { @@ -4886,9 +5057,9 @@ } }, "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", + "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", "dev": true, "engines": { "node": ">=6" @@ -4986,9 +5157,9 @@ } }, "node_modules/commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", "dev": true, "engines": { "node": ">=16" @@ -5208,12 +5379,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.0.tgz", - "integrity": "sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw==", + "version": "3.32.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.2.tgz", + "integrity": "sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ==", "dev": true, "dependencies": { - "browserslist": "^4.21.9" + "browserslist": "^4.21.10" }, "funding": { "type": "opencollective", @@ -5240,14 +5411,14 @@ } }, "node_modules/cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, "dependencies": { - "import-fresh": "^3.2.1", + "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", + "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "engines": { @@ -5255,6 +5426,14 @@ }, "funding": { "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/cosmiconfig/node_modules/argparse": { @@ -5672,9 +5851,9 @@ "dev": true }, "node_modules/dns-packet": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" @@ -5784,9 +5963,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.495", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.495.tgz", - "integrity": "sha512-mwknuemBZnoOCths4GtpU/SDuVMp3uQHKa2UNJT9/aVD6WVRjGpXOxRGX7lm6ILIenTdGXPSTCTDaWos5tEU8Q==", + "version": "1.4.605", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.605.tgz", + "integrity": "sha512-V52j+P5z6cdRqTjPR/bYNxx7ETCHIkm5VIGuyCy3CMrfSnbEpIlLnk5oHmZo7gYvDfh2TfHeanB6rawyQ23ktg==", "dev": true }, "node_modules/emoji-regex": { @@ -5956,9 +6135,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", + "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", "dev": true }, "node_modules/esbuild": { @@ -6504,15 +6683,15 @@ } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", "dev": true, "funding": [ { @@ -6581,16 +6760,16 @@ } }, "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.6.tgz", + "integrity": "sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==", "dev": true, "engines": { "node": "*" }, "funding": { "type": "patreon", - "url": "https://www.patreon.com/infusion" + "url": "https://github.com/sponsors/rawify" } }, "node_modules/fresh": { @@ -6629,9 +6808,9 @@ } }, "node_modules/fs-monkey": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", "dev": true }, "node_modules/fs.realpath": { @@ -6641,9 +6820,9 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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, "optional": true, @@ -7339,9 +7518,9 @@ } }, "node_modules/immutable": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.2.tgz", - "integrity": "sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", "dev": true }, "node_modules/import-fresh": { @@ -7866,9 +8045,9 @@ } }, "node_modules/jackspeak": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.0.tgz", - "integrity": "sha512-uKmsITSsF4rUWQHzqaRUuyAir3fZfW3f202Ee34lz/gZCi970CPZwyQXLGNgWJvvZbvFyzeyGq0+4fcG/mBKZg==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.5.tgz", + "integrity": "sha512-Ratx+B8WeXLAtRJn26hrhY8S1+Jz6pxPMrkrdkgb/NstTNiqMhX0/oFVu5wX+g5n6JlEu2LPsDJmY8nRP4+alw==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -7884,9 +8063,9 @@ } }, "node_modules/jasmine-core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.1.0.tgz", - "integrity": "sha512-bFMMwpKuTZXCuGd51yClFobw5SOtad1kmdWnYO8dNwYV8i01Xj0C2+nyQpSKl1EKxiPfyd1ZgBl/rsusL3aS6w==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.1.1.tgz", + "integrity": "sha512-UrzO3fL7nnxlQXlvTynNAenL+21oUQRlzqQFsA2U11ryb4+NLOCOePZ70PTojEaUKhiFugh7dG0Q+I58xlPdWg==", "dev": true }, "node_modules/jest-worker": { @@ -7928,9 +8107,9 @@ } }, "node_modules/jiti": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.1.tgz", - "integrity": "sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", + "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==", "dev": true, "bin": { "jiti": "bin/jiti.js" @@ -9251,15 +9430,15 @@ "dev": true }, "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", "dev": true }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, "funding": [ { @@ -9331,9 +9510,9 @@ "dev": true }, "node_modules/ng-packagr": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.2.0.tgz", - "integrity": "sha512-3u2FVSpKDa0EJRSGOAhYIZwjtnG7SVFBnUf5fk/VfDOxVV4kFRea6DEK7f/mb1D4WV/yqSZB9JmvBZp0uuIGeA==", + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-16.2.3.tgz", + "integrity": "sha512-VTJ7Qtge52+1subkhmF5nOqLNbVutA8/igJ0A5vH6Mgpb8Z/3HeZomtD1SHzZF5Dqp+p+QPHE548FWYu1MdMSQ==", "dev": true, "dependencies": { "@rollup/plugin-json": "^6.0.0", @@ -9342,7 +9521,7 @@ "ansi-colors": "^4.1.3", "autoprefixer": "^10.4.12", "browserslist": "^4.21.4", - "cacache": "^17.0.0", + "cacache": "^18.0.0", "chokidar": "^3.5.3", "commander": "^11.0.0", "convert-source-map": "^2.0.0", @@ -9383,9 +9562,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/android-arm": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.2.tgz", - "integrity": "sha512-tM8yLeYVe7pRyAu9VMi/Q7aunpLwD139EY1S99xbQkT4/q2qa6eA4ige/WJQYdJ8GBL1K33pPFhPfPdJ/WzT8Q==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.3.tgz", + "integrity": "sha512-Lemgw4io4VZl9GHJmjiBGzQ7ONXRfRPHcUEerndjwiSkbxzrpq0Uggku5MxxrXdwJ+pTj1qyw4jwTu7hkPsgIA==", "cpu": [ "arm" ], @@ -9399,9 +9578,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/android-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.2.tgz", - "integrity": "sha512-lsB65vAbe90I/Qe10OjkmrdxSX4UJDjosDgb8sZUKcg3oefEuW2OT2Vozz8ef7wrJbMcmhvCC+hciF8jY/uAkw==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.3.tgz", + "integrity": "sha512-w+Akc0vv5leog550kjJV9Ru+MXMR2VuMrui3C61mnysim0gkFCPOUTAfzTP0qX+HpN9Syu3YA3p1hf3EPqObRw==", "cpu": [ "arm64" ], @@ -9415,9 +9594,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/android-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.2.tgz", - "integrity": "sha512-qK/TpmHt2M/Hg82WXHRc/W/2SGo/l1thtDHZWqFq7oi24AjZ4O/CpPSu6ZuYKFkEgmZlFoa7CooAyYmuvnaG8w==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.3.tgz", + "integrity": "sha512-FKQJKkK5MXcBHoNZMDNUAg1+WcZlV/cuXrWCoGF/TvdRiYS4znA0m5Il5idUwfxrE20bG/vU1Cr5e1AD6IEIjQ==", "cpu": [ "x64" ], @@ -9431,9 +9610,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.2.tgz", - "integrity": "sha512-Ora8JokrvrzEPEpZO18ZYXkH4asCdc1DLdcVy8TGf5eWtPO1Ie4WroEJzwI52ZGtpODy3+m0a2yEX9l+KUn0tA==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.3.tgz", + "integrity": "sha512-kw7e3FXU+VsJSSSl2nMKvACYlwtvZB8RUIeVShIEY6PVnuZ3c9+L9lWB2nWeeKWNNYDdtL19foCQ0ZyUL7nqGw==", "cpu": [ "arm64" ], @@ -9447,9 +9626,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/darwin-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.2.tgz", - "integrity": "sha512-tP+B5UuIbbFMj2hQaUr6EALlHOIOmlLM2FK7jeFBobPy2ERdohI4Ka6ZFjZ1ZYsrHE/hZimGuU90jusRE0pwDw==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.3.tgz", + "integrity": "sha512-tPfZiwF9rO0jW6Jh9ipi58N5ZLoSjdxXeSrAYypy4psA2Yl1dAMhM71KxVfmjZhJmxRjSnb29YlRXXhh3GqzYw==", "cpu": [ "x64" ], @@ -9463,9 +9642,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.2.tgz", - "integrity": "sha512-YbPY2kc0acfzL1VPVK6EnAlig4f+l8xmq36OZkU0jzBVHcOTyQDhnKQaLzZudNJQyymd9OqQezeaBgkTGdTGeQ==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.3.tgz", + "integrity": "sha512-ERDyjOgYeKe0Vrlr1iLrqTByB026YLPzTytDTz1DRCYM+JI92Dw2dbpRHYmdqn6VBnQ9Bor6J8ZlNwdZdxjlSg==", "cpu": [ "arm64" ], @@ -9479,9 +9658,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/freebsd-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.2.tgz", - "integrity": "sha512-nSO5uZT2clM6hosjWHAsS15hLrwCvIWx+b2e3lZ3MwbYSaXwvfO528OF+dLjas1g3bZonciivI8qKR/Hm7IWGw==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.3.tgz", + "integrity": "sha512-nXesBZ2Ad1qL+Rm3crN7NmEVJ5uvfLFPLJev3x1j3feCQXfAhoYrojC681RhpdOph8NsvKBBwpYZHR7W0ifTTA==", "cpu": [ "x64" ], @@ -9495,9 +9674,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/linux-arm": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.2.tgz", - "integrity": "sha512-Odalh8hICg7SOD7XCj0YLpYCEc+6mkoq63UnExDCiRA2wXEmGlK5JVrW50vZR9Qz4qkvqnHcpH+OFEggO3PgTg==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.3.tgz", + "integrity": "sha512-zr48Cg/8zkzZCzDHNxXO/89bf9e+r4HtzNUPoz4GmgAkF1gFAFmfgOdCbR8zMbzFDGb1FqBBhdXUpcTQRYS1cQ==", "cpu": [ "arm" ], @@ -9511,9 +9690,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/linux-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.2.tgz", - "integrity": "sha512-ig2P7GeG//zWlU0AggA3pV1h5gdix0MA3wgB+NsnBXViwiGgY77fuN9Wr5uoCrs2YzaYfogXgsWZbm+HGr09xg==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.3.tgz", + "integrity": "sha512-qXvYKmXj8GcJgWq3aGvxL/JG1ZM3UR272SdPU4QSTzD0eymrM7leiZH77pvY3UetCy0k1xuXZ+VPvoJNdtrsWQ==", "cpu": [ "arm64" ], @@ -9527,9 +9706,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/linux-ia32": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.2.tgz", - "integrity": "sha512-mLfp0ziRPOLSTek0Gd9T5B8AtzKAkoZE70fneiiyPlSnUKKI4lp+mGEnQXcQEHLJAcIYDPSyBvsUbKUG2ri/XQ==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.3.tgz", + "integrity": "sha512-7XlCKCA0nWcbvYpusARWkFjRQNWNGlt45S+Q18UeS///K6Aw8bB2FKYe9mhVWy/XLShvCweOLZPrnMswIaDXQA==", "cpu": [ "ia32" ], @@ -9543,9 +9722,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/linux-loong64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.2.tgz", - "integrity": "sha512-hn28+JNDTxxCpnYjdDYVMNTR3SKavyLlCHHkufHV91fkewpIyQchS1d8wSbmXhs1fiYDpNww8KTFlJ1dHsxeSw==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.3.tgz", + "integrity": "sha512-qGTgjweER5xqweiWtUIDl9OKz338EQqCwbS9c2Bh5jgEH19xQ1yhgGPNesugmDFq+UUSDtWgZ264st26b3de8A==", "cpu": [ "loong64" ], @@ -9559,9 +9738,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/linux-mips64el": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.2.tgz", - "integrity": "sha512-KbXaC0Sejt7vD2fEgPoIKb6nxkfYW9OmFUK9XQE4//PvGIxNIfPk1NmlHmMg6f25x57rpmEFrn1OotASYIAaTg==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.3.tgz", + "integrity": "sha512-gy1bFskwEyxVMFRNYSvBauDIWNggD6pyxUksc0MV9UOBD138dKTzr8XnM2R4mBsHwVzeuIH8X5JhmNs2Pzrx+A==", "cpu": [ "mips64el" ], @@ -9575,9 +9754,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/linux-ppc64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.2.tgz", - "integrity": "sha512-dJ0kE8KTqbiHtA3Fc/zn7lCd7pqVr4JcT0JqOnbj4LLzYnp+7h8Qi4yjfq42ZlHfhOCM42rBh0EwHYLL6LEzcw==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.3.tgz", + "integrity": "sha512-UrYLFu62x1MmmIe85rpR3qou92wB9lEXluwMB/STDzPF9k8mi/9UvNsG07Tt9AqwPQXluMQ6bZbTzYt01+Ue5g==", "cpu": [ "ppc64" ], @@ -9591,9 +9770,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/linux-riscv64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.2.tgz", - "integrity": "sha512-7Z/jKNFufZ/bbu4INqqCN6DDlrmOTmdw6D0gH+6Y7auok2r02Ur661qPuXidPOJ+FSgbEeQnnAGgsVynfLuOEw==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.3.tgz", + "integrity": "sha512-9E73TfyMCbE+1AwFOg3glnzZ5fBAFK4aawssvuMgCRqCYzE0ylVxxzjEfut8xjmKkR320BEoMui4o/t9KA96gA==", "cpu": [ "riscv64" ], @@ -9607,9 +9786,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/linux-s390x": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.2.tgz", - "integrity": "sha512-U+RinR6aXXABFCcAY4gSlv4CL1oOVvSSCdseQmGO66H+XyuQGZIUdhG56SZaDJQcLmrSfRmx5XZOWyCJPRqS7g==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.3.tgz", + "integrity": "sha512-LlmsbuBdm1/D66TJ3HW6URY8wO6IlYHf+ChOUz8SUAjVTuaisfuwCOAgcxo3Zsu3BZGxmI7yt//yGOxV+lHcEA==", "cpu": [ "s390x" ], @@ -9623,9 +9802,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/linux-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.2.tgz", - "integrity": "sha512-oxzHTEv6VPm3XXNaHPyUTTte+3wGv7qVQtqaZCrgstI16gCuhNOtBXLEBkBREP57YTd68P0VgDgG73jSD8bwXQ==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.3.tgz", + "integrity": "sha512-ogV0+GwEmvwg/8ZbsyfkYGaLACBQWDvO0Kkh8LKBGKj9Ru8VM39zssrnu9Sxn1wbapA2qNS6BiLdwJZGouyCwQ==", "cpu": [ "x64" ], @@ -9639,9 +9818,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/netbsd-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.2.tgz", - "integrity": "sha512-WNa5zZk1XpTTwMDompZmvQLHszDDDN7lYjEHCUmAGB83Bgs20EMs7ICD+oKeT6xt4phV4NDdSi/8OfjPbSbZfQ==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.3.tgz", + "integrity": "sha512-o1jLNe4uzQv2DKXMlmEzf66Wd8MoIhLNO2nlQBHLtWyh2MitDG7sMpfCO3NTcoTMuqHjfufgUQDFRI5C+xsXQw==", "cpu": [ "x64" ], @@ -9655,9 +9834,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/openbsd-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.2.tgz", - "integrity": "sha512-S6kI1aT3S++Dedb7vxIuUOb3oAxqxk2Rh5rOXOTYnzN8JzW1VzBd+IqPiSpgitu45042SYD3HCoEyhLKQcDFDw==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.3.tgz", + "integrity": "sha512-AZJCnr5CZgZOdhouLcfRdnk9Zv6HbaBxjcyhq0StNcvAdVZJSKIdOiPB9az2zc06ywl0ePYJz60CjdKsQacp5Q==", "cpu": [ "x64" ], @@ -9671,9 +9850,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/sunos-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.2.tgz", - "integrity": "sha512-VXSSMsmb+Z8LbsQGcBMiM+fYObDNRm8p7tkUDMPG/g4fhFX5DEFmjxIEa3N8Zr96SjsJ1woAhF0DUnS3MF3ARw==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.3.tgz", + "integrity": "sha512-Acsujgeqg9InR4glTRvLKGZ+1HMtDm94ehTIHKhJjFpgVzZG9/pIcWW/HA/DoMfEyXmANLDuDZ2sNrWcjq1lxw==", "cpu": [ "x64" ], @@ -9687,9 +9866,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/win32-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.2.tgz", - "integrity": "sha512-5NayUlSAyb5PQYFAU9x3bHdsqB88RC3aM9lKDAz4X1mo/EchMIT1Q+pSeBXNgkfNmRecLXA0O8xP+x8V+g/LKg==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.3.tgz", + "integrity": "sha512-FSrAfjVVy7TifFgYgliiJOyYynhQmqgPj15pzLyJk8BUsnlWNwP/IAy6GAiB1LqtoivowRgidZsfpoYLZH586A==", "cpu": [ "arm64" ], @@ -9703,9 +9882,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/win32-ia32": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.2.tgz", - "integrity": "sha512-47gL/ek1v36iN0wL9L4Q2MFdujR0poLZMJwhO2/N3gA89jgHp4MR8DKCmwYtGNksbfJb9JoTtbkoe6sDhg2QTA==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.3.tgz", + "integrity": "sha512-xTScXYi12xLOWZ/sc5RBmMN99BcXp/eEf7scUC0oeiRoiT5Vvo9AycuqCp+xdpDyAU+LkrCqEpUS9fCSZF8J3Q==", "cpu": [ "ia32" ], @@ -9719,9 +9898,9 @@ } }, "node_modules/ng-packagr/node_modules/@esbuild/win32-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.2.tgz", - "integrity": "sha512-tcuhV7ncXBqbt/Ybf0IyrMcwVOAPDckMK9rXNHtF17UTK18OKLpg08glminN06pt2WCoALhXdLfSPbVvK/6fxw==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.3.tgz", + "integrity": "sha512-FbUN+0ZRXsypPyWE2IwIkVjDkDnJoMJARWOcFZn4KPPli+QnKqF0z1anvfaYe3ev5HFCpRDLLBDHyOALLppWHw==", "cpu": [ "x64" ], @@ -9734,6 +9913,43 @@ "node": ">=12" } }, + "node_modules/ng-packagr/node_modules/autoprefixer": { + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "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", @@ -9741,9 +9957,9 @@ "dev": true }, "node_modules/ng-packagr/node_modules/esbuild": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.2.tgz", - "integrity": "sha512-G6hPax8UbFakEj3hWO0Vs52LQ8k3lnBhxZWomUJDxfz3rZTLqF5k/FCzuNdLx2RbpBiQQF9H9onlDDH1lZsnjg==", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.3.tgz", + "integrity": "sha512-UlJ1qUUA2jL2nNib1JTSkifQTcYTroFqRjwCFW4QYEKEsixXD5Tik9xML7zh2gTxkYTBKGHNH9y7txMwVyPbjw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -9754,34 +9970,34 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.19.2", - "@esbuild/android-arm64": "0.19.2", - "@esbuild/android-x64": "0.19.2", - "@esbuild/darwin-arm64": "0.19.2", - "@esbuild/darwin-x64": "0.19.2", - "@esbuild/freebsd-arm64": "0.19.2", - "@esbuild/freebsd-x64": "0.19.2", - "@esbuild/linux-arm": "0.19.2", - "@esbuild/linux-arm64": "0.19.2", - "@esbuild/linux-ia32": "0.19.2", - "@esbuild/linux-loong64": "0.19.2", - "@esbuild/linux-mips64el": "0.19.2", - "@esbuild/linux-ppc64": "0.19.2", - "@esbuild/linux-riscv64": "0.19.2", - "@esbuild/linux-s390x": "0.19.2", - "@esbuild/linux-x64": "0.19.2", - "@esbuild/netbsd-x64": "0.19.2", - "@esbuild/openbsd-x64": "0.19.2", - "@esbuild/sunos-x64": "0.19.2", - "@esbuild/win32-arm64": "0.19.2", - "@esbuild/win32-ia32": "0.19.2", - "@esbuild/win32-x64": "0.19.2" + "@esbuild/android-arm": "0.19.3", + "@esbuild/android-arm64": "0.19.3", + "@esbuild/android-x64": "0.19.3", + "@esbuild/darwin-arm64": "0.19.3", + "@esbuild/darwin-x64": "0.19.3", + "@esbuild/freebsd-arm64": "0.19.3", + "@esbuild/freebsd-x64": "0.19.3", + "@esbuild/linux-arm": "0.19.3", + "@esbuild/linux-arm64": "0.19.3", + "@esbuild/linux-ia32": "0.19.3", + "@esbuild/linux-loong64": "0.19.3", + "@esbuild/linux-mips64el": "0.19.3", + "@esbuild/linux-ppc64": "0.19.3", + "@esbuild/linux-riscv64": "0.19.3", + "@esbuild/linux-s390x": "0.19.3", + "@esbuild/linux-x64": "0.19.3", + "@esbuild/netbsd-x64": "0.19.3", + "@esbuild/openbsd-x64": "0.19.3", + "@esbuild/sunos-x64": "0.19.3", + "@esbuild/win32-arm64": "0.19.3", + "@esbuild/win32-ia32": "0.19.3", + "@esbuild/win32-x64": "0.19.3" } }, "node_modules/ng-packagr/node_modules/esbuild-wasm": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.19.2.tgz", - "integrity": "sha512-ak2XIIJKby+Uo3Iqh8wtw4pn2uZcnfLgtcmBHIgkShpun5ZIJsFigWXp7uLt7gXk3QAOCMmv0TSsIxD5qdn+Vw==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.19.8.tgz", + "integrity": "sha512-+5BhFGjW0+3cC5BEcujYfNaslSEBjF+zFHj4a7xff2LLByCJGok3iCyV9/oHpN8OlZrGlnjSduhY1t1QqU1YBQ==", "dev": true, "bin": { "esbuild": "bin/esbuild" @@ -9807,6 +10023,56 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, + "node_modules/ng-packagr/node_modules/less": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", + "dev": true, + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/ng-packagr/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, + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ng-packagr/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, + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, "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", @@ -9822,6 +10088,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ng-packagr/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, + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ng-packagr/node_modules/piscina": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.2.0.tgz", + "integrity": "sha512-/Yq6CLchvi5UQ6YGeiYHIJQV09VcZ5eYuNVS/YPkpxlxKrB4tEbIyc6j8F5b0jCP6tHdiji1Gos4fapc7q1csg==", + "dev": true, + "dependencies": { + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0" + }, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, "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", @@ -9834,6 +10126,51 @@ "node": ">=8" } }, + "node_modules/ng-packagr/node_modules/postcss": { + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/ng-packagr/node_modules/sass": { + "version": "1.69.5", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", + "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", + "dev": true, + "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" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/ng-packagr/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -9843,6 +10180,16 @@ "semver": "bin/semver.js" } }, + "node_modules/ng-packagr/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, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/nice-napi": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", @@ -9899,9 +10246,9 @@ } }, "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", + "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", "dev": true, "optional": true, "bin": { @@ -10106,9 +10453,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, "node_modules/node-sass": { @@ -10211,13 +10558,13 @@ } }, "node_modules/nodemon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz", - "integrity": "sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.2.tgz", + "integrity": "sha512-9qIN2LNTrEzpOPBaWHTm4Asy1LxXLSickZStAQ4IZe7zsoIpD/A7LWxhZV3t4Zu352uBcqVnRsDXSMR2Sc3lTA==", "dev": true, "dependencies": { "chokidar": "^3.5.2", - "debug": "^3.2.7", + "debug": "^4", "ignore-by-default": "^1.0.1", "minimatch": "^3.1.2", "pstree.remy": "^1.1.8", @@ -10238,15 +10585,6 @@ "url": "https://opencollective.com/nodemon" } }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -10409,13 +10747,76 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm-registry-fetch/node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "node_modules/npm-registry-fetch/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm-registry-fetch/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "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" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/cacache/node_modules/minipass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm-registry-fetch/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, "engines": { - "node": ">= 10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/npm-registry-fetch/node_modules/http-proxy-agent": { @@ -10467,6 +10868,21 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/npm-registry-fetch/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/npm-registry-fetch/node_modules/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", @@ -10849,6 +11265,93 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/pacote/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/pacote/node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "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" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/cacache/node_modules/minipass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/pacote/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pacote/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/pacote/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/pacote/node_modules/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", @@ -11597,19 +12100,19 @@ } }, "node_modules/read-package-json/node_modules/glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", + "jackspeak": "^2.3.5", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" }, "bin": { - "glob": "dist/cjs/src/bin.js" + "glob": "dist/esm/bin.mjs" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -11807,9 +12310,9 @@ "dev": true }, "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dev": true, "dependencies": { "regenerate": "^1.4.2" @@ -12020,9 +12523,9 @@ } }, "node_modules/rollup": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.0.tgz", - "integrity": "sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==", + "version": "3.29.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.3.tgz", + "integrity": "sha512-T7du6Hum8jOkSWetjRgbwpM6Sy0nECYrYRSmZjayFcOddtKJWU4d17AC3HNUk7HRuqy4p+G7aEZclSHytqUmEg==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -12175,9 +12678,9 @@ } }, "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", "dev": true, "optional": true }, @@ -12534,6 +13037,60 @@ "node": ">= 10" } }, + "node_modules/sigstore/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sigstore/node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "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" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/sigstore/node_modules/http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", @@ -12583,7 +13140,7 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/sigstore/node_modules/minipass": { + "node_modules/sigstore/node_modules/make-fetch-happen/node_modules/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", @@ -12592,6 +13149,21 @@ "node": ">=8" } }, + "node_modules/sigstore/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/sigstore/node_modules/minipass-fetch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", @@ -12609,15 +13181,6 @@ "encoding": "^0.1.13" } }, - "node_modules/sigstore/node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", - "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/simple-update-notifier": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", @@ -12849,9 +13412,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz", + "integrity": "sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==", "dev": true }, "node_modules/spdy": { @@ -13097,9 +13660,9 @@ } }, "node_modules/tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", "dev": true, "dependencies": { "chownr": "^2.0.0", @@ -13433,9 +13996,9 @@ "dev": true }, "node_modules/tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, "node_modules/tuf-js": { @@ -13461,6 +14024,60 @@ "node": ">= 10" } }, + "node_modules/tuf-js/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/tuf-js/node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "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" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/tuf-js/node_modules/http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", @@ -13510,7 +14127,7 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/tuf-js/node_modules/minipass": { + "node_modules/tuf-js/node_modules/make-fetch-happen/node_modules/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", @@ -13519,6 +14136,21 @@ "node": ">=8" } }, + "node_modules/tuf-js/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/tuf-js/node_modules/minipass-fetch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", @@ -13536,15 +14168,6 @@ "encoding": "^0.1.13" } }, - "node_modules/tuf-js/node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", - "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", @@ -13590,9 +14213,9 @@ } }, "node_modules/ua-parser-js": { - "version": "0.7.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", - "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", + "version": "0.7.36", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.36.tgz", + "integrity": "sha512-CPPLoCts2p7D8VbybttE3P2ylv0OBZEAy7a12DsulIEcAiMtWJy+PBgMXgWDI80D5UwqE8oQPHYnk13tm38M2Q==", "dev": true, "funding": [ { @@ -13602,6 +14225,10 @@ { "type": "paypal", "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" } ], "engines": { @@ -13697,9 +14324,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -14084,9 +14711,9 @@ } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", "dev": true, "engines": { "node": ">=10.0.0" @@ -14491,9 +15118,9 @@ } }, "node_modules/zone.js": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.13.1.tgz", - "integrity": "sha512-+bIeDAFEBYuXRuU3qGQvzdPap+N1zjM4KkBAiiQuVVCrHrhjDuY6VkUhNa5+U27+9w0q3fbKiMCbpJ0XzMmSWA==", + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.13.3.tgz", + "integrity": "sha512-MKPbmZie6fASC/ps4dkmIhaT5eonHkEt6eAy80K42tAm0G2W+AahLJjbfi6X9NPdciOE9GRFTTM8u2IiF6O3ww==", "dev": true, "dependencies": { "tslib": "^2.3.0" diff --git a/package.json b/package.json index 54d2ac9f..4dd43d7a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "reloadly-ui", - "version": "0.0.1-beta.13", + "version": "1.0.0", "description": "Angular UI library", "repository": { "type": "git", @@ -31,15 +31,15 @@ "@angular/cli": "~16.2.0", "@angular/compiler-cli": "^16.2.1", "@types/jasmine": "~4.3.5", - "jasmine-core": "~5.1.0", + "jasmine-core": "~5.1.1", "karma": "~6.4.2", "karma-coverage": "~2.2.1", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", "ng-packagr": "^16.2.0", "node-sass": "^9.0.0", - "nodemon": "^3.0.1", - "tslib": "^2.6.1", + "nodemon": "^3.0.2", + "tslib": "^2.6.2", "typescript": "~5.1.6" }, "keywords": [ @@ -56,7 +56,15 @@ "pagination", "progressbar", "table", - "timepicker" + "timepicker", + "badge", + "breadcrumb", + "preloader", + "select", + "svg-icons", + "switch", + "tooltip", + "stepper" ], "private": false, "sideEffects": false, @@ -65,5 +73,5 @@ "bugs": { "url": "https://github.com/Reloadly/reloadly-ui/issues" }, - "homepage": "https://github.com/Reloadly/reloadly-ui#readme" + "homepage": "https://ui.reloadly.com/" } \ No newline at end of file diff --git a/src/lib/components/accordion/accordion.component.html b/src/lib/components/accordion/accordion.component.html new file mode 100644 index 00000000..99e577a6 --- /dev/null +++ b/src/lib/components/accordion/accordion.component.html @@ -0,0 +1,26 @@ +
+
+ +
+

{{item?.title}}

+
+
+ +
+
+ + +
+
+
+
+
+
+ +
+
+
+
+
+
diff --git a/src/lib/components/accordion/accordion.component.scss b/src/lib/components/accordion/accordion.component.scss new file mode 100644 index 00000000..508d1432 --- /dev/null +++ b/src/lib/components/accordion/accordion.component.scss @@ -0,0 +1,155 @@ +.toggle-icon { + transition: 300ms all ease-in-out; + transform-origin: center center; + height: 24px; + width: 24px; + + .chevron { + box-sizing: border-box; + position: relative; + display: block; + transform: scale(var(--ggs, 1)); + width: 22px; + height: 22px; + border: 2px solid transparent; + border-radius: 100px + } + + .chevron::after { + content: ""; + display: block; + box-sizing: border-box; + position: absolute; + width: 10px; + height: 10px; + border-bottom: 2px solid; + border-right: 2px solid; + transform: rotate(45deg); + left: 4px; + top: 2px + } + +} + +.accordion-header { + display: flex; + + padding: 4px; + justify-content: space-between; + align-items: center; + border-radius: 4px; + cursor: pointer; + + h6 { + margin: 4px 0px; + } + + &:hover { + background: var(--palette-neutral-neutral-90, #E0E3E8); + } + + h6 { + font-size: 16px; + font-style: normal; + font-weight: 450; + } +} + +.accordion-item { + display: block; + padding: 4px; + overflow-y: hidden; + + .toggler:not(:empty)+.toggle-icon { + display: none; + } + + .toggler-wrapper { + display: inline-block; + } + + &.disabled { + pointer-events: none; + + .accordion-header { + background: none !important; + } + } + + .toggle-icon { + transition: 300ms all ease-in-out; + transform-origin: center center; + height: 24px; + width: 24px; + + .chevron { + box-sizing: border-box; + position: relative; + display: block; + transform: scale(var(--ggs, 1)); + width: 22px; + height: 22px; + border: 2px solid transparent; + border-radius: 100px + } + + .chevron::after { + content: ""; + display: block; + box-sizing: border-box; + position: absolute; + width: 10px; + height: 10px; + border-bottom: 2px solid; + border-right: 2px solid; + transform: rotate(45deg); + left: 4px; + top: 2px + } + + + } + + &.open { + .toggle-icon { + transform: rotate(180deg); + transform-origin: center center; + transition: 300ms all ease-in-out; + + } + + .accordion-content { + padding: 4px; + font-size: 14px; + + .content { + padding: 4px; + } + } + } + + .accordion-header { + display: flex; + + padding: 4px; + justify-content: space-between; + align-items: center; + border-radius: 4px; + cursor: pointer; + + h6 { + margin: 4px 0px; + } + + &:hover { + background: var(--palette-neutral-neutral-90, #E0E3E8); + } + + h6 { + font-size: 16px; + font-style: normal; + font-weight: 450; + } + } + +} diff --git a/src/lib/components/accordion/accordion.component.spec.ts b/src/lib/components/accordion/accordion.component.spec.ts new file mode 100644 index 00000000..97f87db7 --- /dev/null +++ b/src/lib/components/accordion/accordion.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ReloadlyAccordionComponent } from './accordion.component'; + +describe('ReloadlyAccordionComponent', () => { + let component: ReloadlyAccordionComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ReloadlyAccordionComponent] + }); + fixture = TestBed.createComponent(ReloadlyAccordionComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/lib/components/accordion/accordion.component.ts b/src/lib/components/accordion/accordion.component.ts new file mode 100644 index 00000000..6b9a6f06 --- /dev/null +++ b/src/lib/components/accordion/accordion.component.ts @@ -0,0 +1,38 @@ +import { Component, ContentChildren, Input, QueryList } from '@angular/core'; +import { ReloadlyAccordionItem } from './directives/accordion-item.directive'; +import { animate, state, style, transition, trigger } from '@angular/animations'; + +@Component({ + selector: 'reloadly-accordion', + templateUrl: './accordion.component.html', + styleUrls: ['./accordion.component.scss'], + animations: [ + trigger('contentExpansion', [ + state('expanded', style({ height: '*', opacity: 1, visibility: 'visible' })), + state('collapsed', style({ height: '0px', opacity: 0, visibility: 'hidden' })), + transition('expanded <=> collapsed', + animate('200ms cubic-bezier(.37,1.04,.68,.98)')), + ]) + ] +}) +export class ReloadlyAccordionComponent { + expanded = new Set(); + @Input() collapsing = true; + @ContentChildren(ReloadlyAccordionItem) items!: QueryList; + + getToggleState = (index: number) => { + return this.toggleState.bind(this, index); + }; + + toggleState = (index: number) => { + if (this.expanded.has(index)) { + this.expanded.delete(index); + } else { + if (this.collapsing) { + this.expanded.clear(); + } + this.expanded.add(index); + } + }; +} + diff --git a/src/lib/components/accordion/accordion.module.ts b/src/lib/components/accordion/accordion.module.ts new file mode 100644 index 00000000..7a3b215e --- /dev/null +++ b/src/lib/components/accordion/accordion.module.ts @@ -0,0 +1,28 @@ +import { NgModule } from '@angular/core'; +import { ReloadlyAccordionComponent } from './accordion.component'; +import { ReloadlyAccordionItem } from "./directives/accordion-item.directive"; +import { ReloadlyAccordionItemContent } from "./directives/accordion-item-content.directive"; +//import { BrowserAnimationsModule } from '@angular/platform-browser/animations' +import { CommonModule } from '@angular/common'; + + + +@NgModule({ + imports: [ + CommonModule, + //BrowserAnimationsModule + ], + exports: [ + ReloadlyAccordionComponent, + ReloadlyAccordionItem, + ReloadlyAccordionItemContent, + + ], + declarations: [ + ReloadlyAccordionComponent, + ReloadlyAccordionItem, + ReloadlyAccordionItemContent, + ], + providers: [], +}) +export class ReloadlyAccordionModule { } diff --git a/src/lib/components/accordion/directives/accordion-item-content.directive.ts b/src/lib/components/accordion/directives/accordion-item-content.directive.ts new file mode 100644 index 00000000..f301edbd --- /dev/null +++ b/src/lib/components/accordion/directives/accordion-item-content.directive.ts @@ -0,0 +1,9 @@ +import { Directive, TemplateRef } from "@angular/core"; + +@Directive({ + selector: "[accordionContent]" +}) +export class ReloadlyAccordionItemContent { + constructor(public templateRef: TemplateRef) {} + +} diff --git a/src/lib/components/accordion/directives/accordion-item.directive.ts b/src/lib/components/accordion/directives/accordion-item.directive.ts new file mode 100644 index 00000000..876b7f3a --- /dev/null +++ b/src/lib/components/accordion/directives/accordion-item.directive.ts @@ -0,0 +1,15 @@ +import { ContentChild, Directive, ElementRef, Input } from "@angular/core"; +import { ReloadlyAccordionItemContent } from "./accordion-item-content.directive"; + +@Directive({ + selector: "[reloadly-accordion-item]" +}) +export class ReloadlyAccordionItem { + @Input() title = ""; + @Input() disabled = false; + @Input() expanded = false; + @ContentChild(ReloadlyAccordionItemContent) content?: ReloadlyAccordionItemContent; + + constructor() { } + +} diff --git a/src/lib/components/badge/badge.component.html b/src/lib/components/badge/badge.component.html index e0ebb47b..520cc470 100644 --- a/src/lib/components/badge/badge.component.html +++ b/src/lib/components/badge/badge.component.html @@ -4,9 +4,9 @@ - + - + diff --git a/src/lib/components/badge/badge.component.scss b/src/lib/components/badge/badge.component.scss index e5f49eeb..8b68799c 100644 --- a/src/lib/components/badge/badge.component.scss +++ b/src/lib/components/badge/badge.component.scss @@ -6,7 +6,7 @@ align-items: center; justify-content: center; text-align: center; - font-size: $font-small; + font-size: $font-size-xs; font-weight: 500; &.topRight { @@ -22,8 +22,8 @@ } &.neutral { - background-color: #ebeef1; - color: $reloadly-black-10; + background-color: $reloadly-ash; + color: $reloadly-black-2; } &.info { @@ -76,4 +76,4 @@ height: 12px; color: currentColor; margin-left: 5px; -} \ No newline at end of file +} diff --git a/src/lib/components/breadcrumb-group/breadcrumb-item/breadcrumb-item.component.html b/src/lib/components/breadcrumb-group/breadcrumb-item/breadcrumb-item.component.html index 6eb33a52..c7b3140b 100644 --- a/src/lib/components/breadcrumb-group/breadcrumb-item/breadcrumb-item.component.html +++ b/src/lib/components/breadcrumb-group/breadcrumb-item/breadcrumb-item.component.html @@ -1,3 +1,5 @@ - \ No newline at end of file + + + diff --git a/src/lib/components/breadcrumb-group/breadcrumb-item/breadcrumb-item.component.scss b/src/lib/components/breadcrumb-group/breadcrumb-item/breadcrumb-item.component.scss index 6af4c1d3..440c929a 100644 --- a/src/lib/components/breadcrumb-group/breadcrumb-item/breadcrumb-item.component.scss +++ b/src/lib/components/breadcrumb-group/breadcrumb-item/breadcrumb-item.component.scss @@ -3,8 +3,8 @@ .item-class { font-style: normal; font-weight: 450; - font-size: 12px; - color: $reloadly-black-11; + font-size: inherit; + color: $reloadly-black-2; cursor: pointer; &:hover { text-decoration: underline; diff --git a/src/lib/components/breadcrumb-group/breadcrumb-item/breadcrumb-item.component.ts b/src/lib/components/breadcrumb-group/breadcrumb-item/breadcrumb-item.component.ts index ddac9c2b..4aacfe8a 100644 --- a/src/lib/components/breadcrumb-group/breadcrumb-item/breadcrumb-item.component.ts +++ b/src/lib/components/breadcrumb-group/breadcrumb-item/breadcrumb-item.component.ts @@ -1,10 +1,18 @@ -import { Component, Input } from '@angular/core'; +import { AfterContentInit, ChangeDetectorRef, Component, Input, TemplateRef, ViewChild } from '@angular/core'; @Component({ selector: 'reloadly-breadcrumb-item', templateUrl: './breadcrumb-item.component.html', styleUrls: ['./breadcrumb-item.component.scss'] }) -export class BreadcrumbItemComponent { +export class BreadcrumbItemComponent implements AfterContentInit { @Input() isActive: boolean = false; + @ViewChild(TemplateRef) template!: TemplateRef; + index!: number; + + constructor(private changeDetection: ChangeDetectorRef) { } + + ngAfterContentInit(): void { + this.changeDetection.detectChanges(); + } } diff --git a/src/lib/components/breadcrumb-group/breadcrumbs/breadcrumbs.component.html b/src/lib/components/breadcrumb-group/breadcrumbs/breadcrumbs.component.html index c99f16e1..c6548732 100644 --- a/src/lib/components/breadcrumb-group/breadcrumbs/breadcrumbs.component.html +++ b/src/lib/components/breadcrumb-group/breadcrumbs/breadcrumbs.component.html @@ -1,3 +1,8 @@ diff --git a/src/lib/components/breadcrumb-group/breadcrumbs/breadcrumbs.component.scss b/src/lib/components/breadcrumb-group/breadcrumbs/breadcrumbs.component.scss index a9d1ac91..974dc3ca 100644 --- a/src/lib/components/breadcrumb-group/breadcrumbs/breadcrumbs.component.scss +++ b/src/lib/components/breadcrumb-group/breadcrumbs/breadcrumbs.component.scss @@ -3,20 +3,24 @@ .breadcrumbs { width: 100%; display: flex; + align-items: center; flex-flow: row wrap; - margin-bottom: $spacing-small; + margin-bottom: $spacing-16; + font-size: $font-size-xs; + + &-arrow { + margin: 0 $spacing-8; + color: $reloadly-black-2; + fill: none; + stroke: currentColor; + width: 0.7em; + height: 0.91em; + } + ::ng-deep { reloadly-breadcrumb-item { display: flex; align-items: center; - &:not(:last-of-type) { - margin-right: $margin-10; - &:after { - content: '>'; - margin-left: $margin-10; - color: $reloadly-black-11; - } - } } } } diff --git a/src/lib/components/breadcrumb-group/breadcrumbs/breadcrumbs.component.spec.ts b/src/lib/components/breadcrumb-group/breadcrumbs/breadcrumbs.component.spec.ts index a8e9779a..807e1c0d 100644 --- a/src/lib/components/breadcrumb-group/breadcrumbs/breadcrumbs.component.spec.ts +++ b/src/lib/components/breadcrumb-group/breadcrumbs/breadcrumbs.component.spec.ts @@ -1,23 +1,23 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { BreadcrumbsComponent } from './breadcrumbs.component'; +import { ReloadlyBreadcrumbsComponent } from './breadcrumbs.component'; -describe('BreadcrumbsComponent', () => { - let component: BreadcrumbsComponent; - let fixture: ComponentFixture; +describe('ReloadlyBreadcrumbsComponent', () => { + let component: ReloadlyBreadcrumbsComponent; + let fixture: ComponentFixture; - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ BreadcrumbsComponent ] - }) - .compileComponents(); + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ReloadlyBreadcrumbsComponent] + }) + .compileComponents(); - fixture = TestBed.createComponent(BreadcrumbsComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); + fixture = TestBed.createComponent(ReloadlyBreadcrumbsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); - it('should create', () => { - expect(component).toBeTruthy(); - }); + it('should create', () => { + expect(component).toBeTruthy(); + }); }); diff --git a/src/lib/components/breadcrumb-group/breadcrumbs/breadcrumbs.component.ts b/src/lib/components/breadcrumb-group/breadcrumbs/breadcrumbs.component.ts index e3b0c354..570a0d1f 100644 --- a/src/lib/components/breadcrumb-group/breadcrumbs/breadcrumbs.component.ts +++ b/src/lib/components/breadcrumb-group/breadcrumbs/breadcrumbs.component.ts @@ -6,19 +6,20 @@ import { BreadcrumbItemComponent } from '../breadcrumb-item/breadcrumb-item.comp templateUrl: './breadcrumbs.component.html', styleUrls: ['./breadcrumbs.component.scss'] }) -export class BreadcrumbsComponent implements AfterContentInit, OnDestroy { - @ContentChildren(BreadcrumbItemComponent) contents!: QueryList; - @ContentChildren(BreadcrumbItemComponent, { read: ViewContainerRef }) contentsRef!: QueryList; +export class ReloadlyBreadcrumbsComponent implements AfterContentInit, OnDestroy { + @ContentChildren(BreadcrumbItemComponent) private _contents!: QueryList; + @ContentChildren(BreadcrumbItemComponent, { read: ViewContainerRef }) private contentsRef!: QueryList; private isContentInit = false; - private setIndexOnInit: number | null = null; + private activeIndex = 0; + maxIndex = 0; + contents!: Array; constructor() { } ngAfterContentInit(): void { this.isContentInit = true; - if (typeof this.setIndexOnInit == 'number') { - this.setActiveIndex(this.setIndexOnInit); - } + this.setActiveIndex(this.activeIndex); + this.contents = this._contents.toArray(); } ngOnDestroy(): void { @@ -27,10 +28,14 @@ export class BreadcrumbsComponent implements AfterContentInit, OnDestroy { setActiveIndex(index: number): void { if (!this.isContentInit) { - this.setIndexOnInit = index; + this.activeIndex = index; } else { - this.contents.forEach(c => c.isActive = false); - this.contents.toArray()[index].isActive = true; + this._contents.forEach((c, index) => { + c.isActive = false; + c.index = index; + this.maxIndex = index; + }); + this._contents.toArray()[index].isActive = true; } } } diff --git a/src/lib/components/button/directives/button.directive.ts b/src/lib/components/button/directives/button.directive.ts index 1e829607..90f4ec46 100644 --- a/src/lib/components/button/directives/button.directive.ts +++ b/src/lib/components/button/directives/button.directive.ts @@ -44,6 +44,6 @@ export class ButtonDirective { type ButtonVariant = "filled" | "outlined" | "text" | "elevated" | "tonal" type ButtonColor = "primary" | "secondary" | "white" | "danger" -type ButtonSize = "xs" | "sm" | "lg" | "xl" +type ButtonSize = "xs" | "sm" | "md" | "lg" | "xl" diff --git a/src/lib/components/components.module.ts b/src/lib/components/components.module.ts index 31d66c84..951861b0 100644 --- a/src/lib/components/components.module.ts +++ b/src/lib/components/components.module.ts @@ -3,21 +3,20 @@ import { FormsModule } from '@angular/forms'; import { RouterModule } from '@angular/router'; import { CommonModule } from '@angular/common'; import { SvgComponent } from './svg/svg.component'; -import { TagComponent } from './tag/tag.component'; -import { DateComponent } from './date/date.component'; import { SelectComponent } from './select/select.component'; import { SwitchComponent } from './switch/switch.component'; import { SidebarComponent } from './sidebar/sidebar.component'; import { PaginationComponent } from './pagination/pagination.component'; import { BreadcrumbItemComponent } from './breadcrumb-group/breadcrumb-item/breadcrumb-item.component'; import { ReloadlyModalOutletComponent } from './modal/reloadly-modal-outlet/reloadly-modal-outlet.component'; -import { BreadcrumbsComponent } from './breadcrumb-group/breadcrumbs/breadcrumbs.component'; +import { ReloadlyBreadcrumbsComponent } from './breadcrumb-group/breadcrumbs/breadcrumbs.component'; +import { ReloadlyExpandableTileModule } from './expandable-tile/expandable-tile.module'; import { InputLabelComponent } from './input-group/input-label/input-label.component'; import { InputGroupDirective } from './input-group/directives/input-group.directive'; import { FormGroupDirective } from './form-group/directives/form-group.directive'; import { FormLabelComponent } from './form-group/form-label/form-label.component'; import { InputDirective } from './input-group/directives/input.directive'; -import { EmptyStateComponent } from './empty-state/empty-state.component' +import { ReloadlyAccordionModule } from './accordion/accordion.module'; import { PreloaderComponent } from './preloader/preloader.component'; import { ReloadlyModalModule } from './modal/reloadly-modal.module'; import { TooltipModule } from './tooltip/tooltip.module'; @@ -28,7 +27,6 @@ import { MenuModule } from './menu/menu.module'; @NgModule({ declarations: [ SvgComponent, - TagComponent, PaginationComponent, SidebarComponent, SwitchComponent, @@ -38,17 +36,16 @@ import { MenuModule } from './menu/menu.module'; InputDirective, InputGroupDirective, InputLabelComponent, - DateComponent, PreloaderComponent, - BreadcrumbsComponent, + ReloadlyBreadcrumbsComponent, BreadcrumbItemComponent, - EmptyStateComponent ], imports: [ CommonModule, RouterModule, FormsModule, ReloadlyModalModule, + ReloadlyAccordionModule, ButtonModule, BadgeModule, MenuModule, @@ -56,7 +53,6 @@ import { MenuModule } from './menu/menu.module'; ], exports: [ SvgComponent, - TagComponent, PaginationComponent, SidebarComponent, SwitchComponent, @@ -67,16 +63,16 @@ import { MenuModule } from './menu/menu.module'; InputDirective, InputGroupDirective, InputLabelComponent, - DateComponent, ReloadlyModalModule, ButtonModule, BadgeModule, MenuModule, TooltipModule, - BreadcrumbsComponent, + ReloadlyBreadcrumbsComponent, + ReloadlyAccordionModule, + ReloadlyExpandableTileModule, BreadcrumbItemComponent, - ReloadlyModalOutletComponent, - EmptyStateComponent + ReloadlyModalOutletComponent ] }) export class ComponentsModule { } diff --git a/src/lib/components/date/date.component.html b/src/lib/components/date/date.component.html deleted file mode 100644 index cccda400..00000000 --- a/src/lib/components/date/date.component.html +++ /dev/null @@ -1,3 +0,0 @@ - \ No newline at end of file diff --git a/src/lib/components/date/date.component.scss b/src/lib/components/date/date.component.scss deleted file mode 100644 index 85f24714..00000000 --- a/src/lib/components/date/date.component.scss +++ /dev/null @@ -1,6 +0,0 @@ -@import "../../../styles/variables.scss"; - -.input-container { - width: 100%; - min-width: 112px; -} \ No newline at end of file diff --git a/src/lib/components/date/date.component.spec.ts b/src/lib/components/date/date.component.spec.ts deleted file mode 100644 index bb359088..00000000 --- a/src/lib/components/date/date.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { DateComponent } from './date.component'; - -describe('DateComponent', () => { - let component: DateComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ DateComponent ] - }) - .compileComponents(); - - fixture = TestBed.createComponent(DateComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/src/lib/components/date/date.component.ts b/src/lib/components/date/date.component.ts deleted file mode 100644 index 25eb0311..00000000 --- a/src/lib/components/date/date.component.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { Component, EventEmitter, Input, Output } from '@angular/core'; - -@Component({ - selector: 'reloadly-date', - templateUrl: './date.component.html', - styleUrls: ['./date.component.scss'] -}) -export class DateComponent { //@TODO: is this component being used? - formattedDate: string = ''; - @Input() disabled: boolean = false; - @Input() hasError: boolean = false; - @Input() size: InputSize = 'medium'; - @Input() date!: Date; - @Output() dateChanged: EventEmitter = new EventEmitter(); - constructor() { } - - ngOnChanges() { - if (this.date) { - console.log('yes') - this.formattedDate = this.formatDate() - } - } - - formatDate() { - const yyyy = this.date.getFullYear(); - let mm: any = this.date.getMonth() + 1; - let dd: any = this.date.getDate(); - - if (dd < 10) dd = '0' + dd; - if (mm < 10) mm = '0' + mm; - - return yyyy + '/' + mm + '/' + dd; - } - - checkFormat(event: any) { - return (/[\d.]/.test(event.key)); - } - - valueChanged(newDate: string) { - let oldDate = this.formattedDate.replaceAll('/', ''); - newDate = newDate.replaceAll('/', ''); - - if (newDate.length < 4) { - this.formattedDate = newDate; - return; - } - if (newDate.length == 4 && newDate.length > oldDate.length) { - this.formattedDate = `${newDate}/`; - return; - } - if (newDate.length < 6) { - this.formattedDate = `${newDate.slice(0, 4)}/${newDate.slice(4)}`; - return; - } - if (newDate.length == 6 && newDate.length > oldDate.length) { - this.formattedDate = `${newDate.slice(0, 4)}/${newDate.slice(4)}/`; - return; - } - if (newDate.length < 8) { - this.formattedDate = `${newDate.slice(0, 4)}/${newDate.slice(4, 6)}/${newDate.slice(6)}`; - return; - } - - this.formattedDate = `${newDate.slice(0, 4)}/${newDate.slice(4, 6)}/${newDate.slice(6)}`; - if (!this.checkDateIsValid()) { - this.hasError = true; - return; - } - this.hasError = false; - this.date = new Date(this.formattedDate); - this.dateChanged.emit(this.date) - - } - - checkDateIsValid() { - let month = parseInt(this.formattedDate.split('/')[1]); - if (month > 12) return false; - - let day = parseInt(this.formattedDate.split('/')[2]); - if (day > 31) return false; - - return true; - } - -} - -type InputSize = 'small' | 'medium' | 'large' diff --git a/src/lib/components/empty-state/empty-state.component.html b/src/lib/components/empty-state/empty-state.component.html deleted file mode 100644 index 4204869b..00000000 --- a/src/lib/components/empty-state/empty-state.component.html +++ /dev/null @@ -1,13 +0,0 @@ -
- - - -

- {{title}} -

-

- {{description}} -

-
diff --git a/src/lib/components/empty-state/empty-state.component.scss b/src/lib/components/empty-state/empty-state.component.scss deleted file mode 100644 index b88e2011..00000000 --- a/src/lib/components/empty-state/empty-state.component.scss +++ /dev/null @@ -1,20 +0,0 @@ -.empty-state { - display: flex; - flex-direction: column; - text-align: center; - align-items: center; - margin: 16px 0; - - &-title { - margin-top: 8px; - color: #30313d; - font-weight: 450; - font-size: 24px; - } - &-description { - margin-top: 8px; - color: #5b626f; - font-weight: 400; - font-size: 16px; - } -} diff --git a/src/lib/components/empty-state/empty-state.component.spec.ts b/src/lib/components/empty-state/empty-state.component.spec.ts deleted file mode 100644 index aa033377..00000000 --- a/src/lib/components/empty-state/empty-state.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { EmptyStateComponent } from './empty-state.component'; - -describe('EmptyStateComponent', () => { - let component: EmptyStateComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ EmptyStateComponent ] - }) - .compileComponents(); - - fixture = TestBed.createComponent(EmptyStateComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/src/lib/components/empty-state/empty-state.component.ts b/src/lib/components/empty-state/empty-state.component.ts deleted file mode 100644 index f436ab54..00000000 --- a/src/lib/components/empty-state/empty-state.component.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Component, Input } from '@angular/core'; - -@Component({ - selector: 'app-empty-state', //@TODO: I don't think this is being used anywhere - templateUrl: './empty-state.component.html', - styleUrls: ['./empty-state.component.scss'] -}) -export class EmptyStateComponent { - @Input() title = '' - @Input() description = '' - -} diff --git a/src/lib/components/expandable-tile/expandable-tile.component.html b/src/lib/components/expandable-tile/expandable-tile.component.html new file mode 100644 index 00000000..85cf2497 --- /dev/null +++ b/src/lib/components/expandable-tile/expandable-tile.component.html @@ -0,0 +1,21 @@ +
+
+
{{title}}
+
+
+ +
+
+ + + +
+
+ +
+
+
+ +
+
+
diff --git a/src/lib/components/expandable-tile/expandable-tile.component.scss b/src/lib/components/expandable-tile/expandable-tile.component.scss new file mode 100644 index 00000000..330840bb --- /dev/null +++ b/src/lib/components/expandable-tile/expandable-tile.component.scss @@ -0,0 +1,112 @@ +.expandable-tile { + display: block; + padding: 4px; + overflow-y: hidden; + + .toggler:not(:empty)+.toggle-icon { + display: none; + } + + .toggler-wrapper { + display: inline-block; + } + + &.disabled { + pointer-events: none; + + .expandable-tile-header { + background: none !important; + } + } + + .toggle-icon { + transition: 300ms all ease-in-out; + transform-origin: center center; + height: 24px; + width: 24px; + + .chevron { + box-sizing: border-box; + position: relative; + display: block; + transform: scale(var(--ggs, 1)); + width: 22px; + height: 22px; + border: 2px solid transparent; + border-radius: 100px + } + + .chevron::after { + content: ""; + display: block; + box-sizing: border-box; + position: absolute; + width: 10px; + height: 10px; + border-bottom: 2px solid; + border-right: 2px solid; + transform: rotate(45deg); + left: 4px; + top: 2px + } + } + + &.open { + .toggle-icon { + transform: rotate(180deg); + transform-origin: center center; + transition: 300ms all ease-in-out; + } + + .expandable-tile-body { + padding: 4px 0px; + margin: 1px 0px; + opacity: 1; + height: auto !important; + font-size: 14px; + transition: font-size .25s, + margin .25s, + padding .25s, + opacity .5s .25s; + + .content { + padding: 4px; + } + } + } + + .expandable-tile-header { + display: flex; + padding: 4px; + justify-content: space-between; + align-items: center; + border-radius: 4px; + cursor: pointer; + + h6 { + margin: 4px 0px; + } + + &:hover { + background: var(--palette-neutral-neutral-90, #E0E3E8); + } + + h6 { + font-size: 16px; + font-style: normal; + font-weight: 450; + } + } + + .expandable-tile-body { + width: inherit; + font-size: 0; + margin: 0; + opacity: 0; + padding: 0; + transition: opacity .25s, + font-size .5s .25s, + margin .5s .25s, + padding .5s .25s; + } +} diff --git a/src/lib/components/expandable-tile/expandable-tile.component.spec.ts b/src/lib/components/expandable-tile/expandable-tile.component.spec.ts new file mode 100644 index 00000000..05745abc --- /dev/null +++ b/src/lib/components/expandable-tile/expandable-tile.component.spec.ts @@ -0,0 +1,20 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ReloadlyExpandableTileComponent } from './expandable-tile.component'; + +describe('ReloadlyExpandableTileComponent', () => { + let component: ReloadlyExpandableTileComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ReloadlyExpandableTileComponent] + }); + fixture = TestBed.createComponent(ReloadlyExpandableTileComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/lib/components/expandable-tile/expandable-tile.component.ts b/src/lib/components/expandable-tile/expandable-tile.component.ts new file mode 100644 index 00000000..e8ebfdf3 --- /dev/null +++ b/src/lib/components/expandable-tile/expandable-tile.component.ts @@ -0,0 +1,20 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; + +@Component({ + selector: 'reloadly-expandable-tile', + templateUrl: './expandable-tile.component.html', + styleUrls: ['./expandable-tile.component.scss'] +}) +export class ReloadlyExpandableTileComponent { + @Input() title?: string; + @Input() disabled: boolean = false; + @Input() width: string = '176px' + @Output() onToggle: EventEmitter = new EventEmitter(); + isOpen: boolean = false; + + toggle() { + if (this.disabled) return; + this.isOpen = !this.isOpen; + this.onToggle.emit(this.isOpen); + } +} diff --git a/src/lib/components/expandable-tile/expandable-tile.module.ts b/src/lib/components/expandable-tile/expandable-tile.module.ts new file mode 100644 index 00000000..161d2438 --- /dev/null +++ b/src/lib/components/expandable-tile/expandable-tile.module.ts @@ -0,0 +1,10 @@ +import { ReloadlyExpandableTileComponent } from './expandable-tile.component'; +import { NgModule } from '@angular/core'; + +@NgModule({ + imports: [], + exports: [ReloadlyExpandableTileComponent], + declarations: [ReloadlyExpandableTileComponent], + providers: [], +}) +export class ReloadlyExpandableTileModule { } diff --git a/src/lib/components/footer/footer.component.html b/src/lib/components/footer/footer.component.html deleted file mode 100644 index 6faf6043..00000000 --- a/src/lib/components/footer/footer.component.html +++ /dev/null @@ -1,36 +0,0 @@ - \ No newline at end of file diff --git a/src/lib/components/footer/footer.component.scss b/src/lib/components/footer/footer.component.scss deleted file mode 100644 index d7e43a6b..00000000 --- a/src/lib/components/footer/footer.component.scss +++ /dev/null @@ -1,80 +0,0 @@ -@import "../../../styles/variables"; - -.footer { - width: 100%; - padding: $padding-16 $padding-32; - .bottom { - width: 100%; - display: flex; - flex-flow: row wrap; - justify-content: space-between; - background-color: $background-color; - border-top: 1px solid #d6e3ff; - padding: $padding-10 0; - @media screen and (max-width: 768px) { - flex-flow: column; - align-items: center; - max-height: none; - } - - .text { - width: 100%; - font-weight: 450; - font-size: 14px; - line-height: 20px; - margin-bottom: $margin-10; - color: $reloadly-black-2; - - @media screen and (max-width: 1024px) { - font-size: $font-medium; - } - - @media screen and (max-width: 768px) { - margin-bottom: 16px; - text-align: center; - } - } - .links { - @media screen and (max-width: 768px) { - margin-bottom: 16px; - text-align: center; - } - - a { - font-weight: 450; - font-size: $font-medium; - line-height: 18px; - text-decoration: none; - color: $reloadly-violet; - - @media screen and (max-width: 1024px) { - font-size: $font-small; - } - - &:not(:last-of-type) { - margin-right: 16px; - } - - &:hover { - text-decoration: underline; - } - } - } - - .action-icons { - display: flex; - align-items: center; - - .action-icon { - width: 24px; - height: 24px; - margin-left: 16px; - cursor: pointer; - - svg { - width: 100%; - } - } - } - } -} diff --git a/src/lib/components/footer/footer.component.spec.ts b/src/lib/components/footer/footer.component.spec.ts deleted file mode 100644 index 953b22cc..00000000 --- a/src/lib/components/footer/footer.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { FooterComponent } from './footer.component'; - -describe('FooterComponent', () => { - let component: FooterComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ FooterComponent ] - }) - .compileComponents(); - - fixture = TestBed.createComponent(FooterComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/src/lib/components/footer/footer.component.ts b/src/lib/components/footer/footer.component.ts deleted file mode 100644 index 2e3917d5..00000000 --- a/src/lib/components/footer/footer.component.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'app-footer', //@TODO:not being used - templateUrl: './footer.component.html', - styleUrls: ['./footer.component.scss'] -}) -export class FooterComponent { - -} diff --git a/src/lib/components/form-group/form-label/form-label.component.scss b/src/lib/components/form-group/form-label/form-label.component.scss index 16be13c6..1786b29f 100644 --- a/src/lib/components/form-group/form-label/form-label.component.scss +++ b/src/lib/components/form-group/form-label/form-label.component.scss @@ -4,19 +4,19 @@ $bottom-margin: 5px; .heading-text { display: block; - font-size: $font-medium; + font-size: $font-size-s; font-weight: 450; line-height: 20px; letter-spacing: -0.154px; - color: $reloadly-black-8; + color: $reloadly-black-1; margin-bottom: $bottom-margin; } .subheading-text { display: block; font-weight: 400; - font-size: $font-small; + font-size: $font-size-xs; line-height: 16px; - color: $reloadly-black-8; + color: $reloadly-black-1; margin-bottom: $bottom-margin; } diff --git a/src/lib/components/input-group/directives/input.directive.ts b/src/lib/components/input-group/directives/input.directive.ts index 085f4dfa..f3d76205 100644 --- a/src/lib/components/input-group/directives/input.directive.ts +++ b/src/lib/components/input-group/directives/input.directive.ts @@ -4,10 +4,17 @@ import { Directive, ElementRef, HostBinding, Input } from '@angular/core'; selector: '[reloadlyInput]' }) export class InputDirective { - @Input() disabled: boolean = false; @Input() hasError: boolean = false; @Input() size: InputSize = 'medium'; + @Input() disabled: boolean = false; // @TODO throws a warning when used with Reactive forms + @Input() set isDisabled(value: boolean) { // @TODO quick fix + this.disabled = value; + this.ngOnChanges(); + }; + public nativeElement: HTMLInputElement; + constructor(private el: ElementRef) { + this.nativeElement = el.nativeElement; this.setMainClass(); } @@ -38,7 +45,6 @@ export class InputDirective { this.el.nativeElement.disabled = this.disabled; if (this.disabled) { this.el.nativeElement.classList.add('disabled-input'); - return; } this.el.nativeElement.classList.remove('disabled-input'); diff --git a/src/lib/components/input-group/input-label/input-label.component.html b/src/lib/components/input-group/input-label/input-label.component.html index 1c48c086..a7daf161 100644 --- a/src/lib/components/input-group/input-label/input-label.component.html +++ b/src/lib/components/input-group/input-label/input-label.component.html @@ -1,6 +1,6 @@ diff --git a/src/lib/components/input-group/input-label/input-label.component.scss b/src/lib/components/input-group/input-label/input-label.component.scss index 0046d5f5..8cd0b048 100644 --- a/src/lib/components/input-group/input-label/input-label.component.scss +++ b/src/lib/components/input-group/input-label/input-label.component.scss @@ -3,23 +3,23 @@ @mixin smaller-text { display: block; font-weight: 400; - font-size: $font-small; + font-size: $font-size-xs; line-height: 16px; margin-bottom: 5px; } .heading-text { display: block; - font-size: $font-medium; + font-size: $font-size-s; font-weight: 450; line-height: 20px; letter-spacing: -0.154px; - color: $reloadly-black-8; + color: $reloadly-black-1; } .subheading-text { @include smaller-text(); - color: $reloadly-black-8; + color: $reloadly-black-1; } .error-text { @@ -28,8 +28,8 @@ svg { fill: $reloadly-danger; - width: $font-small; - height: $font-small; + width: $font-size-xs; + height: $font-size-xs; margin: 3px 2px 0 0; } } diff --git a/src/lib/components/menu/menu.component.scss b/src/lib/components/menu/menu.component.scss index b271fe0b..586946b4 100644 --- a/src/lib/components/menu/menu.component.scss +++ b/src/lib/components/menu/menu.component.scss @@ -9,10 +9,10 @@ padding: 16px 0; min-width: 125px; max-width: 250px; - font-size: $font-medium; + font-size: $font-size-s; font-weight: 450; line-height: 20px; - color: $reloadly-black-8; + color: $reloadly-black-1; position: absolute; z-index: 130; display: flex; diff --git a/src/lib/components/modal/reloadly-modal-container/reloadly-modal-container.component.html b/src/lib/components/modal/reloadly-modal-container/reloadly-modal-container.component.html index 0bdb26d2..53487625 100644 --- a/src/lib/components/modal/reloadly-modal-container/reloadly-modal-container.component.html +++ b/src/lib/components/modal/reloadly-modal-container/reloadly-modal-container.component.html @@ -1,3 +1,3 @@ -
+
-
+ diff --git a/src/lib/components/modal/reloadly-modal-container/reloadly-modal-container.component.scss b/src/lib/components/modal/reloadly-modal-container/reloadly-modal-container.component.scss index 4384220a..5fb542af 100644 --- a/src/lib/components/modal/reloadly-modal-container/reloadly-modal-container.component.scss +++ b/src/lib/components/modal/reloadly-modal-container/reloadly-modal-container.component.scss @@ -15,13 +15,21 @@ } .rld { - // @TODO test animation on low-end phones - &-dialog-in { - animation: rld-dialog-animation 300ms cubic-bezier(0.240, 0.460, 0.460, 0.950) both; - } + &-dialog { + position: relative; + border: 0; + padding: 0; + border-radius: $border-radius-l; + overflow-x: hidden; + + // @TODO test animation on low-end phones + &-in { + animation: rld-dialog-animation 300ms cubic-bezier(0.240, 0.460, 0.460, 0.950) both; + } - &-dialog-out { - animation: rld-dialog-animation 300ms cubic-bezier(0.240, 0.460, 0.460, 0.950) reverse both; + &-out { + animation: rld-dialog-animation 300ms cubic-bezier(0.240, 0.460, 0.460, 0.950) reverse both; + } } @keyframes rld-dialog-animation { diff --git a/src/lib/components/pagination/pagination.component.html b/src/lib/components/pagination/pagination.component.html index 7f7d3871..b534ac23 100644 --- a/src/lib/components/pagination/pagination.component.html +++ b/src/lib/components/pagination/pagination.component.html @@ -1,9 +1,9 @@ diff --git a/src/lib/components/pagination/pagination.component.scss b/src/lib/components/pagination/pagination.component.scss index 02d92888..8ef53613 100644 --- a/src/lib/components/pagination/pagination.component.scss +++ b/src/lib/components/pagination/pagination.component.scss @@ -9,9 +9,9 @@ align-items: center; } p { - font-size: $font-medium; + font-size: $font-size-s; line-height: 20px; - color: $reloadly-black-10; + color: $reloadly-black-2; } .buttons { flex-wrap: nowrap !important; @@ -27,5 +27,5 @@ } .active { background-color: $reloadly-violet !important; - color: #fff !important; + color: $reloadly-white !important; } diff --git a/src/lib/components/pagination/pagination.component.ts b/src/lib/components/pagination/pagination.component.ts index 11383e32..0e6be641 100644 --- a/src/lib/components/pagination/pagination.component.ts +++ b/src/lib/components/pagination/pagination.component.ts @@ -10,7 +10,8 @@ export class PaginationComponent { @Input() page: number = 1; @Input() total: number = 0; @Input() size: number = 10; - //@TODO: add previous/next Label input, (pageChanged) event + @Input() prevLabel: string = 'Previous'; + @Input() nextLabel: string = 'Next'; @Output() changePage = new EventEmitter(); pages: number[] = []; diff --git a/src/lib/components/preloader/preloader.component.scss b/src/lib/components/preloader/preloader.component.scss index 592fc137..f060fdc8 100644 --- a/src/lib/components/preloader/preloader.component.scss +++ b/src/lib/components/preloader/preloader.component.scss @@ -1,3 +1,5 @@ +@import "../../../../src/styles/variables"; + .preloader { width: 100%; height: 100%; @@ -37,10 +39,8 @@ box-sizing: border-box; border: 0 solid #1976d2; border-radius: 50%; - -webkit-animation: loader-figure 1.15s infinite - cubic-bezier(0.215, 0.61, 0.355, 1); - -moz-animation: loader-figure 1.15s infinite - cubic-bezier(0.215, 0.61, 0.355, 1); + -webkit-animation: loader-figure 1.15s infinite cubic-bezier(0.215, 0.61, 0.355, 1); + -moz-animation: loader-figure 1.15s infinite cubic-bezier(0.215, 0.61, 0.355, 1); animation: loader-figure 1.15s infinite cubic-bezier(0.215, 0.61, 0.355, 1); } @@ -56,12 +56,10 @@ font-size: 0.875em; letter-spacing: 0.1em; line-height: 1.5em; - color: #1976d2; + color: $reloadly-violet-2; white-space: nowrap; - -webkit-animation: loader-label 1.15s infinite - cubic-bezier(0.215, 0.61, 0.355, 1); - -moz-animation: loader-label 1.15s infinite - cubic-bezier(0.215, 0.61, 0.355, 1); + -webkit-animation: loader-label 1.15s infinite cubic-bezier(0.215, 0.61, 0.355, 1); + -moz-animation: loader-label 1.15s infinite cubic-bezier(0.215, 0.61, 0.355, 1); animation: loader-label 1.15s infinite cubic-bezier(0.215, 0.61, 0.355, 1); } @@ -69,11 +67,11 @@ 0% { height: 0; width: 0; - background-color: #1976d2; + background-color: $reloadly-violet-2; } 29% { - background-color: #1976d2; + background-color: $reloadly-violet-2; } 30% { @@ -97,11 +95,11 @@ 0% { height: 0; width: 0; - background-color: #1976d2; + background-color: $reloadly-violet-2; } 29% { - background-color: #1976d2; + background-color: $reloadly-violet-2; } 30% { @@ -125,11 +123,11 @@ 0% { height: 0; width: 0; - background-color: #1976d2; + background-color: $reloadly-violet-2; } 29% { - background-color: #1976d2; + background-color: $reloadly-violet-2; } 30% { diff --git a/src/lib/components/preloader/preloader.component.ts b/src/lib/components/preloader/preloader.component.ts index 49180479..1b77d2ee 100644 --- a/src/lib/components/preloader/preloader.component.ts +++ b/src/lib/components/preloader/preloader.component.ts @@ -6,7 +6,7 @@ import { Component, Input } from '@angular/core'; styleUrls: ['./preloader.component.scss'] }) export class PreloaderComponent { - @Input('variant') variant: "" | "v2" | "v3" | "v4" = ""; //@TODO: please update in the dashboard accordingly. + @Input('variant') variant: "" | "v2" | "v3" | "v4" = ""; constructor() { } } diff --git a/src/lib/components/quick-action/reloadly-quick-action-tile/reloadly-quick-action-tile.component.scss b/src/lib/components/quick-action/reloadly-quick-action-tile/reloadly-quick-action-tile.component.scss index 34634c71..d73cbadd 100644 --- a/src/lib/components/quick-action/reloadly-quick-action-tile/reloadly-quick-action-tile.component.scss +++ b/src/lib/components/quick-action/reloadly-quick-action-tile/reloadly-quick-action-tile.component.scss @@ -13,10 +13,10 @@ min-height: 60px; border: 1px solid rgba(213, 219, 225, 1); border-radius: 4px; - margin: 4px 0px; + margin: $spacing-4 0px; padding: 16px; position: relative; - background-color: #fff; + background-color: $reloadly-white; display: flex; align-items: center; pointer-events: all; @@ -59,7 +59,7 @@ } .message { - color: $reloadly-black-10; + color: $reloadly-black-2; font-size: 14px; line-height: 20px; max-width: 320px; @@ -86,7 +86,7 @@ h6 { font-size: 14px; font-weight: 450; - color: #30313D; + color: $text-color-2; margin-bottom: 0; } @@ -100,7 +100,7 @@ font-weight: 450; font-size: 14px; height: 28px; - margin: 0px 24px; + margin: 0px $spacing-24; align-self: flex-start; } @@ -118,4 +118,4 @@ fill: #DF1B41; } } -} \ No newline at end of file +} diff --git a/src/lib/components/select/select.component.html b/src/lib/components/select/select.component.html index 7638648a..df444ca3 100644 --- a/src/lib/components/select/select.component.html +++ b/src/lib/components/select/select.component.html @@ -3,13 +3,13 @@

{{selectedOption ? selectedOption.label : placeholder}}

-
- +
+ -
+ -
    +
    • {{item.label}}
    • diff --git a/src/lib/components/select/select.component.scss b/src/lib/components/select/select.component.scss index cf1e0eca..b347f652 100644 --- a/src/lib/components/select/select.component.scss +++ b/src/lib/components/select/select.component.scss @@ -5,31 +5,36 @@ position: relative; $min-width: 30px; $min-dropdown-width: 130px; + &:focus-within { .select-box { box-shadow: 0px 0px 0px 2px $reloadly-violet inset; } } + &.disabled { .select-box { - background: #F6F8FA; + background: $reloadly-ash; cursor: not-allowed; + &:after { width: 100%; min-width: $min-width; height: 100%; - content: ''; + content: ""; position: absolute; top: 0; left: 0; z-index: 3; background: transparent; } + p { - color: $reloadly-black-13; + color: $reloadly-grey; } } } + * { user-select: none; } @@ -46,49 +51,60 @@ background: white; overflow: hidden; cursor: pointer; + p { min-width: 0; flex-grow: 1; - font-size: $font-medium; + font-size: $font-size-s; line-height: 20px; letter-spacing: -0.154px; - color: $reloadly-black-8; + color: $reloadly-black-1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; + margin: 0; } - .icon { + + &_icon { width: 12px; height: 12px; display: flex; align-items: center; justify-content: center; margin-left: 10px; + svg { - width: 12px; + width: 100%; + height: 100%; line-height: 1; } } } + .small { height: 24px; padding: $form-box-padding-small; } + .medium { height: 28px; padding: $form-box-padding-medium; } + .large { height: 40px; padding: $form-box-padding-large; } + .focused { box-shadow: 0px 0px 0px 2px $reloadly-violet inset; } + .error-class { - border: 1px solid #DF1B41; + border: 1px solid #df1b41; box-shadow: none; } + select { width: 100%; min-width: $min-width; @@ -97,7 +113,10 @@ top: 0; opacity: 0; } - .dropdown { + + .reloadly-dropdown { + display: flex; + flex-direction: column; width: 100%; height: auto; min-width: $min-dropdown-width; @@ -110,6 +129,7 @@ background: white; padding: 12px 10px; z-index: 9; + input { width: 100%; height: 36px; @@ -119,38 +139,43 @@ padding: 8px; outline: none; font-weight: 400; - font-size: $font-medium; + font-size: $font-size-s; line-height: 20px; margin-bottom: 16px; } + ul { width: 100%; border-top: 1px solid $border-color; max-height: 200px; - overflow-y: scroll; + overflow-y: auto; + li { width: 100%; font-weight: 450; - font-size: $font-medium; + font-size: $font-size-s; line-height: 20px; padding: 8px 0; border-bottom: 1px solid $border-color; background: transparent; cursor: pointer; + &:hover { background: rgb(250, 250, 250); } } + .no-results { width: 100%; text-align: center; padding: 8px; font-weight: 450; - font-size: $font-medium; + font-size: $font-size-s; line-height: 20px; } } } + .close-dropdown { height: 0; padding: 0; @@ -159,5 +184,7 @@ border: none; } + .icon-disabled { + color: $reloadly-ash; + } } - diff --git a/src/lib/components/select/select.component.ts b/src/lib/components/select/select.component.ts index 7240cb62..19827457 100644 --- a/src/lib/components/select/select.component.ts +++ b/src/lib/components/select/select.component.ts @@ -18,9 +18,7 @@ export class SelectComponent implements OnInit, OnChanges, ControlValueAccessor showDropdown: boolean = false; searchQuery: string = ''; initialValue: string | null = null; - private list = new BehaviorSubject>([]); @Input() selectedOption: SelectOptionItem | null = null; - @Input() size: 'small' | 'medium' | 'large' = 'medium'; @Input() type: 'input' | 'dropdown' = 'input'; @Input() placeholder: string = 'Choose one'; @@ -32,12 +30,16 @@ export class SelectComponent implements OnInit, OnChanges, ControlValueAccessor @Input() disabled: boolean = false; @Output() selectedOptionChange: EventEmitter = new EventEmitter(); - filteredList$ = this.list.pipe(map(options => this.filterMethod(options))); - + public nativeElement: HTMLElement; private onTouched: Function = () => { }; private onChanged: Function = (item: SelectOptionItem | null) => { }; + private list = new BehaviorSubject>([]); - constructor(private eRef: ElementRef) { } + filteredList$ = this.list.pipe(map(options => this.filterMethod(options))); + + constructor(private el: ElementRef) { + this.nativeElement = el.nativeElement; + } writeValue(item: SelectOptionItem | null): void { if (typeof item === 'string') { @@ -56,13 +58,9 @@ export class SelectComponent implements OnInit, OnChanges, ControlValueAccessor this.onTouched = fn; } - setDisabledState(isDisabled: boolean): void { - this.disabled = isDisabled; - } - @HostListener('document:click', ['$event']) clickout(event: any) { - if (!this.eRef.nativeElement.contains(event.target)) { + if (!this.el.nativeElement.contains(event.target)) { this.showDropdown = false; } } @@ -93,16 +91,16 @@ export class SelectComponent implements OnInit, OnChanges, ControlValueAccessor this.list.next(this.options); } - toggleDropdown() { - if (this.type == 'input' || this.disabled) return; - this.showDropdown = !this.showDropdown; - this.searchQuery = ''; - this.filterList(); + toggleDropdown(): void { + if (this.type != 'input' && !this.disabled) { + this.showDropdown = !this.showDropdown; + this.searchQuery = ''; + this.filterList(); + } } optionChanged(event: any) { this.onTouched(); - // this.selectedOptionChange.emit(this.selectedOption); this.writeValue(event) this.onChanged(this.selectedOption?.value); } @@ -110,11 +108,14 @@ export class SelectComponent implements OnInit, OnChanges, ControlValueAccessor selectOption(item: SelectOptionItem) { this.onTouched(); this.toggleDropdown(); - // this.selectedOptionChange.emit(item); this.writeValue(item) this.onChanged(item.value); } + clear(): void { + this.selectedOption = null; + } + private filterMethod = (values: SelectOptionItem[]): SelectOptionItem[] => { if (Array.isArray(values)) return values.filter(item => { diff --git a/src/lib/components/sidebar/sidebar.component.html b/src/lib/components/sidebar/sidebar.component.html index 1ef37772..45f7faf7 100644 --- a/src/lib/components/sidebar/sidebar.component.html +++ b/src/lib/components/sidebar/sidebar.component.html @@ -1,5 +1,5 @@ - + diff --git a/src/lib/components/sidebar/sidebar.component.scss b/src/lib/components/sidebar/sidebar.component.scss index 6cbfc6a8..2c1199d8 100644 --- a/src/lib/components/sidebar/sidebar.component.scss +++ b/src/lib/components/sidebar/sidebar.component.scss @@ -21,9 +21,9 @@ width: auto; text-decoration: none; font-weight: 400; - font-size: $font-regular; + font-size: $font-size-rg; line-height: 20px; - color: $reloadly-black-6; + color: $reloadly-black-3; &:not(:last-of-type) { margin-bottom: 12px; } @@ -59,11 +59,12 @@ width: auto; text-decoration: none; font-weight: 400; - font-size: $font-regular; + font-size: $font-size-rg; line-height: 20px; - color: $reloadly-black-6; - padding: 0px $padding-10; - padding-bottom: $padding-4; + color: $reloadly-black-3; + padding: 0px $spacing-10; + padding-bottom: $spacing-4; + white-space: nowrap; &:not(:last-of-type) { margin-right: 12px; } diff --git a/src/lib/components/svg/svg.component.html b/src/lib/components/svg/svg.component.html index 561a61a5..f40c97e4 100644 --- a/src/lib/components/svg/svg.component.html +++ b/src/lib/components/svg/svg.component.html @@ -1,554 +1,408 @@ - - - - - - - - {{text}} - diff --git a/src/lib/components/tag/tag.component.scss b/src/lib/components/tag/tag.component.scss deleted file mode 100644 index e69de29b..00000000 diff --git a/src/lib/components/tag/tag.component.spec.ts b/src/lib/components/tag/tag.component.spec.ts deleted file mode 100644 index e5117388..00000000 --- a/src/lib/components/tag/tag.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { TagComponent } from './tag.component'; - -describe('TagComponent', () => { - let component: TagComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ TagComponent ] - }) - .compileComponents(); - - fixture = TestBed.createComponent(TagComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/src/lib/components/tag/tag.component.ts b/src/lib/components/tag/tag.component.ts deleted file mode 100644 index 2c976105..00000000 --- a/src/lib/components/tag/tag.component.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Component, Input } from '@angular/core'; - -@Component({ - selector: 'app-tag', //@TODO: should't this be reloadly-tag ? - templateUrl: './tag.component.html', - styleUrls: ['./tag.component.scss'] -}) -export class TagComponent { - @Input() type: 'success' | 'failed' | 'none' | 'warring' | 'processing' = 'success'; - @Input() iconId: string | null = null; - @Input() text: string = ''; -} diff --git a/src/lib/components/tooltip/directive/tooltip.directive.ts b/src/lib/components/tooltip/directive/tooltip.directive.ts index 45796abb..45a7fd7d 100644 --- a/src/lib/components/tooltip/directive/tooltip.directive.ts +++ b/src/lib/components/tooltip/directive/tooltip.directive.ts @@ -1,4 +1,4 @@ -import { ApplicationRef, ComponentRef, Directive, ElementRef, EmbeddedViewRef, HostListener, Injector, Input, TemplateRef, ViewContainerRef } from '@angular/core'; +import { ApplicationRef, ComponentRef, Directive, ElementRef, EmbeddedViewRef, HostListener, Injector, Input, Renderer2, TemplateRef, ViewContainerRef } from '@angular/core'; import { TooltipComponent } from '../tooltip.component'; @Directive({ @@ -6,22 +6,36 @@ import { TooltipComponent } from '../tooltip.component'; exportAs: "reloadly-tooltip" }) export class TooltipDirective { + isOpen: boolean = false; @Input('reloadly-tooltip') tooltip: string = ''; - @Input() position: Position = "top-center" + @Input() position: Position = "top-center"; + @Input('reloadly-tooltip-color') background: string = "white"; private componentRef: ComponentRef | null = null; constructor( private elementRef: ElementRef, private appRef: ApplicationRef, private viewContainerRef: ViewContainerRef, - private injector: Injector + private injector: Injector, + private renderer: Renderer2, ) { } + ngOnChanges() { + if (this.componentRef !== null) { + this.componentRef.instance.text = this.tooltip; + } + } + @HostListener('mouseenter') onMouseEnter(): void { this.show() } + @HostListener('window:scroll') + onScroll(): void { + this.resetPosition(); + } + private setTooltipComponentProperties() { if (this.componentRef !== null) { this.componentRef.instance.text = this.tooltip; @@ -29,41 +43,45 @@ export class TooltipDirective { } } + private resetPosition() { + if (!this.isOpen) return; + this.setPosition(); + } + private setPosition() { - const { left, right, bottom, top } = + const { left, right, bottom, top, width } = this.elementRef.nativeElement.getBoundingClientRect(); - if (this.componentRef !== null) { switch (this.position) { case "top-left": this.componentRef.instance.top = top - 10 - this.componentRef.instance.left = left - this.componentRef.instance.class += "top-left" + this.componentRef.instance.left = left; + this.componentRef.instance.class = "top-left" break; case "top-center": this.componentRef.instance.top = top - 10 - this.componentRef.instance.left = (right - left) / 2 + left - this.componentRef.instance.class += "top-center" + this.componentRef.instance.left = (width / 2) + left; + this.componentRef.instance.class = "top-center" break; case "top-right": this.componentRef.instance.top = top - 10 - this.componentRef.instance.left = (right - left) / 2 + left - this.componentRef.instance.class += "top-right" + this.componentRef.instance.right = window.innerWidth - right; + this.componentRef.instance.class = "top-right" break; case "bottom-left": this.componentRef.instance.top = bottom + 10 - this.componentRef.instance.left = left - this.componentRef.instance.class += "bottom-left" + this.componentRef.instance.left = left; + this.componentRef.instance.class = "bottom-left" break; case "bottom-center": this.componentRef.instance.top = bottom + 10; - this.componentRef.instance.left = (right - left) / 2 + left - this.componentRef.instance.class += "bottom-center" + this.componentRef.instance.left = (width / 2) + left; + this.componentRef.instance.class = "bottom-center" break; case "bottom-right": this.componentRef.instance.top = bottom + 10 - this.componentRef.instance.left = (right - left) / 2 + left - this.componentRef.instance.class += "bottom-right" + this.componentRef.instance.right = window.innerWidth - right; + this.componentRef.instance.class = "bottom-right" break; default: break; @@ -90,6 +108,7 @@ export class TooltipDirective { hide() { this.destroy(); + this.isOpen = false; } show() { @@ -99,9 +118,45 @@ export class TooltipDirective { (this.componentRef.hostView as EmbeddedViewRef) .rootNodes[0] as HTMLElement; document.body.appendChild(domElem); - this.setTooltipComponentProperties() + this.setTooltipComponentProperties(); + this.isOpen = true; + + // Add event listener for draging + this.enableListenForDragging(); + + // Customize + this.customizeToolTip(domElem); + } + } + + private enableListenForDragging() { + this.renderer.listen(this.elementRef.nativeElement, 'mousedown', () => this.listenForDragging()); + this.renderer.listen(this.elementRef.nativeElement, 'touchstart', () => this.listenForDragging()); + } + + private listenForDragging() { + this.renderer.listen("document", 'mousemove', () => this.resetPosition()); + this.renderer.listen("document", 'touchmove', () => this.resetPosition()); + } + + private customizeToolTip(element: HTMLElement) { + // Switch to center position for small items + if (this.elementRef.nativeElement.offsetWidth <= 30) { + this.position = this.position.includes('top') ? 'top-center' : 'bottom-center'; + this.resetPosition(); } + + // Customize color + if (['white', '#FFF', '#FFFFFF', 'rgb(255,255,255)'].includes(this.background)) return; + + const tooltipElement = element.querySelector('.reloadly-tooltip'); + const caretElement = element.querySelector('.caret'); + + this.renderer.setStyle(tooltipElement, "color", "white"); + this.renderer.setStyle(tooltipElement, "background", this.background); + this.renderer.setStyle(caretElement, "background", this.background); } + } diff --git a/src/lib/components/tooltip/tooltip.component.scss b/src/lib/components/tooltip/tooltip.component.scss index 98f6bc91..c7aaed63 100644 --- a/src/lib/components/tooltip/tooltip.component.scss +++ b/src/lib/components/tooltip/tooltip.component.scss @@ -8,15 +8,16 @@ border-radius: 4px; padding: 8px; max-width: 300px; - font-size: $font-medium; + font-size: $font-size-s; line-height: 20px; letter-spacing: -0.154px; - color: $reloadly-black-8; + color: $reloadly-black-1; position: absolute; z-index: 10; &.top-left { - transform: translate(calc(-100% + 30px), -100%); + transform: translate(0, -100%); + margin-right: 10px; .caret { width: 13px; height: 13px; @@ -26,7 +27,7 @@ transform: rotate(45deg); position: absolute; bottom: -7px; - right: 16px; + left: 12px; z-index: 0; } } @@ -39,17 +40,17 @@ border-right: 1px solid #e3e8ee; border-bottom: 1px solid #e3e8ee; background: $reloadly-white; - transform: rotate(45deg); + transform: translate(-50%, 0) rotate(45deg); position: absolute; bottom: -7px; left: 50%; - right: 50%; z-index: 0; } } &.top-right { transform: translate(0%, -100%); + margin-left: 10px; .caret { width: 13px; height: 13px; @@ -59,13 +60,14 @@ transform: rotate(45deg); position: absolute; bottom: -7px; - left: 16px; + right: 12px; z-index: 0; } } &.bottom-left { - transform: translate(calc(-100% + 30px), 0%); + margin-right: 10px; + .caret { width: 13px; height: 13px; @@ -75,7 +77,7 @@ transform: rotate(45deg); position: absolute; top: -7px; - right: 16px; + left: 12px; z-index: 0; } } @@ -88,17 +90,17 @@ border-left: 1px solid #e3e8ee; border-top: 1px solid #e3e8ee; background: $reloadly-white; - transform: rotate(45deg); + transform: translate(-50%, 0) rotate(45deg); position: absolute; top: -7px; left: 50%; - right: 50%; z-index: 0; } } &.bottom-right { transform: translate(0%, 0%); + margin-left: 10px; .caret { width: 13px; height: 13px; @@ -108,7 +110,7 @@ transform: rotate(45deg); position: absolute; top: -7px; - left: 16px; + right: 12px; z-index: 0; } } diff --git a/src/lib/containers/card/card.component.html b/src/lib/containers/card/card.component.html index c3641f2e..a7177645 100644 --- a/src/lib/containers/card/card.component.html +++ b/src/lib/containers/card/card.component.html @@ -1,7 +1,7 @@ -
      -
      +
      +
      {{title}}
      -
      +
      diff --git a/src/lib/containers/card/card.component.scss b/src/lib/containers/card/card.component.scss index eec26267..7de55593 100644 --- a/src/lib/containers/card/card.component.scss +++ b/src/lib/containers/card/card.component.scss @@ -1,17 +1,21 @@ @import "../../../styles/variables"; -.card { +.rld-card { @include drop-shadow; border-radius: 8px; - padding: 16px 32px; + padding: $spacing-4 $spacing-8; + height: 100%; + @media (min-width: 48em) { + padding: $spacing-8 $spacing-32; + } .title { - font-size: $font-regular; + font-size: $font-size-rg; font-weight: 450; margin-bottom: 4px; } -} -.is-flex { - display: flex; -} \ No newline at end of file + .is-flex { + display: flex; + } +} diff --git a/src/lib/containers/containers.module.ts b/src/lib/containers/containers.module.ts index 0eecb74f..5ca4132e 100644 --- a/src/lib/containers/containers.module.ts +++ b/src/lib/containers/containers.module.ts @@ -2,15 +2,15 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { SelectionGridComponent } from './selection-grid/selectable-grid.component'; import { ComponentsModule } from '../components/components.module'; -import { StepperComponent } from './stepper/stepper.component'; +import { ReloadlyStepperComponent } from './stepper/stepper.component'; import { StepComponent } from './stepper/step/step.component'; -import { FormsModule } from '@angular/forms'; -import { CardComponent } from './card/card.component'; import { ReloadlyFormsModule } from '../form/form.module'; +import { CardComponent } from './card/card.component'; +import { FormsModule } from '@angular/forms'; @NgModule({ declarations: [ - StepperComponent, + ReloadlyStepperComponent, StepComponent, CardComponent, SelectionGridComponent @@ -23,7 +23,7 @@ import { ReloadlyFormsModule } from '../form/form.module'; ], exports: [ SelectionGridComponent, - StepperComponent, + ReloadlyStepperComponent, StepComponent, CardComponent ] diff --git a/src/lib/containers/selection-grid/selectable-grid.component.scss b/src/lib/containers/selection-grid/selectable-grid.component.scss index 5db40539..b2dad485 100644 --- a/src/lib/containers/selection-grid/selectable-grid.component.scss +++ b/src/lib/containers/selection-grid/selectable-grid.component.scss @@ -26,22 +26,22 @@ display: flex; justify-content: center; align-items: center; - background-color: white; + background-color: $reloadly-white; border: 2px solid $reloadly-black; border-radius: 4px; font-weight: 450; font-size: 16px; - color: #50565b; + color: $reloadly-black-3; transition: all ease-in-out 300ms; cursor: pointer; box-sizing: border-box; @media screen and (max-width: 768px) { min-width: 85px; min-height: 44px; - padding: $padding-8 $padding-16; + padding: $spacing-8 $spacing-16; } @media screen and (max-width: 575px) { - padding: $padding-4 $padding-8; + padding: $spacing-4 $spacing-8; } &:hover { background-color: $reloadly-violet-5; @@ -49,7 +49,7 @@ } &.selected { background-color: $reloadly-black; - color: #ffffff; + color: $reloadly-white; transition: all ease-in-out 300ms; } } diff --git a/src/lib/containers/stepper/stepper.component.scss b/src/lib/containers/stepper/stepper.component.scss index 93023dc7..2f2dff3d 100644 --- a/src/lib/containers/stepper/stepper.component.scss +++ b/src/lib/containers/stepper/stepper.component.scss @@ -7,15 +7,15 @@ overflow: hidden; // to allow space for box shadows to show - width: calc(100% + $spacing-small); - margin-left: -$spacing-small; - padding-left: $spacing-small; + width: calc(100% + $spacing-16); + margin-left: -$spacing-16; + padding-left: $spacing-16; li { width: 10px; height: 10px; border-radius: 50%; - margin: 0 $spacing-tiny; + margin: 0 $spacing-4; background-color: $reloadly-light-blue; &.rld-active { @@ -28,7 +28,7 @@ &-bullets { width: 100%; display: flex; - padding: $spacing-small; + padding: $spacing-16; justify-content: center; } @@ -45,10 +45,6 @@ flex-basis: 100%; flex-shrink: 0; transition: transform 500ms ease-out; - - >* { - display: block; - } } } } diff --git a/src/lib/containers/stepper/stepper.component.spec.ts b/src/lib/containers/stepper/stepper.component.spec.ts index 57a25de8..12c81b92 100644 --- a/src/lib/containers/stepper/stepper.component.spec.ts +++ b/src/lib/containers/stepper/stepper.component.spec.ts @@ -1,23 +1,23 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { StepperComponent } from './stepper.component'; +import { ReloadlyStepperComponent } from './stepper.component'; -describe('StepperComponent', () => { - let component: StepperComponent; - let fixture: ComponentFixture; +describe('ReloadlyStepperComponent', () => { + let component: ReloadlyStepperComponent; + let fixture: ComponentFixture; - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ StepperComponent ] - }) - .compileComponents(); + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ReloadlyStepperComponent] + }) + .compileComponents(); - fixture = TestBed.createComponent(StepperComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); + fixture = TestBed.createComponent(ReloadlyStepperComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); - it('should create', () => { - expect(component).toBeTruthy(); - }); + it('should create', () => { + expect(component).toBeTruthy(); + }); }); diff --git a/src/lib/containers/stepper/stepper.component.ts b/src/lib/containers/stepper/stepper.component.ts index 7ed4b977..44e46ddb 100644 --- a/src/lib/containers/stepper/stepper.component.ts +++ b/src/lib/containers/stepper/stepper.component.ts @@ -31,7 +31,7 @@ class AnimationOrb { templateUrl: './stepper.component.html', styleUrls: ['./stepper.component.scss'] }) -export class StepperComponent implements AfterContentInit, AfterViewInit, OnDestroy { +export class ReloadlyStepperComponent implements AfterContentInit, AfterViewInit, OnDestroy { private last = 0; private _currentIndex = 0; private viewResolved = false; @@ -149,8 +149,8 @@ export class StepperComponent implements AfterContentInit, AfterViewInit, OnDest const [currentSlide, nextSlide] = this.contents .filter(c => c.index == this.currentIndex || c.index == this.currentIndex + 1) .map(c => c.el.nativeElement); - if (nextSlide) { - setTimeout(() => { + setTimeout(() => { + if (nextSlide) { this.kickOutPrevious(); this.renderer.setStyle(currentSlide, 'transition', 'none'); this.renderer.setStyle(currentSlide, 'transform', 'translateX(0)'); @@ -159,16 +159,18 @@ export class StepperComponent implements AfterContentInit, AfterViewInit, OnDest // reset setTimeout(() => { this.renderer.setStyle(currentSlide, 'transition', 'transform 500ms ease-out'); + this.renderer.setStyle(nextSlide, 'transition', 'transform 500ms ease-out'); this.renderer.listen(currentSlide, 'transitionend', () => { const nextAnimation = this.animationQueue.pop(); if (nextAnimation) nextAnimation.play(); }) }, 10); - }, 500); // corresponds to transform 500ms of stepper.component.scss - } else { - this.hidePrevious(); - this.reachedLastStep.emit(); - } + + } else { + this.hidePrevious(); + this.reachedLastStep.emit(); + } + }, 500); // corresponds to transform 500ms of stepper.component.scss } } diff --git a/src/lib/directives/directives.module.ts b/src/lib/directives/directives.module.ts index 80a71f2b..1e4ff461 100644 --- a/src/lib/directives/directives.module.ts +++ b/src/lib/directives/directives.module.ts @@ -1,18 +1,15 @@ import { NgModule } from '@angular/core'; -import { OutsideClickDirective } from './outside-click.directive'; import { TableDirective } from './table.directive'; import { CommonModule } from '@angular/common'; @NgModule({ imports: [CommonModule], exports: [ - OutsideClickDirective, TableDirective ], declarations: [ - OutsideClickDirective, TableDirective ], providers: [], }) -export class ReloadlyUiDirectivesModule { } +export class DirectivesModule { } diff --git a/src/lib/directives/outside-click.directive.ts b/src/lib/directives/outside-click.directive.ts deleted file mode 100644 index e4ce1b77..00000000 --- a/src/lib/directives/outside-click.directive.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { - Directive, - EventEmitter, - HostListener, - Output, - ElementRef, - Input, -} from '@angular/core'; - -@Directive({ - selector: '[outsideClick]', -}) -export class OutsideClickDirective { - @Input() - identifier?: string; - @Input() - excludeIdentifier?: string[]; - @Output() - outsideClick: EventEmitter = new EventEmitter(); - - @HostListener('document:mousedown', ['$event', '$event.target']) - public onClick(event: MouseEvent, targetElement: HTMLElement): void { - let clickedComponent = targetElement; - let inside = false; - do { - if(this.excludeIdentifier && this.excludeIdentifier?.length && (this.excludeIdentifier.includes(clickedComponent.id))) { - return; - } - if (clickedComponent === this.elementRef.nativeElement) { - inside = true; - break; - } else { - clickedComponent = clickedComponent?.parentNode as HTMLElement; - } - } while (clickedComponent); - - if (!inside && this.elementRef.nativeElement.id == this.identifier) { - this.outsideClick.emit(this.identifier); - } - } - - constructor(private elementRef: ElementRef) { } -} diff --git a/src/lib/form/checkbox/checkbox.component.scss b/src/lib/form/checkbox/checkbox.component.scss index abbc6558..ed92bafc 100644 --- a/src/lib/form/checkbox/checkbox.component.scss +++ b/src/lib/form/checkbox/checkbox.component.scss @@ -66,7 +66,7 @@ &-object { margin: auto; display: block; - border: 2px solid lighten($color: $text, $amount: 10); + border: 2px solid lighten($color: $text-color, $amount: 10); border-radius: 2px; height: 20px; width: 20px; @@ -78,11 +78,12 @@ margin: 0; display: block; stroke-width: 3; - stroke: #ffffff; + stroke: $reloadly-white; stroke-miterlimit: 10; - transform: scale(1.6); + color: transparent; &__checked { + fill: none; transform-origin: 50% 50%; stroke-dasharray: 48; stroke-dashoffset: 48; @@ -106,4 +107,4 @@ height: 100%; opacity: 0; } -} \ No newline at end of file +} diff --git a/src/lib/form/checkbox/checkbox.component.ts b/src/lib/form/checkbox/checkbox.component.ts index c1f9e224..85da8c82 100644 --- a/src/lib/form/checkbox/checkbox.component.ts +++ b/src/lib/form/checkbox/checkbox.component.ts @@ -1,6 +1,6 @@ import { animate, keyframes, state, style, transition, trigger } from '@angular/animations'; import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, Renderer2, ViewChild } from '@angular/core'; -import { BehaviorSubject, ReplaySubject, map, skip, takeUntil, tap } from 'rxjs'; +import { BehaviorSubject, ReplaySubject, map, filter, takeUntil, tap, take, skip } from 'rxjs'; import { FormControl } from '@angular/forms'; export interface CheckBoxValue { @@ -79,12 +79,15 @@ type FillColoring = 'color' | 'fade' | 'transparent'; ] }) export class CheckboxComponent implements OnInit, AfterViewInit, OnDestroy { + @Output() change: EventEmitter = new EventEmitter(); @Input() name: string = ''; @Input() label: string = ''; @Input() control!: FormControl | null; - @Input() set checked(value: boolean) { this.state.isChecked.next({ value }) }; @Input() set disabled(value: boolean) { this.state.disabled.next(value) }; - @Output() change: EventEmitter = new EventEmitter(); + @Input() set checked(value: boolean) { + if (this.hasViewInit.getValue()) this.setIsCheckedNoEmit(value); + else this.hasViewInit.pipe(filter(v => v == true), take(1)).subscribe(() => this.setIsCheckedNoEmit(value)); + }; @ViewChild('checkBox') checkBox!: ElementRef; @ViewChild('disc') disc!: ElementRef; @@ -112,25 +115,27 @@ export class CheckboxComponent implements OnInit, AfterViewInit, OnDestroy { isChecked: new BehaviorSubject<{ value: boolean, metadata?: any }>({ value: false, metadata: null }), disabled: new BehaviorSubject(false), }; - private get _isChecked$(): BehaviorSubject<{ value: boolean, metadata?: any }> { return this.state.isChecked } private listeners = new Array<() => void>; private subs: ReplaySubject = new ReplaySubject(1); + private hasViewInit: BehaviorSubject = new BehaviorSubject(false); constructor(private renderer: Renderer2) { } ngOnInit(): void { if (!this.control) { - this.isChecked$ + this.state.isChecked .pipe(skip(1), takeUntil(this.subs)) - .subscribe(checked => { - this.change.emit({ - name: this.name, - isChecked: checked, - label: this.label - }) + .subscribe(status => { + if (!(status?.metadata && status.metadata?.noEmit)) { + this.change.emit({ + name: this.name, + isChecked: status.value, + label: this.label + }) + } }); } else { - this._isChecked$ + this.state.isChecked .pipe( tap(checked => { if (checked?.metadata && checked.metadata?.noEmit) @@ -150,6 +155,7 @@ export class CheckboxComponent implements OnInit, AfterViewInit, OnDestroy { this.listenForHovered(); this.listenForFocused(); this.listenForPressed(); + this.hasViewInit.next(true); } public get borderColoring(): BorderColoring | null { @@ -221,17 +227,13 @@ export class CheckboxComponent implements OnInit, AfterViewInit, OnDestroy { private listenForFocused(): void { this.listeners.concat([ - // @TODO test on mobile devices - this.renderer.listen(this.checkBox.nativeElement, 'mousedown', this.onFocused), - this.renderer.listen(this.checkBox.nativeElement, 'touchstart', this.onFocused) + this.renderer.listen(this.checkBox.nativeElement, 'mousedown', this.onFocused) ]); } private listenForPressed(): void { this.listeners.concat([ - this.renderer.listen(this.checkBox.nativeElement, 'mouseup', this.onPressed), - // @TODO test on mobile devices - // this.renderer.listen(this.checkBox.nativeElement, 'touchend', this.onPressed + this.renderer.listen(this.checkBox.nativeElement, 'mouseup', this.onPressed) ]); } diff --git a/src/lib/form/form.module.ts b/src/lib/form/form.module.ts index 2a0731a2..23551513 100644 --- a/src/lib/form/form.module.ts +++ b/src/lib/form/form.module.ts @@ -5,6 +5,7 @@ import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { CheckboxComponent } from './checkbox/checkbox.component'; import { DropdownSelectComponent } from './dropdown-select/dropdown-select.component'; import { SearchBarComponent } from './search-bar/search-bar.component' +import { ComponentsModule } from '../components/components.module'; @NgModule({ declarations: [ @@ -17,6 +18,7 @@ import { SearchBarComponent } from './search-bar/search-bar.component' CommonModule, ReactiveFormsModule, FormsModule, + ComponentsModule ], exports: [ DropdownSelectComponent, diff --git a/src/lib/form/range-slider/range-slider.component.html b/src/lib/form/range-slider/range-slider.component.html index 4ead9459..ab15e186 100644 --- a/src/lib/form/range-slider/range-slider.component.html +++ b/src/lib/form/range-slider/range-slider.component.html @@ -1,10 +1,19 @@ -
      -

      {{symbol + min}}

      -
      - -
      +
      +

      {{formattedMin}}

      +
      + +
      + + + + + + +
      +
      -

      {{symbol + max}}

      - +

      {{formattedMax}}

      diff --git a/src/lib/form/range-slider/range-slider.component.scss b/src/lib/form/range-slider/range-slider.component.scss index d7b749bf..b33c7a42 100644 --- a/src/lib/form/range-slider/range-slider.component.scss +++ b/src/lib/form/range-slider/range-slider.component.scss @@ -1,66 +1,98 @@ +@use "sass:math"; @import "../../../styles/variables"; -$height: 30px; +$thickness: 22px; -.range-slider { - display: flex; +.rld { + &-range-slider { + display: flex; + align-items: flex-end; - .rail { - width: 100%; - position: relative; - min-height: $height; - display: flex; - flex-direction: column; - justify-content: center; - flex-basis: 72%; - flex-grow: 1; - } + * { + user-select: none; + } + } - .slide { - width: 100%; - height: 10px; - background: $reloadly-light-blue; - border: none; - border-radius: $input-radius * 2; - } + &-rail { + width: 100%; + position: relative; + min-height: $thickness; + display: flex; + flex-direction: column; + justify-content: center; + margin: 0; + padding: 0; - .knob { - display: block; - position: absolute; - left: 0px; - width: $height; - height: $height; - border-radius: 50%; - background-color: darken($color: $reloadly-light-blue, $amount: 15); - } + &-container { + position: relative; + flex-basis: 72%; + flex-grow: 1; + min-height: $thickness; + overflow-x: hidden; + display: flex; + flex-direction: column; + justify-content: flex-end; + align-items: center; + padding: 0 math.div($thickness, 4); + padding-top: $box-halo-width; + } + } - .input { - max-width: 120px; - flex-basis: 20%; - flex-shrink: 1; - margin-left: $spacing-smallest; - } + &-slide { + width: 100%; + height: 10px; + background: $reloadly-light-blue; + border: none; + border-radius: $input-radius * 2; + } - .min-max { - flex-basis: 4%; - display: inline-flex; - align-self: center; - padding: 5px; - font-weight: 450; - } + &-knob { + display: block; + position: absolute; + left: 0px; + width: $thickness; + height: $thickness; + border-radius: 50%; + background-color: darken($color: $reloadly-light-blue, $amount: 15); + } - &.disabled { - .slide { - background-color: $reloadly-disabled-color; - } + &-range-input { + max-width: 80px; + margin-bottom: 2px; + } - .knob { - background-color: darken($color: $reloadly-disabled-color, $amount: 5); - cursor: not-allowed; - } + &-min-max { + flex-basis: 4%; + display: inline-flex; + padding: 0 5px; + font-weight: 450; + user-select: none; + line-height: 1; - .input { - @include disabled; - } - } -} \ No newline at end of file + &-min { + padding-left: 0; + } + + &-max { + padding-right: 0; + } + } + + &-disabled { + .rld-slide { + background-color: $reloadly-disabled-color; + } + + .rld-knob { + background-color: darken($color: $reloadly-disabled-color, $amount: 5); + cursor: not-allowed; + } + + .rld-input { + background-color: $reloadly-disabled-color; + border: 0; + box-shadow: none; + cursor: not-allowed; + } + } +} diff --git a/src/lib/form/range-slider/range-slider.component.ts b/src/lib/form/range-slider/range-slider.component.ts index 1734b2ce..4e9c7313 100644 --- a/src/lib/form/range-slider/range-slider.component.ts +++ b/src/lib/form/range-slider/range-slider.component.ts @@ -6,10 +6,12 @@ import { EventEmitter, Inject, Input, + OnChanges, OnDestroy, OnInit, Output, Renderer2, + SimpleChanges, ViewChild } from '@angular/core'; import { ReplaySubject, Subject, takeUntil } from 'rxjs'; @@ -19,26 +21,33 @@ import { ReplaySubject, Subject, takeUntil } from 'rxjs'; templateUrl: './range-slider.component.html', styleUrls: ['./range-slider.component.scss'] }) -export class RangeSliderComponent implements OnInit, AfterViewInit, OnDestroy { - @Input() min!: number; - @Input() max!: number; +export class RangeSliderComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy { + @Input() set min(value: number) { this._min = Math.max(0, value) }; + @Input() set max(value: number) { this._max = Math.max(this.min, value) }; @Input() symbol: string = ''; @Input() showInput: boolean = true; - @Input() baseSize: number = 30; @Input() disabled!: boolean; @Input() fontSize: string = '16px'; - @Output() currentValue = new EventEmitter(); + @Input() showLabel: boolean = false; + @Input() set currentValue(value: number) { this.setCurrentValue(value, false) }; + @Output() currentValueChange = new EventEmitter(); @Output() currentPercentage = new EventEmitter(); @ViewChild('range') range!: ElementRef; @ViewChild('knob') knob!: ElementRef; @ViewChild('input') input!: ElementRef; + public get min(): number { return this._min } + public get max(): number { return this._max } + private knobListeners = new Array<() => void>; private windowListeners = new Array<() => void>; private window; - private value = new Subject<[value: number, percentage: number]>(); + private _min = 0; + private _max = 0; + private value: number = 0; + private values = new Subject<[value: number, percentage: number, emitEvent: boolean]>(); private subs: ReplaySubject = new ReplaySubject(1); constructor(private renderer: Renderer2, @Inject(DOCUMENT) private document: Document) { @@ -46,10 +55,14 @@ export class RangeSliderComponent implements OnInit, AfterViewInit, OnDestroy { } ngOnInit(): void { - this.value.pipe(takeUntil(this.subs)) + this.values.pipe(takeUntil(this.subs)) .subscribe(currentValue => { - this.currentValue.emit(currentValue[0]); - this.currentPercentage.emit(currentValue[1]); + const [value, percentage, emitEvent] = currentValue; + this.value = value; + if (emitEvent) { + this.currentValueChange.emit(value); + this.currentPercentage.emit(percentage); + } }); } @@ -66,6 +79,15 @@ export class RangeSliderComponent implements OnInit, AfterViewInit, OnDestroy { ]; } + ngOnChanges(changes: SimpleChanges): void { + if (changes?.['currentValue']?.['currentValue'] && this.max) { + this.setCurrentValue(changes['currentValue']['currentValue'], false); + } else if ((changes?.['min']?.['currentValue'] || changes?.['max']?.['currentValue']) && this.value) { + this.setCurrentValue(this.value, false); + this.ensureKnobPositionFallback(this.value); + } + } + ngOnDestroy(): void { this.windowListeners.forEach(eventEnder => eventEnder()); this.knobListeners.forEach(eventEnder => eventEnder()); @@ -74,17 +96,36 @@ export class RangeSliderComponent implements OnInit, AfterViewInit, OnDestroy { } public inputChanged(event: Event): void { - const value = parseInt((event.target as HTMLInputElement).value) || 0; + this.setCurrentValue(parseInt((event.target as HTMLInputElement).value) || 0); + } + + get formattedValue(): string { + return (this.symbol ? (this.symbol + ' ') : '') + (+this.value ?? ''); + } + + get formattedMin(): string { + return (this.symbol ?? '') + (+this.min); + } + + get formattedMax(): string { + return (this.symbol ?? '') + (+this.max); + } + + private setCurrentValue(value: number, emitEvent = true) { const difference = this.max - this.min; - const percentage = Math.round((value / difference) * 100); - this.value.next([value, percentage]); + const mappedValue = Math.max(value, this.min) - this.min; + const percentage = Math.round((mappedValue / difference) * 100); + this.values.next([value, percentage, emitEvent]); + if (this.input?.nativeElement) this.renderer.setProperty(this.input.nativeElement, 'value', value); this.moveSlider(percentage); } - private changeValue(percentage: number): void { - const value = Math.round((percentage / 100) * this.max); - this.value.next([value, percentage]); - this.renderer.setProperty(this.input.nativeElement, 'value', value); + private setCurrentPercentage(percentage: number, emitEvent = true): void { + const difference = this.max - this.min; + const value = Math.round((percentage / 100) * difference) + this.min; + this.values.next([value, percentage, emitEvent]); + if (this.input?.nativeElement) this.renderer.setProperty(this.input.nativeElement, 'value', value); + this.moveSlider(percentage); } private enableSlide(event: Event): void { @@ -112,28 +153,34 @@ export class RangeSliderComponent implements OnInit, AfterViewInit, OnDestroy { xLength = event.touches[0].pageX - slider.getBoundingClientRect().left; // TODO test on touchscreen devices } - event.preventDefault(); - let percentage = this.clip(Math.round((xLength / slider.offsetWidth) * 100)); - - this.window?.requestAnimationFrame(() => { - this.moveSlider(percentage); - }); - this.changeValue(percentage); + let percentage = this.clamp(Math.round((xLength / slider.clientWidth) * 100)); + this.setCurrentPercentage(percentage); } } - private clip(number: number, min = 0, max = 100): number { + private moveSlider(percentage: number): void { + percentage = this.clamp(percentage); + void this.range?.nativeElement.offsetWidth; // important for DOM reflow recalculation + this.window?.requestAnimationFrame(() => { + // @TODO sometimes, the browser calculates wrong client/offset-Width for range.nativeElement + // which is different from the value visible and calculated in dev tools inspect, even after a long time has elapsed + // this could be because of flex grow. This can cause the knob to go beyond the slider when the page is first loaded. + // don't forget to update slider.clientWidth on line 156 to offsetWidth if you'll be using offsetWidth + const sliderWidth = this.range?.nativeElement.clientWidth - this.knob?.nativeElement.clientWidth; + // @TODO check if void this.range?.nativeElement.offsetWidth; above fixes the issue + let x = Math.round((percentage / 100) * sliderWidth); + x = this.clamp(x, 0, sliderWidth); + if (this.knob?.nativeElement) this.knob.nativeElement.style.left = x + 'px'; + }); + } + + private clamp(number: number, min = 0, max = 100): number { if (number < min) return min; if (number > max) return max; - return number; + return number || 0; } - private moveSlider(percentage: number): void { - percentage = this.clip(percentage); - const sliderWidth = this.range.nativeElement.offsetWidth - this.knob.nativeElement.offsetWidth; - let x = Math.round((percentage / 100) * sliderWidth); - x = this.clip(x, 0, sliderWidth); - this.knob.nativeElement.style.left = x + "px"; + private ensureKnobPositionFallback(value: number): void { + setTimeout(() => this.setCurrentValue(value, false), 400); } - } diff --git a/src/lib/form/search-bar/search-bar.component.html b/src/lib/form/search-bar/search-bar.component.html index f813239d..bf311668 100644 --- a/src/lib/form/search-bar/search-bar.component.html +++ b/src/lib/form/search-bar/search-bar.component.html @@ -1,8 +1,8 @@ diff --git a/src/lib/form/search-bar/search-bar.component.scss b/src/lib/form/search-bar/search-bar.component.scss index 974bf313..924baac7 100644 --- a/src/lib/form/search-bar/search-bar.component.scss +++ b/src/lib/form/search-bar/search-bar.component.scss @@ -17,14 +17,14 @@ background: transparent; flex-grow: 1; font-weight: 450; - font-size: $font-medium; - color: $reloadly-black-8; + font-size: $font-size-s; + color: $reloadly-black-1; outline: none; &::placeholder { - color: $reloadly-black-8; + color: $reloadly-black-1; } } - .icon { + &_icon { width: 12px; height: 12px; display: flex; @@ -32,7 +32,8 @@ justify-content: center; cursor: pointer; svg { - width: 12px; + width: 100%; + height: 100%; line-height: 1; } } diff --git a/src/lib/form/search-bar/search-bar.component.ts b/src/lib/form/search-bar/search-bar.component.ts index 0ae8cc11..a45a67b5 100644 --- a/src/lib/form/search-bar/search-bar.component.ts +++ b/src/lib/form/search-bar/search-bar.component.ts @@ -1,16 +1,16 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; @Component({ - selector: 'app-search-bar', - templateUrl: './search-bar.component.html', - styleUrls: ['./search-bar.component.scss'] + selector: 'reloadly-search-bar', + templateUrl: './search-bar.component.html', + styleUrls: ['./search-bar.component.scss'] }) export class SearchBarComponent { - @Input() placeholder:string = 'Search'; + @Input() placeholder: string = 'Search'; @Input() size: 'small' | 'medium' | 'large' = 'medium'; @Input() query: string = ''; @Output() queryChange: EventEmitter = new EventEmitter(); - constructor() {} - + constructor() { } + } diff --git a/src/lib/reloadly-ui.module.ts b/src/lib/reloadly-ui.module.ts index 7cf5a1e9..314a25db 100644 --- a/src/lib/reloadly-ui.module.ts +++ b/src/lib/reloadly-ui.module.ts @@ -1,9 +1,10 @@ import { NgModule } from '@angular/core'; import { ComponentsModule } from './components/components.module'; import { ReloadlyModal } from './components/modal/reloadly-modal'; +import { DirectivesModule } from './directives/directives.module'; @NgModule({ - imports: [ComponentsModule], - exports: [ComponentsModule], + imports: [ComponentsModule, DirectivesModule], + exports: [ComponentsModule, DirectivesModule], providers: [ReloadlyModal] }) export class ReloadlyUiModule { } diff --git a/src/public-api.ts b/src/public-api.ts index cf740c32..9f1d41ce 100644 --- a/src/public-api.ts +++ b/src/public-api.ts @@ -5,10 +5,8 @@ //@TODO: please review this file, seems to me that some components are exported multi times. Ex: export * from component.module and then individual components also. Ideally, we would export from modules, component, containers, form.. import { SelectableItem } from './lib/models/selectable-item'; import { CardComponent } from './lib/containers/card/card.component'; -import { DateComponent } from './lib/components/date/date.component'; import { SearchBarComponent } from './lib/form/search-bar/search-bar.component'; import { MenuDirective } from './lib/components/menu/directives/menu.directive'; -import { OutsideClickDirective } from './lib/directives/outside-click.directive'; import { ButtonDirective } from './lib/components/button/directives/button.directive'; import { RangeSliderComponent } from './lib/form/range-slider/range-slider.component'; import { BadgeComponent, BadgeVariant } from './lib/components/badge/badge.component'; @@ -21,28 +19,30 @@ import { FormLabelComponent } from './lib/components/form-group/form-label/form- import { FormGroupDirective } from './lib/components/form-group/directives/form-group.directive'; import { InputGroupDirective } from './lib/components/input-group/directives/input-group.directive'; import { ReloadlyQuickActionComponent } from './lib/components/quick-action/quick-action.component'; -import { BreadcrumbsComponent } from './lib/components/breadcrumb-group/breadcrumbs/breadcrumbs.component'; +import { ReloadlyBreadcrumbsComponent } from './lib/components/breadcrumb-group/breadcrumbs/breadcrumbs.component'; import { QuickAction, QuickActionInterface, QuickActionPosition, QuickActionType } from './lib/models/quick-action'; import { ReloadlyModalOutletComponent } from './lib/components/modal/reloadly-modal-outlet/reloadly-modal-outlet.component'; +import { ReloadlyAccordionItemContent } from './lib/components/accordion/directives/accordion-item-content.directive'; import { BreadcrumbItemComponent } from './lib/components/breadcrumb-group/breadcrumb-item/breadcrumb-item.component'; +import { ReloadlyExpandableTileComponent } from './lib/components/expandable-tile/expandable-tile.component'; import { DropdownConfig, SelectComponent, SelectOptionItem } from './lib/components/select/select.component'; +import { ReloadlyAccordionItem } from './lib/components/accordion/directives/accordion-item.directive'; import { InputLabelComponent } from './lib/components/input-group/input-label/input-label.component'; import { SelectionGridComponent } from './lib/containers/selection-grid/selectable-grid.component'; import { MenuDividerComponent } from './lib/components/menu/menu-divider/menu-divider.component'; import { MenuSectionComponent } from './lib/components/menu/menu-section/menu-section.component'; -import { EmptyStateComponent } from './lib/components/empty-state/empty-state.component'; +import { ReloadlyAccordionComponent } from './lib/components/accordion/accordion.component'; import { TooltipDirective } from './lib/components/tooltip/directive/tooltip.directive'; import { PaginationComponent } from './lib/components/pagination/pagination.component'; import { PreloaderComponent } from './lib/components/preloader/preloader.component'; import { SidebarComponent } from './lib/components/sidebar/sidebar.component'; import { TooltipComponent } from './lib/components/tooltip/tooltip.component'; -import { StepperComponent } from './lib/containers/stepper/stepper.component'; +import { ReloadlyStepperComponent } from './lib/containers/stepper/stepper.component'; import { StepComponent } from './lib/containers/stepper/step/step.component'; import { SwitchComponent } from './lib/components/switch/switch.component'; import { SelectableViewStyle } from './lib/enums/selectable-view-style'; import { SelectableViewType } from './lib/enums/selectable-view-type'; import { MenuComponent } from './lib/components/menu/menu.component'; -import { TagComponent } from './lib/components/tag/tag.component'; import { SvgComponent } from './lib/components/svg/svg.component'; import { TableDirective } from './lib/directives/table.directive'; export * from './lib/reloadly-ui.module'; @@ -50,7 +50,6 @@ export * from './lib/reloadly-ui.module'; export * from './lib/components/components.module'; export { SvgComponent, - TagComponent, PaginationComponent, SidebarComponent, SwitchComponent, @@ -62,12 +61,10 @@ export { InputGroupDirective, InputLabelComponent, TableDirective, - DateComponent, PreloaderComponent, DropdownConfig, - BreadcrumbsComponent, - BreadcrumbItemComponent, - EmptyStateComponent + ReloadlyBreadcrumbsComponent, + BreadcrumbItemComponent }; export * from './lib/form/form.module'; @@ -100,7 +97,7 @@ export * from './lib/containers/containers.module'; export { CardComponent, SelectionGridComponent, - StepperComponent, + ReloadlyStepperComponent, StepComponent, }; @@ -111,8 +108,19 @@ export { }; export * from './lib/directives/directives.module'; -export { OutsideClickDirective } export * from './lib/components/quick-action/quick-action.module'; export { ReloadlyQuickActionComponent, ReloadlyQuickActionService }; export { QuickAction, QuickActionInterface, QuickActionPosition, QuickActionType }; + +export * from './lib/components/accordion/accordion.module'; +export { + ReloadlyAccordionComponent, + ReloadlyAccordionItem, + ReloadlyAccordionItemContent +}; + +export * from './lib/components/expandable-tile/expandable-tile.module' +export { + ReloadlyExpandableTileComponent +} diff --git a/src/styles/button.scss b/src/styles/button.scss index facef3f3..09553bf8 100644 --- a/src/styles/button.scss +++ b/src/styles/button.scss @@ -119,32 +119,40 @@ color: $reloadly-violet; box-shadow: 0px 1px 3px 1px RGB(0 0 0 / 15%), 0px 1px 2px 0px RGB(0 0 0 / 30%); - background: linear-gradient(0deg, + background: linear-gradient( + 0deg, rgba(103, 80, 164, 0.05), - rgba(103, 80, 164, 0.05)), + rgba(103, 80, 164, 0.05) + ), #fffbfe; &:hover { color: $reloadly-violet; - background: linear-gradient(0deg, + background: linear-gradient( + 0deg, rgba(103, 80, 164, 0.05), - rgba(103, 80, 164, 0.05)), + rgba(103, 80, 164, 0.05) + ), #fffbfe; } &:focus { color: $reloadly-violet; - background: linear-gradient(0deg, + background: linear-gradient( + 0deg, rgba(103, 80, 164, 0.05), - rgba(103, 80, 164, 0.05)), + rgba(103, 80, 164, 0.05) + ), #fffbfe; } &:active { color: $reloadly-violet; - background: linear-gradient(0deg, + background: linear-gradient( + 0deg, rgba(103, 80, 164, 0.05), - rgba(103, 80, 164, 0.05)), + rgba(103, 80, 164, 0.05) + ), #fffbfe; box-shadow: none; } @@ -552,19 +560,32 @@ &.lg { padding: 10px 20px; - font-size: $font-regular; + font-size: $font-size-rg; font-weight: 450; } &.xl { padding: 12px 24px; - font-size: $font-regular; + font-size: $font-size-rg; + font-weight: 450; + } + + &.md { + padding: 8px 12px; + font-size: $font-size-rg; + font-weight: 450; + } + + &.sm { + padding: 6px 10px; + font-size: $font-size-rg; font-weight: 450; } &.xs { padding: 4px 8px; border-radius: 4px; + font-size: $font-size-s; &.filled { &:focus { @@ -586,7 +607,7 @@ .menu-item { color: #393c40; - font-size: $font-medium; + font-size: $font-size-s; font-weight: 450; line-height: 20px; display: flex; diff --git a/src/styles/forms.scss b/src/styles/forms.scss index 6f0cda1e..2fa3b888 100644 --- a/src/styles/forms.scss +++ b/src/styles/forms.scss @@ -1,200 +1,19 @@ $input-shadow: inset 0 0.0625em 0.125em RBG(10 10 10 / .05); -@mixin input-base { - appearance: none; - border: $border-width solid $input-border-color; - border-radius: $input-radius; - line-height: 1; - max-width: 100%; - width: 100%; - min-height: 1em; - font-size: 1rem; - color: $reloadly-black-4; - padding: $spacing-smallest; - padding-top: 12px; - background-color: $background-color; - - &:focus, - &:active { - outline: none; - } +@mixin disabled-input { + background: $reloadly-form-disabled; + border: 1px solid $border-color; + cursor: not-allowed; - &::placeholder { - color: $reloadly-black-4; + * { + cursor: not-allowed !important; } } -@mixin hover-effect { - border-color: darken($color: $input-border-color, $amount: 10); -} - form { - width: 100%; - padding: $spacing-smaller 0; - - .entry { - max-width: 100%; - width: 100%; - display: block; - margin: $spacing-small 1px; - - .label { - display: block; - margin: $spacing-smallest 0; - font-weight: 450; - font-size: $font-medium; - color: $reloadly-black-2; - } - - .legend { - display: inline-block; - margin: $spacing-smallest 0; - font-weight: 450; - } - } - - fieldset.entry { - - .input, - .select { - margin-bottom: $spacing-smallest; - } - - div.select { - @include input-base; - box-shadow: $input-shadow; - padding: $spacing-smallest 0; - display: inline-block; - max-width: 100%; - position: relative; - vertical-align: top; - min-height: 1em; - - &:hover, - &:active, - &:focus { - @include hover-effect; - } - - &.disabled { - @include disabled; - - select { - background-color: $input-disabled-background-color; - - &:disabled { - @include disabled; - } - } - } - - &::after { - border: 3px solid transparent; - border-radius: 2px; - border-right: 0; - border-top: 0; - content: " "; - display: block; - height: 0.625em; - margin-top: -0.4375em; - pointer-events: none; - position: absolute; - z-index: 4; - right: 1.25em; - top: 50%; - transform: rotate(-45deg); - transform-origin: center; - width: 0.625em; - border-color: $text; - } - - select { - padding: 0 $spacing-smallest; - width: 100%; - border: none; - cursor: pointer; - display: block; - font-size: 1em; - max-width: 100%; - outline: none; - appearance: none; - min-height: 25px; - background-color: $background-color; - color: inherit; - } - } - } -} - -.input, -.textarea { - @include input-base; - box-shadow: $input-shadow; - - &:hover, - &:active, - &:focus { - @include hover-effect; - } - - &:active, - &:focus { - border-color: darken($color: $input-border-color, $amount: 10); - box-shadow: 0 0 0 0.125em darken($color: $input-border-color, $amount: 10); - } - - &:disabled { - @include disabled; - } - - &:read-only { - box-shadow: none; - } -} - -.textarea { - width: 100%; - resize: vertical; - display: block; - min-height: 8em; -} - -.button { - &-primary { - @include input-base; - background: $reloadly-violet; - padding: $button-padding; - font-weight: 450; - font-size: $font-regular; - color: $reloadly-white; - border: none; - cursor: pointer; - transition: ease all 0.4s; - - &:hover { - background-color: $reloadly-violet-2; - } - } - - &-cancel { - @include input-base; - background: $reloadly-black-6; - padding: $button-padding; - font-weight: 450; - font-size: $font-regular; - color: $reloadly-white; - border: none; - cursor: pointer; - transition: ease all 0.4s; - - &:hover { - background-color: $reloadly-black-6-hover; - } - } + padding: $spacing-10 0; } -// Form Group styles - .form-container { width: 100%; display: flex; @@ -208,7 +27,6 @@ form { border-radius: 4px; } -// New Input fields .input-group { display: flex; flex-flow: column; @@ -221,20 +39,23 @@ form { border-radius: 4px; outline: none; font-weight: 400; - font-size: $font-medium; + font-size: $font-size-s; line-height: 20px; transition: all ease 0.4s; - box-shadow: 0px 0px 0px 3px transparent; - display: flex; + box-shadow: 0px 0px 0px $box-halo-width transparent; align-items: center; &::placeholder { - color: $reloadly-black-13; + color: $reloadly-grey; } &:focus { border: 1px solid $border-color; - box-shadow: 0px 0px 0px 3px rgba(58, 151, 212, 0.36); + box-shadow: 0px 0px 0px $box-halo-width rgba(58, 151, 212, 0.36); + } + + &:disabled, &[disabled] { + @include disabled-input(); } } @@ -251,20 +72,14 @@ form { } .disabled-input { - background: $reloadly-form-disabled; - border: 1px solid $border-color; + @include disabled-input(); border-radius: 4px; - cursor: not-allowed; &:focus { border: 1px solid $border-color; border-radius: 4px; box-shadow: none; } - - * { - cursor: not-allowed !important; - } } .error-input { diff --git a/src/styles/styles.scss b/src/styles/styles.scss index 8e3c5bac..82ae4699 100644 --- a/src/styles/styles.scss +++ b/src/styles/styles.scss @@ -1,4 +1,5 @@ @import "variables"; @import "fonts"; @import "forms"; -@import "button"; \ No newline at end of file +@import "button"; +@import "table"; diff --git a/src/styles/table.scss b/src/styles/table.scss index b4ef538d..ec811f13 100644 --- a/src/styles/table.scss +++ b/src/styles/table.scss @@ -1,11 +1,9 @@ .reloadly-table { min-width: 640px; width: 100%; - @media (min-width: 48em) { min-width: 1024px; } - thead { tr { th { @@ -15,25 +13,32 @@ text-transform: uppercase; font-style: normal; color: $reloadly-table-head-color !important; + padding: $spacing-8; padding-bottom: 5px; padding-top: 10px; border-width: 0 0 1px !important; border-color: $reloadly-table-border-color; + border: 1px solid $reloadly-table-border-color; + vertical-align: middle !important; } } } - tbody { tr { td { font-size: 14px; line-height: 20px; font-style: normal; - padding-bottom: 5px; - padding-top: 24px; + padding: $spacing-8; border-width: 0 0 1px !important; border-color: $reloadly-table-border-color; + border: 1px solid $reloadly-table-border-color; color: $reloadly-table-body-color; + vertical-align: middle !important; + text-wrap: nowrap; + } + &:hover { + background: rgb(250, 250, 250); } } } diff --git a/src/styles/variables.scss b/src/styles/variables.scss index d461f1f7..230d3962 100644 --- a/src/styles/variables.scss +++ b/src/styles/variables.scss @@ -3,6 +3,7 @@ $reloadly-light-blue: #d4e5ff; $reloadly-mint: #53ff98; $reloadly-violet: #7700ff; $reloadly-violet-2: #852af9; +$reloadly-indigo: #635bff; $reloadly-violet-3: #c49ffd; $reloadly-violet-4: #00163a; $reloadly-violet-5: #f6edff; @@ -12,19 +13,15 @@ $reloadly-white: #ffffff; $reloadly-black: #000000; $reloadly-black-1: #334054; $reloadly-black-2: #606d80; -$reloadly-black-3: #606a7a; +$reloadly-black-3: #50565b; +$reloadly-black-3-hover: #3e4246; $reloadly-black-4: #868d95; $reloadly-black-5: #0000008f; -$reloadly-black-6: #50565b; -$reloadly-black-6-hover: #3e4246; +$reloadly-black-6: #38456c; $reloadly-black-7: #3c4247; -$reloadly-black-8: #3c4257; -$reloadly-black-9: #38456c; -$reloadly-black-10: #6a7383; -$reloadly-black-11: #687385; -$reloadly-black-12: #a3acb9; -$reloadly-black-13: #a3acba; -$reloadly-black-14: #484649; +$reloadly-danger: #df1b41; +$reloadly-orange: #ed6704; + $reloadly-table-head-color: #1a1f36; $reloadly-table-body-color: #6a7383; $reloadly-table-border-color: #ebeef1; @@ -35,83 +32,57 @@ $reloadly-filled-hover: #5b05c3; $reloadly-filled-pressed: #9c79ff; $reloadly-filled-disabled: #f1efff; $reloadly-secondary-btn: #479cab; -$reloadly-danger: #df1b41; -$reloadly-orange-1: #ed6704; $reloadly-form-disabled: #f6f8fa; $primary: $reloadly-blue; $link: $reloadly-violet; -$background-color: #ffffff; -$text: #50565b; +$text-color: #50565b; +$text-color-2: #232d3d; +$text-color-grey: #697077; $input-radius: 4px; $border-color: #d5dbe1; $input-border-color: $reloadly-light-blue; -$input-hover-border-color: $input-border-color; -$input-disabled-background-color: $reloadly-disabled-color; $family-sans-serif: "Futura", "Century Gothic", "Corbel", "Helvetica Neue", "Helvetica", "Arial", sans-serif; -// ... then derived variables are imported and overwritten -//@import "bulma/sass/utilities/derived-variables"; // other variables $input-bg-color: #d5d9e0; $container-bg-color: #f3ebff; $border-width: 1px; +$border-radius-l: 16px; +$border-radius-md: 10px; $box-bg-color: #f2f4f8; -$card-border: 1px solid #d5d9e0; -$text-primary-color: #232d3d; -$brand-color: #7700ff; -$grey-text-color: #697077; $box-shadow: 0px 2px 5px rgba(60, 66, 87, 0.12), 0px 1px 1px rgba(0, 0, 0, 0.08); +$box-halo-width: 3px; +$brand-color: $reloadly-violet; +$card-border: 1px solid #d5d9e0; $header-height: 38px; -$spacing-small: 1rem; -$spacing-smaller: 0.8rem; -$spacing-smallest: 0.6rem; -$spacing-tiny: 0.4rem; -$spacing-big: 2rem; -$spacing-huge: 6rem; -$button-padding: 12px 24px; -$padding-small: 1rem; -$padding-huge: 6rem; -$border-radius-l: 16px; -$border-radius-md: 10px; -$font-size-l: 24px; -$font-size-md: 20px; -$font-size-sm: 16px; + +$spacing-4: 4px; +$spacing-6: 6px; +$spacing-8: 8px; +$spacing-10: 10px; +$spacing-12: 12px; +$spacing-16: 16px; +$spacing-24: 24px; +$spacing-32: 32px; +$spacing-64: 64px; +$spacing-100: 100px; $form-box-padding-small: 2px 8px; $form-box-padding-medium: 4px 8px; $form-box-padding-large: 8px; -$font-small: 12px; -$font-medium: 14px; -$font-regular: 16px; -$font-big: 18px; -$font-huge: 22px; -$margin-4: 4px; -$margin-8: 8px; -$margin-10: 10px; -$margin-16: 16px; -$margin-32: 32px; +$font-size-xs: 12px; +$font-size-s: 14px; +$font-size-rg: 16px; +$font-size-l: 18px; +$font-size-xl: 20px; +$font-size-xxl: 24px; -$padding-4: 4px; -$padding-8: 8px; -$padding-10: 10px; -$padding-16: 16px; -$padding-24: 24px; -$padding-32: 32px; -$padding-64: 64px; -$padding-100: 100px; $gradient: linear-gradient(65.58deg, rgba(0, 66, 255, 0.5) -11.84%, rgba(235, 0, 27, 0.5) 98.75%), linear-gradient(0deg, #FFFFFF, #FFFFFF); -@mixin disabled { - background-color: $input-disabled-background-color; - border: 0; - box-shadow: none; - cursor: not-allowed; -} - @mixin drop-shadow { box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.3), 0px 2px 6px 2px rgba(0, 0, 0, 0.15); -} \ No newline at end of file +}